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).

Last verified 2026-10-07 against 58.0.6. Page updated . Also as Markdown and JSON.

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.5

Expo project upgrade (SDK 57 stable):

npx expo install expo@latest --fix

Global CLI install / update (npm):

npm i -g expo@latest

Create new project (SDK 58 beta):

npx create-expo-app@latest --template default@next

Create new project (SDK 57 stable):

npx create-expo-app@latest my-app

Experimental agent CLI:

npx @expo/agent-cli@latest agents:setup

Expo CLI key facts

What changed in the last 5 Expo CLI releases?

Expo CLI 58.0.6 (2026-10-06 17:28 UTC)

  • Bootstrap React Native through react-native/setup-env instead of InitializeCore. (source)
  • Import LogBox, DevSettings, and NativeComponentRegistry from react-native public API. (source)
  • Updated @expo/cli@58.1.5, expo-modules-core@58.0.14, and expo-modules-autolinking@58.0.10. (source)

Expo CLI 58.0.5 (2026-10-05 23:27 UTC)

  • Updated dependencies: @expo/cli@58.1.4, @expo/log-box@58.0.10, expo-file-system@58.0.6, expo-font@58.0.7. (source)
  • Prevent prototype pollution in internal object set() utility when paths contain __proto__, constructor, or prototype (@expo/cli 58.1.3). (source)

Expo CLI 58.0.4 (2026-10-05 22:26 UTC)

  • Add overridable initialProperties to ExpoAppSceneDelegate for iOS scene lifecycle. (source)
  • Add ./template.tgz to package exports map for direct template resolution. (source)
  • Fix expo start exit on Node before v22.14.0 when API route calls console.log. (source)

Expo CLI 58.0.3 (2026-10-03 13:19 UTC)

  • Use Hermes TextDecoder implementation in React Native 0.88 supporting UTF-16, Latin-1, and Windows-1252. (source)
  • Bump react-native-web to ~0.21.3. (source)
  • Show thrown error call stacks in terminal even when all frames are collapsed (@expo/cli 58.1.2). (source)

Expo CLI 58.0.2 (2026-10-01 19:35 UTC)

  • Fix AppController.sharedInstace was called before the module was initialized assertion with react-native-macos 0.83. (source)
  • Declare SwiftPM dependencies in module specs and honour appContext.mainQueue. (source)
  • Resolve Android resource names with @react-native/asset-utils (@expo/cli 58.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).

CommandFlags addedFlags removed
expo login--no-browsernone
  • 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).

CommandFlags addedFlags removed
expo login--no-browsernone
  • 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?

VersionChangeMigration
58.0.0Minimum 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.0expo 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.0Expo 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.0expo 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.0iOS 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.0expo-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.0expo-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 start
Node.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/download

Fix: 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 1

Fix: 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.pem
CommandError: --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 1

Fix: 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-native
CommandError: Project root directory not found (working directory: /tmp/scratch)
# exit 1

Fix: 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 instead

Fix: 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 replaced

Fix: 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)

  • 58.0.6: React Native bootstrap via setup-env and public API imports for LogBox and DevSettings. (source)
  • 58.0.4: iOS scene lifecycle initialProperties restored on ExpoAppSceneDelegate. (source)

2026-09: 57.0.19 to 58.0.0 (11 releases)

  • 58.0.0 (2026-09-10): Expo SDK 58 Beta with React Native 0.88 RC, iOS 27, and Node 22.13 requirement. (source)
  • 58.1.0: Launch URLs updated to __expo_url format; EXPO_NO_DEV_MENU=1 added; Expo Tunnels default. (source)

2026-08: 57.0.10 to 57.0.18 (16 releases)

  • 57.0.15: EAS Observe general availability and crash monitoring integration. (source)
  • 57.0.12: Strict TypeScript API compatibility for React Native 0.87. (source)

2026-07: 56.0.13 to 57.0.9 (16 releases)

  • 57.0.3: Stable data loaders and native tabs in Expo Router. (source)
  • 57.0.0: expo prebuild made clean-by-default with --no-clean override. (source)

2026-06: 56.0.9 to 57.0.1 (7 releases)

  • 57.0.0 (2026-06-25): Expo SDK 57 General Availability with React Native 0.86 and Android 16 target. (source)
  • 56.1.16: Device Hub support for Xcode 27+ simulator replacement. (source)

2026-05: 55.0.19 to 56.0.8 (18 releases)

  • 56.0.0 (2026-05-05): Expo SDK 56 GA with Swift native modules performance rewrite (1.6-2.3x faster). (source)
  • 56.0.0: Added --output option and --device generic to expo run:ios. (source)

Sources

Last verified: 2026-10-07.