BetterCodePush 1.0: ship, watch and recover in one place
A new update protocol, byte-sized patches, crash recovery that works even when your JavaScript cannot, release health, Remote Config, and readable stack traces. Everything new in 1.0.
BetterCodePush started as the fastest way to ship a React Native fix without waiting for app review. 1.0 is about everything around that moment: knowing a release is healthy, pulling it back when it is not, and changing behaviour without shipping a bundle at all.
1.0 is a breaking release: apps need one new store build made with the 1.0 SDK. The upgrade guide covers the six steps.
A faster, stricter update protocol
Devices no longer ask a server "is there an update for me?". They fetch one small release catalog for their platform, channel and app version from the CDN and choose the release themselves: the newest enabled release they are eligible for, otherwise the previous one, otherwise the bundle built into the app.
- Rollout and rollback changes reach devices within seconds, on their next update check.
- Catalogs carry a generation number that only goes up, so a device rejects a catalog older than one it has already seen.
- Every file is checked against its SHA-256 hash, and against your RSA signature if you sign releases. If anything fails verification, the app keeps the bundle it has.
Updates measured in bytes
deploy now builds binary patches against the releases already live on the channel, and devices download only the files that changed. A small fix to a large bundle becomes a download of a few kilobytes or less. How binary patches work.
Rollouts you can steer
Rollouts use 1,000 stable cohorts, so a device stays in or out of a rollout as you widen it. Start at 10%, then widen it with bundle update. Named target cohorts let you send a release to internal testers first. Disabling a release is the rollback: devices fall back to the previous compatible release, then to the built-in bundle.
npx bettercodepush deploy --platform ios --channel production --rollout 10
npx bettercodepush bundle update "$RELEASE_ID" --rollout-cohort-count 500 --yes
npx bettercodepush bundle disable "$RELEASE_ID" --yesCrash recovery that does not depend on your JavaScript
A bundle that crashes before its first screen rolls itself back and is never downloaded again. New in 1.0: after a crash later in the session, the next launch checks for updates from native code, so a fix or a disabled release reaches the device even if the broken JavaScript never gets far enough to check. How crash recovery works.
Insights: release health
Add the @bettercodepush/insights plugin and turn Insights on for the app, and each release gets a health view in the console: how many devices downloaded it, launched it and rolled it back after a failed start, its crash rate, and why updates fail, grouped by stage and reason. Look up a single install to see what it runs. When a release's crash rate climbs, the console suggests rolling it back; the decision stays yours. Insights is off until you turn it on, and debug builds never report. More about Insights.
Remote Config
Change copy, limits and feature flags without a store build or an OTA bundle. The @bettercodepush/remote-config plugin reads typed values with in-app defaults; you publish a template from the console or the CLI, with conditions on channel, app version, share of installs or date. Devices fetch the values that match them and switch when your app activates them, and every published template is versioned so you can roll back. Remote Config is included in the Starter, Pro and Enterprise plans. More about Remote Config.
Readable stack traces in Sentry, Bugsnag and Datadog
A crash in an OTA bundle is only useful if you can read it. The @bettercodepush/sentry-plugin, @bettercodepush/bugsnag-plugin and @bettercodepush/datadog-plugin packages upload each bundle's source map during deploy, so stack traces from an OTA release point at your source files.
Signing keys that never leave your KMS
Sign releases with a key in AWS KMS, Google Cloud KMS or your own signing service instead of a PEM file in CI. Devices verify exactly as before.
Rock projects
Apps built with Callstack's Rock framework are supported out of the box: npx bettercodepush init --build rock sets up the @bettercodepush/rock build adapter, and init picks it on its own when it finds a Rock config. OTA updates for Rock apps.
Set up with a coding agent
Claude Code, Cursor, Codex and other coding agents can now set up BetterCodePush for you. Install the skill with npx skills add bettercodepush/skills and ask your agent to add OTA updates: it installs the packages, connects your app, deploys a first update and checks it on a device, and asks you only for the steps that need your account. Set up OTA updates with a coding agent.
Get started
New to BetterCodePush? Create an account at console.bettercodepush.com and follow the getting-started guide. Already shipping with an earlier version? Start with the upgrade guide.