In a real app
The production flow Expo recommends: eas update --channel staging on a test build, verification, then eas update:republish --destination-channel production to promote the exact same bundle, or eas update --channel production if environment variables differ. --rollout-percentage enables a gradual rollout, eas update:rollback returns to the previous update or to the one embedded in the binary. App-side behavior is set in app.json (updates.checkAutomatically, fallbackToCacheTimeout) and through the Updates API (checkForUpdateAsync, fetchUpdateAsync, reloadAsync) for teams that want to offer a reload instead of waiting for the next cold start.
Pitfall number one is the incompatible update: JavaScript calling a native module absent from the installed binary. The runtime version exists for that, and the fingerprint policy computes it from the actual native code. Number two: publishing an update from a dev machine with staging EXPO_PUBLIC_* variables. Number three: forgetting that the stores have rules; an update that changes app behavior beyond a fix is still subject to their terms.
In an audit I look at eas update:list --branch production, the channel-to-branch mapping (eas channel:list), and whether crashes carry an update identifier in the monitoring tool, otherwise nobody knows which code is actually running on users’ phones.
Related terms
Runtime version
The identifier that guarantees an OTA update is only applied to builds whose native code is compatible with it.
EAS Build
Expo’s hosted build service: profiles in eas.json, credentials management, and macOS and Linux runners for iOS and Android.
Hermes
Meta’s JavaScript engine for React Native, the default since 0.70, which precompiles the bundle to bytecode at build time.
Development build
A debug build of your own app that includes expo-dev-client: your native modules, plus a launcher to connect to Metro.
Expo
The open-source framework React Native recommends: a native module SDK, a CLI, prebuild, Expo Router, and the EAS cloud services.
Our services on this
Expo migration
Move a bare React Native app to Expo: prebuild, config plugins, development builds, EAS Build and Update. PR by PR, in your repo, without a rewrite.
App development
From idea to store with a squad of senior React Native engineers who already work together: scoping, Expo architecture, design system, CI/CD, handover.