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:iosrequires a local iOS development environment. EAS cloud builds can build iOS from Linux, but local simulator/device runs still need Apple tooling.