Why 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.
This is the failure mode that costs teams the most, because nothing tells you it is happening. Your CI publishes an update, the deploy reports success — and users may keep running the old JavaScript if the client cannot apply it. Silent staleness is worse than a loud failure. With classic CodePush archived, this is a compatibility question every New Architecture app should test rather than assume away.
Why it breaks
CodePush applies an update by restarting the JavaScript runtime and loading the new bundle. React Native 0.76 made the New Architecture the default. React Native 0.82 is New-Architecture-only, although it retains interop layers for now. That evolution can expose incompatibilities in older libraries. It does not, by itself, prove that every CodePush configuration fails; test the exact React Native version, platform, and update lifecycle you ship.
Compounding the problem: react-native-code-pushwas archived read-only by Microsoft on May 20, 2025. The upstream package will not receive normal maintenance for future React Native compatibility work.
How to tell if you are affected
- Check your React Native version. 0.76 and above default to the New Architecture.
- Check whether
newArchEnabledis on and whether you have opted into Bridgeless mode; they are related but not interchangeable configuration checks. - Publish a trivial, visible change (move a label, change a color), force an update check, fully relaunch the app, and confirm the change actually appears.
- Log the active bundle hash or version on startup and compare it against what you published. If the device reports the old hash after an update cycle, updates are not applying.
What to do about it
If your test exposes a compatibility problem, move to an update path whose maintained documentation and release tests cover your React Native configuration. BetterCodePush owns the native bundle-loading path directly and supports its documented New Architecture configurations; verify that support against your exact app before migration.
The move is not a rewrite. It is one new native build and a CLI swap, laid out step by step in migrating from CodePush to BetterCodePush. If you also upgraded React Native recently, keep an eye on Hermes bytecode compatibility — the boundary details are in what you can and can't ship over the air.