@expo/cli
58.1.13 · 19 Oct 2026MIT7.1M / weekRepositoryHomepagenpmAtom feed
388 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 58.x · latest line
58.1.11 – 58.1.133 releases that only update dependencies@expo/router-server 58.0.15@expo/metro-config 58.0.15@expo/schema-utils 58.0.2Show each
- 58.1.1319 Oct 2026@expo/router-server 58.0.15
- 58.1.1219 Oct 2026@expo/metro-config 58.0.15
- 58.1.1116 Oct 2026@expo/schema-utils 58.0.2
58.1.10
16 Oct 2026Request a development code signing certificate only when the credentials used for the request have the
RUNpermission on the account that owns the project. A user with the Runner role can now get a certificate. A scoped access token or session withoutRUNno longer requests a certificate.
58.1.9
15 Oct 2026Upgrade React Native to 0.88.0.
Fixed
npx expo run:iosandnpx expo run:androidcrashing withERR_IMPORT_ATTRIBUTE_MISSINGwhenbuildCacheProvideris set toeas.Drop legacy Node
urlusage in favor ofURL
Patch Changes
Upgrade React Native to 0.88.0.
Fixed
npx expo run:iosandnpx expo run:androidcrashing withERR_IMPORT_ATTRIBUTE_MISSINGwhenbuildCacheProvideris set toeas.Drop legacy Node
urlusage in favor ofURL
58.1.8
14 Oct 2026Update minimum required Expo Atlas version to
0.5.0Notify about changes to
metro.config.{cjs,mjs,ts,cts,mts}and.config/metro.*, not justmetro.config.jsandmetro.config.json.Update to
@expo/metro@~58.0.0(promoted to stable for SDK 58).
Patch Changes
Update minimum required Expo Atlas version to
0.5.0Notify about changes to
metro.config.{cjs,mjs,ts,cts,mts}and.config/metro.*, not justmetro.config.jsandmetro.config.json.Update to
@expo/metro@~58.0.0(promoted to stable for SDK 58).[iOS] Added a preview
experiments.swiftPackageManagerapp config setting; when enabled,expo prebuildsets up iOS with Swift Package Manager instead of CocoaPods, andexpo run:iosno longer runspod install.Improve error and log coverage in event logs and fix bundle progress, completion, and server lifecycle reporting.
Bump to
2g@1.0.0and provide process metadata, such asportfor commands likeexpo start.Update to
2g@^1.0.1Add
expo command:eventsandexpo command:pssub-commands and updated related help texts to reference these commands.
58.1.7
13 Oct 2026Load externalized modules from the project root during development for static/server rendering.
Allow interfaces extending
UnknownOutputParamsto declare optional params, so an omitted query parameter can be typed as optional, e.g.interface MyParams extends UnknownOutputParams { id?: string }.[web] Add experimental granular bundle splitting for production exports with async routes.
Patch Changes
Load externalized modules from the project root during development for static/server rendering.
Allow interfaces extending
UnknownOutputParamsto declare optional params, so an omitted query parameter can be typed as optional, e.g.interface MyParams extends UnknownOutputParams { id?: string }.[web] Add experimental granular bundle splitting for production exports with async routes.
Use the streaming renderer for SSG output.
58.1.6
9 Oct 2026- removed
Remove legacy
AssetRegistryvirtual module in favor of publicAssetRegistryAPI from React Native 0.87+. expo servenow refuses to start on development exports that include server code.Load
.envfiles in the bundle's mode inexpo export:embedinstead of keeping values loaded by a parent Expo process.
Patch Changes
expo servenow refuses to start on development exports that include server code.Load
.envfiles in the bundle's mode inexpo export:embedinstead of keeping values loaded by a parent Expo process.Fixed tsconfig path normalization, including absolute targets and
${configDir}expansion in extended configs.Add @expo/platforms and consume it across tooling.
- removed
Remove legacy
AssetRegistryvirtual module in favor of publicAssetRegistryAPI from React Native 0.87+.
58.1.5
6 Oct 2026Fix stack traces for errors thrown in API routes and server data loaders during
expo start, which pointed into the server bundle or at the wrong source file.[Internal] Bootstrap React Native through
react-native/setup-envinstead ofInitializeCore.
Patch Changes
Fix stack traces for errors thrown in API routes and server data loaders during
expo start, which pointed into the server bundle or at the wrong source file.[Internal] Bootstrap React Native through
react-native/setup-envinstead ofInitializeCore.
58.1.4
5 Oct 2026Only updates dependencies:@expo/log-box 58.0.10@expo/router-server 58.0.9
58.1.3
5 Oct 2026Prevent the internal
set()object utility from writing toObject.prototypewhen a path contains__proto__,constructor, orprototype.Fix
expo startexiting on Node before v22.14.0 when an API route callsconsole.log. Stack frames whose source map fails to load are printed without source mapping instead of throwing.Replace
resolve-fromwith@expo/require-utilsforexpo/template.tgzresolution to allow for direct file resolution.
Patch Changes
Prevent the internal
set()object utility from writing toObject.prototypewhen a path contains__proto__,constructor, orprototype.Fix
expo startexiting on Node before v22.14.0 when an API route callsconsole.log. Stack frames whose source map fails to load are printed without source mapping instead of throwing.Replace
resolve-fromwith@expo/require-utilsforexpo/template.tgzresolution to allow for direct file resolution.Update
@expo/code-signing-certificatesto^0.0.7.Bump
node-forgeto^1.4.0.
58.1.2
3 Oct 2026Show the call stack of a thrown error in the terminal even when all of its frames are collapsed.
Keep stack frames from
node_moduleswhen logging server rendering errors, so they are symbolicated instead of printed raw.Preserve bundled, external, and inline stylesheet order across static and server rendering.
Patch Changes
Bump
@expo/devcertto^1.2.2,@expo/ws-tunnelto^2.0.1, and@expo/xcprettyto^4.4.6.Show the call stack of a thrown error in the terminal even when all of its frames are collapsed.
Keep stack frames from
node_moduleswhen logging server rendering errors, so they are symbolicated instead of printed raw.Preserve bundled, external, and inline stylesheet order across static and server rendering.
Fix
createJsInspectorMiddleware'sContent-Lengthheader to reflect the UTF-8 byte length of the response, instead of its UTF-16 string length, which undersized the header for any inspector app metadata (e.g. a device name) containing non-ASCII characters.Bump
semverto^7.7.4.
58.1.1
1 Oct 2026Resolve Android resource names and
drawable-*folders with@react-native/asset-utils, matching how React Native resolves embedded assets at runtime. Scales outside the standard set map to adrawable-<n>dpifolder instead of failing the export, and assets referenced through?unstable_path=drop that prefix from their resource name.Resolve Expo Updates runtime version for the dev server in development mode.
Resolve the legacy
react-native/Libraries/Image/AssetRegistryimport to the shared asset registry. React Native 0.87 removed this module, which broke libraries that still import it, such as@shopify/react-native-skiaon web.
Patch Changes
Resolve Android resource names and
drawable-*folders with@react-native/asset-utils, matching how React Native resolves embedded assets at runtime. Scales outside the standard set map to adrawable-<n>dpifolder instead of failing the export, and assets referenced through?unstable_path=drop that prefix from their resource name.Resolve Expo Updates runtime version for the dev server in development mode.
Resolve the legacy
react-native/Libraries/Image/AssetRegistryimport to the shared asset registry. React Native 0.87 removed this module, which broke libraries that still import it, such as@shopify/react-native-skiaon web.Fix
CorsMiddleware's local-hostname check to require a literal dot between IPv4 octets, instead of an unescaped regex wildcard that let non-loopback hostnames starting with127(e.g.127a1b1c1) bypass the dev server's cross-origin request guard.
58.1.0
1 Oct 2026- removed
Remove
EXPO_UNSTABLE_TUNNEL_V2env flag, and instead make Expo Tunnels the default.--tunnel ngrokmay be used to switch to the legacy tunnels. Emit
{scheme}://?__expo_url={manifestUrl}development build launch URLs instead of the legacy{scheme}://expo-development-client/?url={manifestUrl}form.Add
EXPO_NO_DEV_MENU=1to append the reserved__expo_*params that keep the dev menu closed to Expo Go and development build launch URLs: the terminal URL, the QR code,/_expo/link,/_expo/open,expo start --ios/--androidandexpo run:*.Use development for Xcode configurations with
Debugin the name and production otherwise inexpo run:ios.
Minor Changes
Emit
{scheme}://?__expo_url={manifestUrl}development build launch URLs instead of the legacy{scheme}://expo-development-client/?url={manifestUrl}form.Add
EXPO_NO_DEV_MENU=1to append the reserved__expo_*params that keep the dev menu closed to Expo Go and development build launch URLs: the terminal URL, the QR code,/_expo/link,/_expo/open,expo start --ios/--androidandexpo run:*.
Patch Changes
Use development for Xcode configurations with
Debugin the name and production otherwise inexpo run:ios.Use React Native's default
debuggableVariantsto pick the mode inexpo run:android.Note in
expo start --helpthat settingCI=1turns off file watching and Fast Refresh, and how to run without the interactive UI instead.- removed
Remove
EXPO_UNSTABLE_TUNNEL_V2env flag, and instead make Expo Tunnels the default.--tunnel ngrokmay be used to switch to the legacy tunnels.
58.0.9
29 Sep 2026Force-bump all packages, due to migration to changesets.
Patch Changes
Force-bump all packages, due to migration to changesets.
58.0.8
28 Sep 2026[Internal] Fix the
BundleOptionsimport ininternal/unstable-expo-updates-exports.d.ts, which pointed at a subpath@expo/metrodoesn't ship.[Internal] Depend on the exact
@expo/metro-configversion the CLI is published with.
58.0.7
25 Sep 2026This version does not introduce any user-facing changes.
58.0.6
23 Sep 2026This version does not introduce any user-facing changes.
58.0.5
22 Sep 2026This version does not introduce any user-facing changes.
58.0.4
21 Sep 2026This version does not introduce any user-facing changes.
58.0.3
16 Sep 2026- breaking
web.output: 'server'now renders HTML pages on each request instead of prerendering them during export. - breaking
Remove the fallback resolver for packages importing themselves by name. Metro now resolves self-references natively, but, like Node.js, only for packages that declare
exports. Enable data loaders by default for static and server output
Breaking changes
- breaking
web.output: 'server'now renders HTML pages on each request instead of prerendering them during export. - breaking
Remove the fallback resolver for packages importing themselves by name. Metro now resolves self-references natively, but, like Node.js, only for packages that declare
exports.
New features
Enable data loaders by default for static and server output
Enable server rendering by default for
web.output: "server"Add the
apiRoutesconfig plugin option to support API routes with static rendering.
Bug fixes
Fix cache pollution in production by inlined environment variable values with a vary-cache approach
Others
Add
VaryingCacheStoreand embedexpoCacheVaryfingerprints into transform results so a cache output never holds on to stale values inline
58.0.2
15 Sep 2026- breaking
Bundle source maps served by
expo startand written byexpo exportare now index maps, as Metro now always emits them. Enable server middleware by default
Remove Expo Router compatibility checks for
@react-navigationpackages.
Breaking changes
- breaking
Bundle source maps served by
expo startand written byexpo exportare now index maps, as Metro now always emits them.
New features
Enable server middleware by default
Bug fixes
Remove Expo Router compatibility checks for
@react-navigationpackages.Fix app names in prebuild templates: derive project identifiers from the raw name in XML and plists ('A & B' gave 'AampB' in plists but 'AB' elsewhere), and escape display names for Android resources and plists.
Others
Bump to
@expo/metro@58.0.0-rc.0andmetro@0.87.1
58.0.1
14 Sep 2026Upgrade React Native to 0.88.0-rc.0
58.0.0
10 Sep 2026- breaking
Remove
EXPO_ROUTER_DISABLE_NATIVE_TABS_MD. Uninstallexpo-symbolsto exclude Material Symbols support from Android apps. - breaking
Remove the
EXPO_UNSTABLE_WEB_MODALenvironment variable and its Expo Router module alias. - breaking
Use the Expo command mode to set
NODE_ENVand load .env files.
Breaking changes
- breaking
Remove
EXPO_ROUTER_DISABLE_NATIVE_TABS_MD. Uninstallexpo-symbolsto exclude Material Symbols support from Android apps. - breaking
Remove the
EXPO_UNSTABLE_WEB_MODALenvironment variable and its Expo Router module alias. - breaking
Use the Expo command mode to set
NODE_ENVand load .env files. - breaking
Make browser-based login the default for
expo login. Use--no-browser(or pass--username/--password) for username/password login. Non-interactive environments such as CI continue to use username/password login. - breaking
Raise minimum Node.js version to
^22.13.0
New features
Add
pageHeadersto exported routes manifestsApply
pageHeaderswhen serving static exports withexpo serveCreate
pageHeadersrules from loader-declaredCache-Controlheaders for SSGEmit relative asset URLs and
bundleUrlin manifest responses conditionallyResolve
hostUri,debuggerHost, and/_expo/linkdeep links from forwarded request addressesPreserve loader
Cache-Controlheaders in developmentUse default loader
Cache-Controlheader value ofno-storefor loader responses in developmentUse default
Cache-Controlheader value ofpublic, max-age=0, must-revalidatefor SSG loader files and their pagesUse default
Cache-Controlheader value ofno-storefor SSR loader responsesAdd
experiments.noxcturnalTransformWorkerwith native transformer experiment
Bug fixes
Stop writing DOM component source maps into the app binary during
expo export:embed, so Android release builds no longer shipwww.bundlesource maps with the original app source.Serve relative manifest URLs only when the client itself sends the RFC 7239
Forwardedheader, so that proxied requests from clients without relative-URL support, like released Expo Go versions through the WS tunnel, keep absolute URLs.Fail when
--private-key-pathis passed withoutupdates.codeSigningCertificatein the resolved app config, instead of ignoring the flag and continuing without signing.Show the Xcode build log path when
run:iosfails.Fix iOS asset catalog scale-to-file pairing for assets with non-standard scales.
[Internal] Fix
LogStream.destroy()racing a pending write and dropping log dataIgnore simulators reported by
devicectland support json version 5 on Xcode 27In non-interactive shells, automatically roll over to the next available port when default is busy, unless a specific port is specified with
--portorRCT_METRO_PORTIgnore a whitespace-only
REACT_NATIVE_PACKAGER_HOSTNAMEinstead of failing to start the dev serverFix opening web from the Terminal UI when the dev server was started without
--webIgnore an invalid
--portor an out-of-rangeRCT_METRO_PORTand start on the preferred port instead of prompting to use portnullResolve the signed-in username for partner provisioned actors so Expo Go can verify the account match
Switch
ManifestMiddlewaretoexpo-server's response helpers to avoid cancellations being surfaced as exceptionsSupport npm@12's dictionary-based
npm pack --jsonformatFix wirelessly connected iOS 16 and older devices being omitted from
expo run:ios --deviceselection.Fix resolution of ESLint failing in
expo lintafter prerequisites check installs itMake Android tooling (avd and adb) handling safer, more reliable, and cancellable
Serve one virtual Metro asset registry to every consumer on React Native 0.87 — Metro's generated asset modules,
react-native/asset-registryand legacy@react-native/assets-registryimports, and React Native core's internal registry imports — so Metro-registered assets and React Native's<Image>share one registry instance.Depend on
@react-native/js-polyfillsdirectly for the web polyfills instead of thereact-native/rn-get-polyfillssubpath removed in React Native 0.87.
Others
[Internal] Use
@expo/envto read the EAS config mode and keep older EAS Build versions in production mode.Add sandbox detection to telemetry context
[Internal] Remove the unreachable port fallbacks and increase consistency in port selection logic
Add experimental
tvosandmacosautolinking gated byexpriments.outOfTreePlatforms[Internal] Update logbox imports
[Internal] Align find-up
package.jsonsearch utilitiesBump to
dnssd-advertise@^1.1.6[Internal] Migrate structured event logging to the
2gpackage[Internal] Migrate an initial set of events to
2g[Internal] Resolve the dev server port once instead of re-deriving it, and read the URL environment variables outside the
UrlCreatorUpdate
expo start --private-key-pathhelp textRe-enable sextant QR code for Zed
[Internal] Fix the flaky
waitForActionAsynctimeout test by driving it with fake timers instead of real time.Bump to
multitars@1.0.2to address symlink and unicode bugs[Internal] Move static HTML asset injection into
getStaticContent().Prewarm Metro transform workers while waiting for the first development bundle request
Discover
.ts,.mts, and.ctsESLint configs as well when checking for prerequisites for ESLintBump to
@expo/metro@56.0.2andmetro@0.84.5[Internal] Align local annotations in the Metro integration with Metro's own types.
[Internal] Import Expo's Metro type extensions from
@expo/metro-configinstead of relying on global type augmentations.Bump to
@expo/metro@56.1.0andmetro@0.84.6Remove the unused
confirm_accountquery param from the browser login URL.
- 57.x
57.0.12 – 57.0.3120 releases without a noteShow each
- 57.0.3115 Oct 2026no note
- 57.0.3014 Oct 2026no note
- 57.0.2912 Oct 2026no note
- 57.0.286 Oct 2026no note
- 57.0.2724 Sep 2026no note
- 57.0.2618 Sep 2026no note
- 57.0.2515 Sep 2026no note
- 57.0.2411 Sep 2026no note
- 57.0.238 Sep 2026no note
- 57.0.224 Sep 2026no note
- 57.0.211 Sep 2026no note
- 57.0.2028 Aug 2026no note
- 57.0.1926 Aug 2026no note
- 57.0.1824 Aug 2026no note
- 57.0.1720 Aug 2026no note
- 57.0.1617 Aug 2026no note
- 57.0.1514 Aug 2026no note
- 57.0.1410 Aug 2026no note
- 57.0.136 Aug 2026no note
- 57.0.124 Aug 2026no note
57.0.11
29 Jul 2026Preserve
watchFoldersexternal toserverRootexplicitly, when they've been manually added
57.0.10
22 Jul 2026Reading the note…
57.0.9
17 Jul 2026Reading the note…
57.0.8
15 Jul 2026Reading the note…
57.0.7
15 Jul 2026Reading the note…
57.0.6
7 Jul 2026Reading the note…