Microsoft App Center CodePush is retired — here's your migration path
Microsoft retired App Center — and with it, CodePush — on March 31, 2025. Thousands of React Native apps relied on it to push JavaScript hotfixes without waiting on an App Store or Play Store review. If you're still on it (or on a fork), you're running on borrowed time. This is a practical migration guide.
What you actually need to replace
CodePush did one job well: ship a new JavaScript bundle to installed apps over the air. But a real OTA pipeline is more than a bundle host. In production you need staged rollouts, the ability to target a build or cohort, an audit trail of who shipped what, and — most importantly — a way to roll back automatically when a patch causes a crash spike.
- OTA bundle delivery for React Native (JavaScript) and Flutter (Dart)
- Staged / percentage rollouts with pause and resume
- Version and cohort targeting
- Automatic rollback tied to your crash-monitoring signal
- A tamper-evident audit trail for compliance
- Self-hosting, so the pipeline can't be retired out from under you again
The options
The usual replacements are Expo EAS Update (JS/RN only, hosted), Shorebird (Flutter-focused), and Capgo (Capacitor). Each solves the bundle-delivery half. What none of them do out of the box is bond the rollout to your crash monitoring and feature flags — so a bad patch still needs a human to notice and pull it.
The bonded approach
Sankofa Deploy ships Dart and JavaScript patches over the air for both Flutter and React Native — and because it's one binary with the rest of the platform, the rollout is gated by Switch (feature flags) and auto-rolled-back by Catch (crash detection). A patch that spikes crashes gets pulled in seconds, before most users ever see it, and the post-mortem writes itself.
The migration isn't just "find another bundle host." It's a chance to make releases self-healing.
How to migrate
- Remove the react-native-code-push dependency and its runtime sync calls.
- Add the Sankofa SDK and point it at your OTA channel (staging + production).
- Re-cut your first bundle and ship it to a 5% cohort behind a flag.
- Wire the crash-rate threshold so a regression rolls the release back automatically.
- Promote to 100% once the cohort is clean.
The whole point of an OTA pipeline was speed without risk. CodePush gave you speed; bonding the rollout to crashes and flags gives you the "without risk" part. See Deploy for the full flow, or read how it fits the rest of Sankofa OS.