OTA Updates
Push JavaScript updates to your app without going through store review using EAS Update.
OTA Updates
EAS Update lets you push JavaScript and asset updates to your users without going through App Store or Play Store review. This is ideal for bug fixes, copy changes, and small feature updates.
How It Works
OTA (Over-The-Air) updates work by downloading a new JavaScript bundle when the app launches. The native code stays the same — only JavaScript and assets are updated.
What you can update via OTA:
- Bug fixes in JavaScript/TypeScript code
- UI changes (new screens, updated layouts)
- Asset changes (images, fonts)
- Configuration changes
What requires a new build:
- New native modules (e.g., adding a new Expo plugin)
- Changes to
app.jsonnative config (e.g., permissions, splash screen) - Expo SDK upgrades
- Any changes to native code
Setup
1. Install expo-updates
npx expo install expo-updates2. Configure EAS Update
eas update:configureThis updates your app.json and eas.json with the necessary configuration.
3. Build with Updates Enabled
Create a new build that includes the update client:
eas build --platform all --profile productionPublishing Updates
Push an Update
eas update --branch production --message "Fix login button alignment"This uploads the current JavaScript bundle to EAS and associates it with the production branch.
Update a Specific Platform
eas update --branch production --platform ios --message "iOS-specific fix"
eas update --branch production --platform android --message "Android-specific fix"Channel Management
Channels connect builds to update branches. By default, your production build points to the production branch.
| Build Profile | Channel | Branch |
|---|---|---|
production | production | production |
preview | preview | preview |
Create a Custom Channel
Configure channels in eas.json:
{
"build": {
"production": {
"channel": "production"
},
"preview": {
"channel": "preview"
}
}
}Point a Channel to a Different Branch
eas channel:edit production --branch hotfix-v1This redirects all production builds to fetch updates from the hotfix-v1 branch.
Rollback
If an update causes issues, you can roll back by publishing a previous version:
Option 1: Republish from a Git Tag
git checkout v1.0.0
eas update --branch production --message "Rollback to v1.0.0"Option 2: Point Channel to a Previous Branch
eas channel:edit production --branch previous-stableOption 3: Disable Updates Temporarily
In an emergency, point the channel to an empty branch:
eas channel:edit production --branch disabledMonitoring Updates
View published updates:
eas update:listView update details:
eas update:view <update-id>Check which updates are running on the Expo dashboard.
Best Practices
- Always test updates on the
previewchannel first before pushing toproduction - Use meaningful messages — they help you identify updates later
- Tag releases in Git — makes rollback easier
- Monitor crash reports after pushing an update
- Don't rely on OTA for critical fixes — if users haven't opened the app, they won't get the update until they do