ScaleRocket/Mobile

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.json native config (e.g., permissions, splash screen)
  • Expo SDK upgrades
  • Any changes to native code

Setup

1. Install expo-updates

npx expo install expo-updates

2. Configure EAS Update

eas update:configure

This 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 production

Publishing 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 ProfileChannelBranch
productionproductionproduction
previewpreviewpreview

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-v1

This 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-stable

Option 3: Disable Updates Temporarily

In an emergency, point the channel to an empty branch:

eas channel:edit production --branch disabled

Monitoring Updates

View published updates:

eas update:list

View update details:

eas update:view <update-id>

Check which updates are running on the Expo dashboard.

Best Practices

  1. Always test updates on the preview channel first before pushing to production
  2. Use meaningful messages — they help you identify updates later
  3. Tag releases in Git — makes rollback easier
  4. Monitor crash reports after pushing an update
  5. Don't rely on OTA for critical fixes — if users haven't opened the app, they won't get the update until they do

On this page