React Native over-the-air updates, from first principles to production.

OTA updates let a React Native app receive compatible JavaScript and asset changes between store releases. The hard part is not downloading a bundle—it is compatibility, integrity, rollout control, and recovery.

Last reviewed August 29, 2026

What is a React Native OTA update?

A React Native OTA update is a remotely delivered JavaScript bundle and set of compatible assets that an already-installed iOS or Android application can download and run. The native binary remains the trust boundary and supplies the native APIs that the JavaScript bundle can call.

That distinction explains both the speed and the limit: JavaScript fixes can arrive without waiting for a new binary review, but native modules, permissions, entitlements, and incompatible native interfaces still need a store build.

What can and cannot ship over the air?

ChangeUsually OTA-compatible?Reason
React component or TypeScript logicYesRuns inside the existing JavaScript runtime.
Copy, styling, and compatible imagesYesCan be bundled with the JavaScript update.
Swift, Kotlin, Objective-C, or JavaNoChanges the signed native binary.
New native module or permissionNoThe installed runtime does not contain the new contract.
JavaScript calling an API absent from older binariesNoCreates a runtime-version mismatch.
Materially changing the app’s purposeNoMay violate store policy even if technically possible.

The production safety checklist

Compatibility

Target releases to the native versions that expose the APIs the bundle expects.

Integrity

Hash every payload and use end-to-end signing for production bundles.

Progressive delivery

Start small, observe real devices, and expand the rollout deliberately.

Recovery

Retain a known-good bundle and automatically recover from a failed boot.

Observability

Measure download, install, failure, and rollback outcomes from native code.

Release discipline

Promote the same tested artifact rather than rebuilding production from different inputs.

How OTA systems select a compatible update

Every provider needs a compatibility boundary. CodePush historically used target binary versions and deployments. EAS Update uses runtime versions, branches, and channels. NitroPush scopes releases by project, environment, platform, and app version. The vocabulary differs, but the invariant is the same: a device should only run JavaScript compatible with its native runtime.

When should an update install?

Immediate installation reduces time-to-fix but interrupts the current session. Installing on the next restart or resume is usually less disruptive. A production policy often uses a calm default for normal releases and reserves immediate activation for tested, mandatory fixes.

The update check should also be intentional. Common triggers include application foreground, a settings-screen button, a post-login checkpoint, or a controlled background task. Concurrent requests should coalesce rather than race.

Why rollback needs a health signal

Downloading successfully does not prove that a bundle can render the application. A robust SDK marks a newly activated bundle as pending and waits for the app to report a known-good state. NitroPush uses notifyAppReady() for that confirmation. If the signal never arrives, the next launch restores the previous bundle.

Full bundles, file reuse, and binary delta patches

A full-bundle update is simple but can transfer many unchanged bytes. Asset reuse avoids downloading unchanged files. Binary delta systems go further by sending a patch for changed bytes inside a bundle. Delta delivery must retain a verified full-bundle fallback because devices may have different bases or miss intermediate releases.

See the transparent NitroPush delta-update methodology and the product’s delta update architecture.

Choosing an OTA provider

  • EAS Update: a natural option for teams already standardized on Expo’s runtime, channels, branches, and EAS tooling.
  • CodePush-compatible providers: useful when preserving the legacy SDK and deployment workflow is the highest priority.
  • Self-hosted systems: provide infrastructure control but transfer reliability, scaling, security, and on-call ownership to your team.
  • NitroPush: designed for React Native and Expo teams that want a Nitro Modules SDK, deployment-key environments, native lifecycle analytics, signing, rollback, and optional delta patches.

For a current decision framework, read React Native CodePush alternatives and CodePush vs EAS Update vs NitroPush.