Nativestarter
Guides

Life after OTA updates: releasing a native app without EAS Update

Migrating, 6 min read

Of everything a React Native team gives up in a move to native, over-the-air updates are the one that changes daily work the most. If you used EAS Update to push JavaScript fixes without store review, that tool does not exist on the other side. Plan for its absence before the first native release, not after the first bug.

What OTA was really doing for you

OTA updates did three separate jobs, and it helps to name them: hotfixing bugs without waiting for review, changing copy and configuration quickly, and rolling features out gradually. Native replaces each job with a different tool.

Apple's guidelines do not allow a native app to download and run new executable code, so there is no native equivalent of shipping a JavaScript bundle. Data and configuration are fine; code is not.

Hotfixes: feature flags and a faster release train

Ship risky code behind remote feature flags so a bad change can be switched off without a release. This is the closest thing to an OTA rollback and it needs to be in place before the migration's first native release.

Then shorten the release train. Weekly releases with automated submission make a fix-forward a few days away instead of a few weeks. App Store review is usually fast now; the slow part is almost always your own pipeline.

Copy and configuration: remote config

Strings, limits, experiment variants and server-driven content can all come from remote configuration. Decide which screens genuinely need to change without a release and design those to read from the server; everything else can simply ship in the binary.

Gradual rollout: phased releases

The App Store's phased release rolls an update out to automatic-update users over seven days and can be paused. Google Play's staged rollouts let you choose the percentage and halt a rollout. Together with crash monitoring, these replace the gradual rollout OTA channels used to give you.

For users who stay on old versions, use a minimum-supported-version check against your API, and on Android the Play In-App Updates API to prompt for flexible or immediate updates.

Cut-over: the last OTA you ship

The final React Native release is the last one that can receive OTA updates, so make it count: have it check for and prompt towards the native version, and keep its API contracts supported until usage falls away. Keep the same bundle identifier and application ID so the native app arrives as an ordinary update, with reviews, ratings and subscriptions intact.

Run the migration with your own agent

The Migration Pack gives your coding agent the skills, reviewers and scripts to move a React Native app to native one checkpoint at a time.