BetterCodePush blog
Shipping React Native updates
Guides and deep dives on React Native over-the-air updates, staged rollouts, and shipping fixes without waiting for app review.
Migrating from Stallion to BetterCodePush without breaking OTA
A careful React Native migration from Stallion to BetterCodePush: native cutover, signing, rollout mapping, testing, rollback, and cleanup.
Read the guideMigrating from RevoPush to BetterCodePush without stranding old binaries
A careful React Native migration from RevoPush to BetterCodePush: native cutover, old-binary support, OTA rollout, and rollback.
Read the guideMigrating from Hot Updater to BetterCodePush
A staged migration from self-hosted Hot Updater to BetterCodePush, including native cutover, channel mapping, old binaries, and infrastructure retirement.
Read the guideMigrating from EAS Update to BetterCodePush
A careful EAS Update to BetterCodePush migration for Expo prebuild apps: remove one OTA runtime, ship one new binary, and cut over safely.
Read the guideMigrating from Microsoft CodePush to BetterCodePush
Microsoft App Center CodePush has been retired. Here is a practical, step-by-step path to move your React Native over-the-air updates to BetterCodePush without a risky big-bang cutover.
Read the guideIs shipping over-the-air JavaScript updates against App Store rules?
The short answer is no — within limits. Here are the exact Apple and Google provisions that permit React Native OTA updates, the enforcement cases that scared everyone, and where the real line is.
Read the guideEAS Update vs BetterCodePush: which one fits how you actually build?
Both ship JavaScript over the air. The real difference is what they assume about your project: fully managed Expo on one side, bare React Native and prebuild on the other.
Read the guideWhat you can and can't ship over the air in React Native
OTA updates cover your JavaScript, assets, and most product logic — but not native code. Here is the exact boundary, so you know when a change needs a new native build.
Read the guide“Expected 96 but got 98”: Hermes bytecode versions and OTA compatibility
Hermes compiles your JavaScript to bytecode at build time, and the runtime refuses bytecode from a different encoding version. Here is how that interacts with OTA updates, and the rules that keep you out of trouble.
Read the guideStaged rollouts and instant rollbacks: a safe OTA release playbook
Ship to 5% first, watch, then expand — or pull it back in seconds. A practical rollout discipline for React Native over-the-air updates, and exactly when to abort.
Read the guideYour OTA pipeline is a supply chain: lessons from 2026's npm attacks
This year attackers shipped malicious versions of popular React Native packages. An OTA channel can carry a compromised dependency to your whole fleet in hours — here is the defense stack that actually addresses it.
Read the guideWhy classic CodePush needs testing on React Native's New Architecture
React Native 0.76 made the New Architecture the default and 0.82 made it mandatory. Classic CodePush is archived, so verify OTA updates on your own New Architecture configuration before users depend on them.
Read the guideWhy your OTA update isn't applying: a debugging checklist that actually converges
The deploy was green, the dashboard says released, and users are still on the old bundle. Work through these common causes in order to narrow down where delivery or activation is failing.
Read the guideOTA update security: code signing and the unsigned-bundle threat model
An over-the-air channel is a path to installed apps. Code signing lets a client verify who authorized an update before it runs. Here is the threat model and the controls around it.
Read the guideOTA updates for Expo prebuild and bare React Native, without buying the whole stack
You prebuilt your Expo app into native projects, or you're on bare React Native. You want over-the-air updates without adopting an entire managed platform. Here is how that works.
Read the guideHow long does app review actually take in 2026?
Apple says 90% within 24 hours; the live trackers mostly agree — until they don't. The real planning problem is variance, not averages, and it changes how you should think about shipping fixes.
Read the guideCodePush alternatives in 2026, compared honestly
EAS Update, Stallion, RevoPush, Hot Updater, self-hosting, BetterCodePush — every option for React Native OTA updates after CodePush, including the cases where we'd tell you to pick someone else.
Read the guideThe React Native upgrade treadmill — and what OTA can and can't do about it
Google and Apple set submission requirements, while React Native evolves underneath your app. Where an update channel actually relieves the pressure — and where it cannot.
Read the guideWhat OTA updates actually cost at scale: MAUs, bandwidth, and the bill nobody models
OTA pricing looks cheap until you multiply three numbers: users, update size, and how often you ship. Here is how MAU-based billing works, with real arithmetic instead of a pricing-page screenshot.
Read the guideApple's expedited review: how it works, how to ask, and when to burn it
Expedited review is a favor Apple grants, not a service you're owed. How the request actually works, what makes a good one, and why needing it regularly is a signal about your release architecture.
Read the guideWhy CodePush really died — and how to pick a successor that won't
CodePush was retired with App Center, even though the client and server code were later published for self-hosting. The vendor-risk lesson is to evaluate the product you rely on, not just its owner.
Read the guideAI-built apps ship faster than app review. Then what?
AI coding tools compressed 'idea to working app' to days — and left 'fix to user's device' exactly where it was. Why the vibe-coding wave makes an OTA channel the first piece of infrastructure worth adding.
Read the guideSelf-hosting a CodePush server in 2026: the honest total cost
Microsoft's open-sourced code-push-server makes self-hosting free the way a puppy is free. A clear-eyed accounting of what you take on, and the two situations where it's still the right call.
Read the guideStaged rollouts, three ways: Google Play, Apple phased release, and OTA
All three let you ship to a fraction of users first. Only one of them has an undo button. How the mechanisms actually differ, and how to run them together without surprising yourself.
Read the guideFeature flags vs OTA updates: you need both, but not for the same job
Flags toggle code you already shipped; OTA ships code you haven't. Teams that conflate the two either over-flag their codebase or under-use their update channel. Here is the clean division of labor.
Read the guideOTA updates vs server-driven UI: push code, or push a description of it?
Server-driven UI moves screens to the backend; OTA updates move code to the device. They solve overlapping problems with very different costs — and most teams that build SDUI needed OTA instead.
Read the guideHot reload, hot update, OTA, in-app updates: React Native's most confused terms
Four different mechanisms, one overloaded vocabulary. A short disambiguation of what changes, where it runs, and who it's for — so you can stop talking past your teammates.
Read the guideRun a release train, ship the fixes over the air
Ad-hoc mobile releases turn every deadline into a negotiation. A release train fixes the cadence; an OTA channel handles compatible JavaScript fixes without derailing it.
Read the guideHow big can a React Native bundle get before it hurts?
There's no hard limit on JS bundle size — which is exactly the problem. Where the real costs kick in (startup, OTA delivery, your bandwidth bill) and how to find out what's actually in yours.
Read the guide