Mastering OTA Updates with Expo EAS Update
Learn how to use Expo's EAS Update for reliable over‑the‑air patches, configure runtime versions, and target release channels without a full rebuild.
Insight
Expo EAS Update lets you push JavaScript and asset changes to users instantly, bypassing the app store review cycle. Unlike the legacy expo-updates workflow, EAS Update respects a runtimeVersion – a hash that changes only when native code changes – ensuring OTA patches never break native modules. You can also segment users with release channels or branch names, delivering staged rollouts safely.
Example
// eas.json
{
"cli": { "version": ">=3.0.0" },
"build": { "development": { "runtimeVersion": { "policy": "nativeVersion" } } }
}
// App.tsx
import * as Updates from 'expo-updates';
async function checkForUpdates() {
const { isAvailable } = await Updates.checkForUpdateAsync();
if (isAvailable) await Updates.fetchUpdateAsync();
// Optionally reload to apply
Updates.reloadAsync();
}
Takeaway
Always bump runtimeVersion (or let EAS compute it from native version) whenever you modify native code. This guarantees OTA updates apply only when compatible, preventing silent crashes for users on older builds.