Tool pages / Expo CLI
Expo CLI 58.0.6: latest version, source diff, breaking changes and gotchas
Latest: Expo CLI 58.0.6, released (release notes).
The latest Expo CLI and SDK (expo, npm @expo/cli, repo expo/expo) is 58.0.6, released 2026-10-06 17:28 UTC (SDK 58 beta; current npm latest dist-tag is 57.0.27). Upgrade with npx expo install expo@next --fix or npm i -g expo@latest. In our source diff, the CLI commands are unchanged from 58.0.0; SDK 58 raises the minimum Node.js runtime to >=22.13.0, defaults expo login to browser-based auth, and sets command-mode NODE_ENV before loading .env files. Since 57.0.0, expo prebuild clears native folders by default (--no-clean to preserve).
How do I install or upgrade to Expo CLI 58.0.6?
Expo project upgrade (SDK 58 beta):
npx expo install expo@next --fix
npx expo --version # 58.1.5Expo project upgrade (SDK 57 stable):
npx expo install expo@latest --fixGlobal CLI install / update (npm):
npm i -g expo@latestCreate new project (SDK 58 beta):
npx create-expo-app@latest --template default@nextCreate new project (SDK 57 stable):
npx create-expo-app@latest my-appExperimental agent CLI:
npx @expo/agent-cli@latest agents:setupExpo CLI key facts
- Latest release: 58.0.6 on 2026-10-06 17:28 UTC (GitHub tag
expo@58.0.6, npm publish 17:29 UTC, bundled@expo/cli58.1.5). Active stable channel: 57.0.27 (npm publish 2026-10-06 12:10 UTC). - Two release streams are active: SDK 58 (React Native 0.88 RC, iOS 27 / Xcode 27 support) in beta under npm dist-tag
next, and SDK 57 (React Native 0.86) underlatest. - Local CLI architecture:
npx expo <command>executes@expo/clibundled within the project or installed globally; legacy globalexpo-cliis deprecated. - Minimum Node.js raised to
>=22.13.0in SDK 58 (PR #47202); odd-numbered versions (23, 25) are unsupported. expo prebuildclears and regenerates native folders by default since 57.0.0 (PR #47209); pass--no-cleanto keep existing native files.expo logindefaults to browser-based login in interactive environments since 58.0.0 (PR #46832); use--no-browseror pass--username/--passwordfor username/password login.- Setting
CI=1turns off file watching and Fast Refresh inexpo start(documented inexpo start --helpunderAGENTS:). - Google Play target API 36 extension deadline is 2026-11-01; SDK 57+ targets Android 16 (API 36).
What changed in the last 5 Expo CLI releases?
Expo CLI 58.0.6 (2026-10-06 17:28 UTC)
Expo CLI 58.0.5 (2026-10-05 23:27 UTC)
Expo CLI 58.0.4 (2026-10-05 22:26 UTC)
Expo CLI 58.0.3 (2026-10-03 13:19 UTC)
Expo CLI 58.0.2 (2026-10-01 19:35 UTC)
- Fix
AppController.sharedInstace was called before the module was initializedassertion withreact-native-macos0.83. (source) - Declare SwiftPM dependencies in module specs and honour
appContext.mainQueue. (source) - Resolve Android resource names with
@react-native/asset-utils(@expo/cli58.1.1). (source)
Which Expo CLI commands and flags were added or removed?
Expo CLI 58.0.5 → 58.0.6
0 commands added, 0 removed, 0 commands with flags added or removed; 0 command help files changed.
Method: Compared source command definitions in packages/@expo/cli/src/ at tags expo@58.0.5 and expo@58.0.6 via GitHub compare (from source, not run).
- The last two releases. CLI commands (14 subcommands) and flags are identical: 58.0.6 updated React Native initialization bootstrap and dependencies.
Expo CLI 58.0.0 → 58.0.6
0 commands added, 0 removed, 0 commands with flags added or removed; 0 command help files changed.
Method: Compared source command definitions in packages/@expo/cli/src/ across all SDK 58.0.x patch releases via GitHub compare (from source, not run).
- All 14 CLI commands (start, export, run:ios, run:android, prebuild, install, customize, config, lint, serve, login, logout, whoami, register) remained unchanged across the 58.0 line. Patch releases focused on stability, Node 22 runtime fixes, and dependency security.
Expo CLI 57.0.27 → 58.0.6
0 commands added, 0 removed, 1 command with flags added; 2 command help files changed.
Method: Compared source command definitions and argument parser specs in packages/@expo/cli/src/ between the active stable line (SDK 57) and the beta line (SDK 58) (from source, not run).
| Command | Flags added | Flags removed |
|---|---|---|
expo login | --no-browser | none |
- The two active release streams. expo login added --no-browser (browser login is now the interactive default, PR #46832). expo start updated --tunnel options to default to Expo Tunnels (@expo/ws-tunnel) with --tunnel ngrok as legacy fallback.
Expo CLI 57.0.0 → 58.0.0
0 commands added, 0 removed, 1 command with flags added; 1 command help file changed.
Method: Compared source command definitions and argument parser specs in packages/@expo/cli/src/ between major versions 57.0.0 and 58.0.0 (from source, not run).
| Command | Flags added | Flags removed |
|---|---|---|
expo login | --no-browser | none |
- Major SDK transition. expo login added --no-browser and switched interactive default to browser auth. Minimum Node.js raised from >=18 to >=22.13.0.
What breaks when upgrading Expo CLI, and how do I migrate?
| Version | Change | Migration |
|---|---|---|
| 58.0.0 | Minimum Node.js version raised to ^22.13.0. Node 18, 20, and odd-numbered versions (23, 25) are unsupported and print an error. | Upgrade Node.js to >=22.13.0 or >=24.3.0. Check your runtime with node -v. |
| 58.0.0 | expo login now defaults to browser-based authentication in interactive terminal sessions. Automated username/password login requires --no-browser. | In scripts and non-interactive sessions, pass --no-browser with -u <username> and -p <password>, or run in CI ($CI=1) where username/password login remains default. |
| 58.0.0 | Expo commands set NODE_ENV to development or production before loading .env files and app config; inherited NODE_ENV is ignored. | Do not rely on NODE_ENV=staging npx expo start; configure custom environment variables or use --no-dev for production bundling. |
| 57.0.0 | expo prebuild clears and regenerates native android and ios directories by default. Previously, an explicit --clean was required. | If you have manual native modifications in android/ or ios/ that you do not want overwritten, pass npx expo prebuild --no-clean. |
| 58.0.0 | iOS 27 scene-based lifecycle is required; prebuild generates SceneDelegate.swift and UIApplicationSceneManifest instead of creating UIWindow in AppDelegate. | Use Expo config plugins or ExpoAppDelegate event subscribers instead of overriding didFinishLaunchingWithOptions in native AppDelegate. |
| 58.0.0 | expo-file-system File.write() is now asynchronous and returns a Promise. The synchronous variant was renamed File.writeSync(). | Change File.write(content) to await File.write(content) or File.writeSync(content). |
| 58.0.0 | expo-sqlite removed libSQL remote database sync support (syncLibSQL() and libSQLOptions are gone). | Use standard SQLite databases or migrate remote sync to dedicated client libraries. |
What Expo CLI errors did we reproduce, and how do I fix them?
Node.js below 22.13.0 prints an error to stderr (Expo CLI 58.0.6)
node -v && npx expo startNode.js (v20.18.0) is outdated and unsupported. Please update to a newer Node.js LTS version (required: >=22.13.0)
Go to: https://nodejs.org/en/downloadFix: Update Node.js to version 22.13.0 or newer (or 24.3.0+). Odd-numbered releases like Node 23 and 25 are not supported by Expo. (source)
Running legacy global commands prints local CLI migration instructions and exits 1 (Expo CLI 58.0.6)
npx expo upgrade $ expo upgrade is not supported in the local CLI, please follow this guide https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/ instead
# exit 1Fix: Use npx expo install expo@next --fix (for SDK 58 beta) or npx expo install expo@latest --fix (for SDK 57). For other legacy commands: use npx expo prebuild instead of eject, npx expo-doctor instead of doctor, and eas update instead of publish. (source)
Setting --private-key-path without app config certificate throws CommandError (Expo CLI 58.0.6)
npx expo start --private-key-path ./private-key.pemCommandError: --private-key-path was specified, but updates.codeSigningCertificate is not set in the resolved app config. Code signing requires both the certificate in app config and the private key. Ensure codeSigningCertificate (and codeSigningMetadata) are present, or omit --private-key-path if you do not intend to sign.
Learn more: https://docs.expo.dev/eas-update/code-signing/
# exit 1Fix: Add updates.codeSigningCertificate and updates.codeSigningMetadata to your app config (app.json / app.config.js), or omit --private-key-path when not code-signing development manifests. (source)
Running expo install outside an Expo project throws Project root directory not found (Expo CLI 58.0.6)
npx expo install react-nativeCommandError: Project root directory not found (working directory: /tmp/scratch)
# exit 1Fix: Run npx expo commands inside a directory containing package.json and Expo app configuration, or initialize a new app first with npx create-expo-app. (source)
--non-interactive is unsupported and prints a warning (Expo CLI 58.0.6)
npx expo start --non-interactive --non-interactive is not supported, use $CI=1 insteadFix: Set the environment variable CI=1 instead of passing --non-interactive. Note that in expo start, CI=1 turns off file watching and Fast Refresh; for headless execution with Fast Refresh, redirect stdout/stderr instead: npx expo start > expo.log 2>&1. (source)
expo prebuild overwrites native modifications unless --no-clean is passed (Expo CLI 58.0.6)
npx expo prebuild✔ Cleared native project folders
✔ Created native project | android, ios directories
# Existing manual modifications in android/ and ios/ were replacedFix: Since SDK 57, expo prebuild is clean by default. To preserve manual native edits, pass npx expo prebuild --no-clean. (source)
Expo CLI release history by month
2026-10: 58.0.1 to 58.0.6 (7 releases to 2026-10-07)
2026-09: 57.0.19 to 58.0.0 (11 releases)
2026-08: 57.0.10 to 57.0.18 (16 releases)
2026-07: 56.0.13 to 57.0.9 (16 releases)
2026-06: 56.0.9 to 57.0.1 (7 releases)
2026-05: 55.0.19 to 56.0.8 (18 releases)
Sources
- Expo package releases and dist-tags on npm (read 2026-10-07)
- @expo/cli package releases and dist-tags on npm (read 2026-10-07)
- expo/expo GitHub repository releases API (read 2026-10-07)
- Expo 58.0.6 release notes on GitHub (read 2026-10-07)
- Expo 58.0.5 release notes on GitHub (read 2026-10-07)
- Expo 58.0.4 release notes on GitHub (read 2026-10-07)
- Expo 58.0.3 release notes on GitHub (read 2026-10-07)
- Expo 58.0.2 release notes on GitHub (read 2026-10-07)
- Expo 58.0.0 release notes on GitHub (read 2026-10-07)
- Expo SDK 58 Beta announcement and changelog (read 2026-10-07)
- PR #47202: Raise minimum Node.js version to ^22.13.0 (read 2026-10-07)
- PR #46832: Make browser-based login default (read 2026-10-07)
- PR #47209: Make prebuild clean by default (read 2026-10-07)
- PR #48741: Set NODE_ENV from command mode (read 2026-10-07)
- PR #43529: Add iOS generic destination, and output option (read 2026-10-07)
- PR #50863: Bootstrap React Native through setup-env (read 2026-10-07)
- PR #50862: Import LogBox and DevSettings from public API (read 2026-10-07)
- PR #50884: Support TextDecoder in React Native 0.88 (read 2026-10-07)
- PR #50975: Show stack trace in terminal for collapsed frames (read 2026-10-07)
- PR #50861: Resolve Android resource names with asset-utils (read 2026-10-07)
- PR #50885: Fix macOS AppController initialization assertion (read 2026-10-07)
- PR #49821: Declare SwiftPM dependencies in module specs (read 2026-10-07)
- PR #50997: iOS scene lifecycle initialProperties on ExpoAppSceneDelegate (read 2026-10-07)
- PR #51125: Direct template.tgz file resolution (read 2026-10-07)
- PR #51089: Fix start command on Node <22.14 console.log (read 2026-10-07)
- PR #51066: Prototype pollution guard in internal set() utility (read 2026-10-07)
- PR #50290: Development build launch URLs and EXPO_NO_DEV_MENU (read 2026-10-07)
- PR #45992: Async File.write() in expo-file-system (read 2026-10-07)
- PR #48543: Remove libSQL support from expo-sqlite (read 2026-10-07)
- @expo/cli source at expo@58.0.6 (command definitions, error strings) (read 2026-10-07)
- Expo iOS scene lifecycle migration guide (read 2026-10-07)
- EAS Observe general availability announcement (read 2026-10-07)
- React Native 0.87 release notes (Strict TypeScript API) (read 2026-10-07)
- Talking to JSI in Swift (Expo blog) (read 2026-10-07)
Last verified: 2026-10-07.