Commands

Run Expo commands from the Expo app root, not the lab root.

Create

npx create-expo-app@latest my-app

When the docs are in an SDK transition, pin the template shown by the current official docs instead of relying on the default:

npx create-expo-app@latest my-app --template default@sdk-57

Develop

npx expo start
npx expo start --clear
npx expo start --web

Use Expo Go only when the app has no custom native dependencies, no custom native config, and no release-specific behavior under test.

Development Builds

npx expo install expo-dev-client
npx expo run:android
npx expo run:ios
eas build --profile development --platform android
eas build --profile development --platform ios

Rebuild the development client after native dependency installs, app config changes, SDK upgrades, permission changes, config plugin changes, or native module changes.

Dependencies

npx expo install <package>
npx expo install --check
npx expo install --fix
npx expo-doctor

Use npx expo install for Expo SDK-compatible package versions. Use plain package manager install only when the package is not Expo-versioned and you have checked native compatibility.

Prebuild And Native Generation

npx expo prebuild --clean --no-install
npx expo prebuild --platform android --clean --no-install
npx expo prebuild --platform ios --clean --no-install

Use --no-install when you only need to inspect generated native changes and do not want the command to mutate dependencies.

Test

npm test
npm run test:coverage
npx jest

Router-specific tests usually use expo-router/testing-library and React Native Testing Library. Keep test files outside app/.

Build

eas build --platform android --profile preview
eas build --platform android --profile production
eas build --platform ios --profile preview
eas build --platform ios --profile production
eas build --platform android --profile production --local

Use Android APK preview builds for direct install smoke tests. Use Android AAB production builds for Google Play. Use iOS simulator builds for simulator testing and production IPA builds for TestFlight/App Store Connect.

Submit

eas submit --platform android --profile internal
eas submit --platform android --profile production
eas submit --platform ios --profile production

First submissions still require store-side setup: app record, bundle/package ID, screenshots, metadata, privacy answers, review questionnaires, and release track decisions.

Update

eas update --branch preview --message "Preview smoke update"
eas update --branch production --message "Fix copy on home screen"
eas update --channel production --message "Hotfix"
eas update:rollback

Use OTA updates for compatible JavaScript, styles, copy, and assets. Do not use OTA for native code, permissions, SDK upgrades, dependency changes with native code, app identifiers, or store-policy changes.

Inspect EAS State

eas project:info
eas build:list --limit 5
eas channel:list
eas branch:list
eas update:list
eas credentials

Gotcha: npx expo run:ios requires a local iOS development environment. EAS cloud builds can build iOS from Linux, but local simulator/device runs still need Apple tooling.