Releasing updates
Publish and promote CodePush updates
This guide explains how to publish and manage over-the-air (OTA) updates using the CodePush CLI.
Overview
After integrating the CodePush SDK into your React Native app as explained in the previous section, you can ship updates without rebuilding or resubmitting your app to the App Store or Google Play.
CodePush delivers:
- Updated JavaScript bundles
- App assets (e.g. images, fonts)
These updates are downloaded silently by users’ devices (depending on your install mode).
Recommended Workflow
Use a Staging → Production promotion flow for all releases. This ensures every update is tested before reaching end users and keeps production stable.
Step 1: Release to Staging
Publish the update to the Staging deployment first. This makes it available only to internal users, QA, or testers.
code-push release-react <app-name> <platform> --deployment-name StagingAt this stage:
- The update is not visible to production users
- You can safely validate functionality and stability
- Multiple iterations can be released without impact
Step 2: Validate in Staging
Test the update thoroughly before promoting it. Typical checks include:
- App launch and navigation flow
- New features and UI changes
- Regression testing of existing functionality
- Crash-free behavior on target devices
- Compatibility with supported app versions
Only proceed once the update is confirmed stable.
Step 3: Promote to Production
After successful validation, promote the exact same update from Staging to Production. No rebuild is required.
code-push promote <app-name> Staging ProductionThis ensures:
- The tested build is what users receive
- No discrepancies between test and production releases
- Faster and safer rollout to all users
Summary Flow:
Release to Staging -> Internal Testing & QA -> Promote to ProductionThink of this as a single pipeline with two decision points:
- Release → Staging: publish a new update for validation
- Test: verify the update is safe to ship
- Promote → Production: make it live for users
What gets uploaded
CodePush delivers only JavaScript runtime assets and the files required by the application’s JS layer.
A typical update includes:
- JavaScript bundle
- Static assets (images, fonts, etc.)
- Release metadata (deployment and version information)
CodePush does not include native binaries such as .apk or .ipa files. OTA updates are limited to changes in the JavaScript layer only.
Any modification involving native code (e.g. Swift, Objective-C, Java, Kotlin, or native modules) must be released through the App Store or Google Play.
Version control
CodePush uses a two-layer versioning model that separates native app versions from JavaScript update versions. This ensures updates are only delivered to compatible app binaries while still allowing fast OTA iteration.
1. Native App Version (Binary Version)
This is the version of the app installed from the App Store / Google Play. It defines the native code baseline that a CodePush update must be compatible with.
It maps to CFBundleShortVersionString (e.g. 1.2.0)(for iOS) and versionName (e.g. 1.2.0)(for Android)
This is the version you configure in CodePush as the target binary version.
2. CodePush Update Version
Each CodePush release is a JavaScript + asset bundle update applied on top of a native binary. These updates:
- Do not change the native app version
- Are stored and ordered within a deployment history
- Can be rolled back independently of app store releases
Target Binary Version (Compatibility Control)
To ensure updates are only delivered to compatible app builds, CodePush uses --target-binary-version
This flag determines which native app versions are eligible to receive the update.
It directly matches:
- CFBundleShortVersionString on iOS
- versionName on Android
For an example, if you specify:
--target-binary-version "1.2.0"Then only apps running version 1.2.0 will receive the update. You can also define ranges:
--target-binary-version "~1.2.0"This includes compatible patch versions like 1.2.1, 1.2.2, etc., depending on semantic versioning rules.
Next steps
After the first release workflow is working, teams typically add additional controls to manage production updates.
The next section covers:
- staged rollouts
- version targeting strategies
- rollbacks
- update safety mechanisms
For rollout monitoring and release analytics, see Analytics. For troubleshooting failed installs, see Debugging and common issues. For commands only, see CLI quick reference.