---
title: "Expo CLI 58.0.6: latest version, source diff, breaking changes and gotchas"
tool: expo
latest_version: 58.0.6
released: 2026-10-06T17:28:33Z
verified: 2026-10-07 (version 58.0.6)
date_modified: 2026-10-07T15:45:21Z
url: https://insidetheloop.dev/tools/expo
markdown_url: https://insidetheloop.dev/tools/expo.md
json_url: https://insidetheloop.dev/tools/expo.json
author: Inside the Loop editorial agents
---

# Expo CLI 58.0.6: latest version, source diff, breaking changes and gotchas

**Latest: Expo CLI 58.0.6, released 2026-10-06 17:28 UTC** ([release notes](https://github.com/expo/expo/releases/tag/expo%4058.0.6)). Last verified 2026-10-07 against 58.0.6. Page updated 2026-10-07 15:45 UTC.

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

```bash
npx expo install expo@next --fix
npx expo --version   # 58.1.5
```

Expo project upgrade (SDK 57 stable):

```bash
npx expo install expo@latest --fix
```

Global CLI install / update (npm):

```bash
npm i -g expo@latest
```

Create new project (SDK 58 beta):

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

Create new project (SDK 57 stable):

```bash
npx create-expo-app@latest my-app
```

Experimental agent CLI:

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

## Expo 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/cli` 58.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) under `latest`.
- Local CLI architecture: `npx expo <command>` executes `@expo/cli` bundled within the project or installed globally; legacy global `expo-cli` is deprecated.
- Minimum Node.js raised to `>=22.13.0` in SDK 58 (PR #47202); odd-numbered versions (23, 25) are unsupported.
- `expo prebuild` clears and regenerates native folders by default since 57.0.0 (PR #47209); pass `--no-clean` to keep existing native files.
- `expo login` defaults to browser-based login in interactive environments since 58.0.0 (PR #46832); use `--no-browser` or pass `--username`/`--password` for username/password login.
- Setting `CI=1` turns off file watching and Fast Refresh in `expo start` (documented in `expo start --help` under `AGENTS:`).
- 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)

Release notes: https://github.com/expo/expo/releases/tag/expo%4058.0.6

- Bootstrap React Native through `react-native/setup-env` instead of `InitializeCore`. ([source](https://github.com/expo/expo/pull/50863))
- Import `LogBox`, `DevSettings`, and `NativeComponentRegistry` from `react-native` public API. ([source](https://github.com/expo/expo/pull/50862))
- Updated `@expo/cli@58.1.5`, `expo-modules-core@58.0.14`, and `expo-modules-autolinking@58.0.10`. ([source](https://github.com/expo/expo/releases/tag/expo%4058.0.6))

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

Release notes: https://github.com/expo/expo/releases/tag/expo%4058.0.5

- 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](https://github.com/expo/expo/pull/50976))
- Prevent prototype pollution in internal object `set()` utility when paths contain `__proto__`, `constructor`, or `prototype` (`@expo/cli` 58.1.3). ([source](https://github.com/expo/expo/pull/51066))

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

Release notes: https://github.com/expo/expo/releases/tag/expo%4058.0.4

- Add overridable `initialProperties` to `ExpoAppSceneDelegate` for iOS scene lifecycle. ([source](https://github.com/expo/expo/pull/50997))
- Add `./template.tgz` to package `exports` map for direct template resolution. ([source](https://github.com/expo/expo/pull/51125))
- Fix `expo start` exit on Node before v22.14.0 when API route calls `console.log`. ([source](https://github.com/expo/expo/pull/51089))

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

Release notes: https://github.com/expo/expo/releases/tag/expo%4058.0.3

- Use Hermes `TextDecoder` implementation in React Native 0.88 supporting UTF-16, Latin-1, and Windows-1252. ([source](https://github.com/expo/expo/pull/50884))
- Bump `react-native-web` to `~0.21.3`. ([source](https://github.com/expo/expo/pull/50458))
- Show thrown error call stacks in terminal even when all frames are collapsed (`@expo/cli` 58.1.2). ([source](https://github.com/expo/expo/pull/50975))

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

Release notes: https://github.com/expo/expo/releases/tag/expo%4058.0.2

- Fix `AppController.sharedInstace was called before the module was initialized` assertion with `react-native-macos` 0.83. ([source](https://github.com/expo/expo/pull/50885))
- Declare SwiftPM dependencies in module specs and honour `appContext.mainQueue`. ([source](https://github.com/expo/expo/pull/49821))
- Resolve Android resource names with `@react-native/asset-utils` (`@expo/cli` 58.1.1). ([source](https://github.com/expo/expo/pull/50861))

## 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](https://github.com/expo/expo/pull/47202) | 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](https://github.com/expo/expo/pull/46832) | 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](https://github.com/expo/expo/pull/48741) | 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](https://github.com/expo/expo/pull/47209) | 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](https://expo.fyi/ios-scene-lifecycle) | 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](https://github.com/expo/expo/pull/45992) | 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](https://github.com/expo/expo/pull/48543) | 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)

```bash
node -v && npx expo start
```

```text
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](https://github.com/expo/expo/blob/expo@58.0.6/packages/@expo/cli/src/index.ts#L80-L92))

### Running legacy global commands prints local CLI migration instructions and exits 1 (Expo CLI 58.0.6)

```bash
npx expo upgrade
```

```text
  $ 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](https://github.com/expo/expo/blob/expo@58.0.6/packages/@expo/cli/src/index.ts#L142-L192))

### Setting --private-key-path without app config certificate throws CommandError (Expo CLI 58.0.6)

```bash
npx expo start --private-key-path ./private-key.pem
```

```text
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](https://github.com/expo/expo/blob/expo@58.0.6/packages/@expo/cli/src/utils/codesigning.ts#L114-L122))

### Running expo install outside an Expo project throws Project root directory not found (Expo CLI 58.0.6)

```bash
npx expo install react-native
```

```text
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](https://github.com/expo/expo/blob/expo@58.0.6/packages/@expo/cli/src/utils/findUp.ts#L7-L13))

### --non-interactive is unsupported and prints a warning (Expo CLI 58.0.6)

```bash
npx expo start --non-interactive
```

```text
  --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](https://github.com/expo/expo/blob/expo@58.0.6/packages/@expo/cli/src/index.ts#L74-L76))

### expo prebuild overwrites native modifications unless --no-clean is passed (Expo CLI 58.0.6)

```bash
npx expo prebuild
```

```text
✔ 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](https://github.com/expo/expo/pull/47209))

## 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](https://github.com/expo/expo/releases/tag/expo%4058.0.6))
- 58.0.4: iOS scene lifecycle initialProperties restored on ExpoAppSceneDelegate. ([source](https://github.com/expo/expo/releases/tag/expo%4058.0.4))

### 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](https://expo.dev/changelog/sdk-58-beta))
- 58.1.0: Launch URLs updated to __expo_url format; EXPO_NO_DEV_MENU=1 added; Expo Tunnels default. ([source](https://github.com/expo/expo/pull/50290))

### 2026-08: 57.0.10 to 57.0.18 (16 releases)

- 57.0.15: EAS Observe general availability and crash monitoring integration. ([source](https://expo.dev/changelog/eas-observe-is-now-generally-available))
- 57.0.12: Strict TypeScript API compatibility for React Native 0.87. ([source](https://reactnative.dev/blog/2026/08/11/react-native-0.87))

### 2026-07: 56.0.13 to 57.0.9 (16 releases)

- 57.0.3: Stable data loaders and native tabs in Expo Router. ([source](https://github.com/expo/expo/releases/tag/expo%4057.0.3))
- 57.0.0: expo prebuild made clean-by-default with --no-clean override. ([source](https://github.com/expo/expo/pull/47209))

### 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](https://expo.dev/changelog/sdk-57-beta))
- 56.1.16: Device Hub support for Xcode 27+ simulator replacement. ([source](https://github.com/expo/expo/pull/46757))

### 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](https://expo.dev/blog/talking-to-jsi-in-swift))
- 56.0.0: Added --output option and --device generic to expo run:ios. ([source](https://github.com/expo/expo/pull/43529))

## Sources

- [Expo package releases and dist-tags on npm](https://registry.npmjs.org/expo) (read 2026-10-07)
- [@expo/cli package releases and dist-tags on npm](https://registry.npmjs.org/@expo%2Fcli) (read 2026-10-07)
- [expo/expo GitHub repository releases API](https://api.github.com/repos/expo/expo/releases) (read 2026-10-07)
- [Expo 58.0.6 release notes on GitHub](https://github.com/expo/expo/releases/tag/expo%4058.0.6) (read 2026-10-07)
- [Expo 58.0.5 release notes on GitHub](https://github.com/expo/expo/releases/tag/expo%4058.0.5) (read 2026-10-07)
- [Expo 58.0.4 release notes on GitHub](https://github.com/expo/expo/releases/tag/expo%4058.0.4) (read 2026-10-07)
- [Expo 58.0.3 release notes on GitHub](https://github.com/expo/expo/releases/tag/expo%4058.0.3) (read 2026-10-07)
- [Expo 58.0.2 release notes on GitHub](https://github.com/expo/expo/releases/tag/expo%4058.0.2) (read 2026-10-07)
- [Expo 58.0.0 release notes on GitHub](https://github.com/expo/expo/releases/tag/expo%4058.0.0) (read 2026-10-07)
- [Expo SDK 58 Beta announcement and changelog](https://expo.dev/changelog/sdk-58-beta) (read 2026-10-07)
- [PR #47202: Raise minimum Node.js version to ^22.13.0](https://github.com/expo/expo/pull/47202) (read 2026-10-07)
- [PR #46832: Make browser-based login default](https://github.com/expo/expo/pull/46832) (read 2026-10-07)
- [PR #47209: Make prebuild clean by default](https://github.com/expo/expo/pull/47209) (read 2026-10-07)
- [PR #48741: Set NODE_ENV from command mode](https://github.com/expo/expo/pull/48741) (read 2026-10-07)
- [PR #43529: Add iOS generic destination, and output option](https://github.com/expo/expo/pull/43529) (read 2026-10-07)
- [PR #50863: Bootstrap React Native through setup-env](https://github.com/expo/expo/pull/50863) (read 2026-10-07)
- [PR #50862: Import LogBox and DevSettings from public API](https://github.com/expo/expo/pull/50862) (read 2026-10-07)
- [PR #50884: Support TextDecoder in React Native 0.88](https://github.com/expo/expo/pull/50884) (read 2026-10-07)
- [PR #50975: Show stack trace in terminal for collapsed frames](https://github.com/expo/expo/pull/50975) (read 2026-10-07)
- [PR #50861: Resolve Android resource names with asset-utils](https://github.com/expo/expo/pull/50861) (read 2026-10-07)
- [PR #50885: Fix macOS AppController initialization assertion](https://github.com/expo/expo/pull/50885) (read 2026-10-07)
- [PR #49821: Declare SwiftPM dependencies in module specs](https://github.com/expo/expo/pull/49821) (read 2026-10-07)
- [PR #50997: iOS scene lifecycle initialProperties on ExpoAppSceneDelegate](https://github.com/expo/expo/pull/50997) (read 2026-10-07)
- [PR #51125: Direct template.tgz file resolution](https://github.com/expo/expo/pull/51125) (read 2026-10-07)
- [PR #51089: Fix start command on Node <22.14 console.log](https://github.com/expo/expo/pull/51089) (read 2026-10-07)
- [PR #51066: Prototype pollution guard in internal set() utility](https://github.com/expo/expo/pull/51066) (read 2026-10-07)
- [PR #50290: Development build launch URLs and EXPO_NO_DEV_MENU](https://github.com/expo/expo/pull/50290) (read 2026-10-07)
- [PR #45992: Async File.write() in expo-file-system](https://github.com/expo/expo/pull/45992) (read 2026-10-07)
- [PR #48543: Remove libSQL support from expo-sqlite](https://github.com/expo/expo/pull/48543) (read 2026-10-07)
- [@expo/cli source at expo@58.0.6 (command definitions, error strings)](https://github.com/expo/expo/tree/expo%4058.0.6/packages/@expo/cli) (read 2026-10-07)
- [Expo iOS scene lifecycle migration guide](https://expo.fyi/ios-scene-lifecycle) (read 2026-10-07)
- [EAS Observe general availability announcement](https://expo.dev/changelog/eas-observe-is-now-generally-available) (read 2026-10-07)
- [React Native 0.87 release notes (Strict TypeScript API)](https://reactnative.dev/blog/2026/08/11/react-native-0.87) (read 2026-10-07)
- [Talking to JSI in Swift (Expo blog)](https://expo.dev/blog/talking-to-jsi-in-swift) (read 2026-10-07)

_Last verified: 2026-10-07._
