CodePush is gone: OTA update alternatives for Capacitor and beyond
Microsoft retired CodePush, and Expo's EAS Update only serves React Native. If you're on Capacitor and need over-the-air updates, here are the real alternatives — and how OtaKit compares.
For years, Microsoft CodePush was the default answer to “how do I ship a hot fix without a store review?” It's now retired. Its natural successor, Expo's EAS Update, is excellent — but it only serves React Native apps. If you're on Capacitor, or you're choosing a stack and want live updates to be a solved problem, here's the real landscape and how the options compare.
The gap CodePush left: a vendor-neutral, cross-framework way to push web-layer updates over the air. For Capacitor apps, that's exactly what tools like OtaKit exist to fill.
What happened to CodePush
CodePush was folded into Microsoft's App Center, and App Center's retirement took the standalone CodePush service with it. Microsoft pointed React Native users toward Expo's EAS Update. For teams that had standardized on CodePush — including Cordova and older hybrid apps — that meant finding a new home for their update pipeline.
Why EAS Update isn't the answer for everyone
EAS Update is the strong choice if you are building in React Native with Expo. It doesn't serve Capacitor or Cordova apps, and it's tied to Expo's build and release tooling. If your app is a web app wrapped with Capacitor — as a growing share of mobile apps are — you need something built for the web layer.
The alternatives, compared
| Tool | For | Notes |
|---|---|---|
| CodePush | React Native / Cordova | Retired — no longer an option |
| EAS Update | React Native (Expo only) | Great, but React Native only |
| OtaKit | Capacitor | No MAU/bandwidth metering, CDN-direct, delta + E2E encryption, MIT stack |
| Capgo | Capacitor | Mature; meters monthly active users |
| Capawesome | Capacitor | Meters monthly active users |
| Appflow | Capacitor / Cordova | Ionic's platform; enterprise pricing |
What to look for in a replacement
- Framework fit. On Capacitor, pick a Capacitor-native tool — not one bolted onto a different runtime.
- Safe activation. Automatic rollback when a bundle fails to boot is non-negotiable. OtaKit uses a
notifyAppReady()handshake and rolls back if it never arrives. - Signed, verified delivery. Bundles should be signed and hash-checked so a compromised CDN can't serve tampered code. See OTA security.
- Pricing that doesn't punish growth. MAU or bandwidth metering means your bill scales with success. OtaKit doesn't meter either.
- Efficient updates. Delta updates matter for asset-heavy apps on mobile networks.
Migrating a Capacitor app to OtaKit
If you're moving off a retired or ill-fitting tool, the switch is small: install the plugin, set your app id, add the health handshake, and release.
npm install @otakit/capacitor-updater npx cap sync # capacitor.config.ts -> plugins.OtaKit.appId = "YOUR_OTAKIT_APP_ID" npm install -g @otakit/cli otakit login npm run build otakit upload --release
Coming from Capgo or Capawesome specifically? The migration guide has exact config and API translations.
CodePush proved teams want to ship fixes in minutes, not days. On Capacitor, that's alive and well — the tooling just moved to where the web layer lives.
Where to go next
See how OTA works for the mechanics, and the 2026 tool comparison to weigh the Capacitor options side by side.