Turbopush

What is CodePush? A Complete Guide to Over-the-Air Updates for React Native

React Native CodePush lets you ship OTA updates without app store review. Learn how it works, why Microsoft shut it down, and the best alternatives for 2026.

Ship a React Native app and you learn the drill fast. A bug slips through, your fix takes five minutes, and then you wait days for App Store review while users suffer.

React Native CodePush fixes this: ship JavaScript updates straight to devices, no review required. Fix goes live in minutes.

Microsoft shut down the original AppCenter CodePush in March 2025, but the technology and the name both stuck around. Here is what CodePush is, how it works, why it shut down, and what to use instead.

TL;DR

  • CodePush is an over-the-air update service that lets you push JavaScript and asset updates to React Native apps without App Store review.
  • Microsoft shut down AppCenter CodePush on March 31, 2025. The name is still the standard term developers use when searching for OTA update solutions.
  • Turbopush is a 100% API-compatible CodePush alternative that costs up to 94% less than EAS Updates. Migration takes under 30 minutes.

What is CodePush?

CodePush is an over-the-air (OTA) update service for React Native and Cordova apps. It lets developers deploy updates to JavaScript, images, and assets without submitting a new binary to the App Store or Google Play.

The name comes from Microsoft's AppCenter CodePush, the first widely adopted OTA platform for mobile. Microsoft bought it in 2015 and ran it until March 31, 2025. Even after the shutdown, "CodePush" stuck as the term developers search for when they need OTA updates.

How CodePush Works

React Native apps are made of two layers: a native shell (Swift, Kotlin, Objective-C, Java) and a JavaScript bundle (your components, logic, styles). That separation is what makes CodePush possible. If you are new to the concept, read our guide to OTA updates.

Your JavaScript gets compiled into a single file that the native shell loads at runtime. CodePush swaps that file out over the air.

React Native CodePush OTA architecture: traditional app store release vs OTA update process

Your user installs the app. The binary ships with a native shell and a JavaScript bundle from the App Store or Google Play.

The app checks for updates. Every launch, it pings the CodePush server: "Do you have a newer JavaScript bundle for me?"

It downloads in the background. If a new bundle is available and compatible with the installed native shell, it downloads silently. The user notices nothing.

The update applies. The new bundle replaces the old one, either right away or on the next app restart.

Automatic rollback on failure. If the new bundle crashes, CodePush reverts to the previous working version automatically. No hotfix scramble. No support tickets.

What You Can Update with CodePushWhat You Cannot Update
JavaScript logic and business rulesNative code (Swift, Kotlin, Java, Objective-C)
React components and screensNative library dependencies
CSS styles and layoutApp permissions and entitlements
Images and bundled assetsApp Store listing metadata
Navigation and routingSDK version changes

The History: Microsoft, AppCenter, and the Shutdown

Microsoft acquired CodePush in 2015 and made it the default OTA update service for React Native inside Visual Studio AppCenter.

In March 2024, Microsoft announced AppCenter would retire on March 31, 2025. AppCenter never became core to Microsoft's strategy: GitHub Actions and Azure DevOps already handled CI/CD, and CodePush got caught in the crossfire.

The shutdown left thousands of teams looking for a CodePush alternative. CodePush had powered updates for apps with millions of users. Options boiled down to three: find a replacement, self-host, or abandon OTA updates.

Why React Native CodePush Matters

Shipping Speed

App Store review takes 24 hours to several days. Google Play is faster but still not instant. CodePush-style updates skip the queue. A bug fix goes from your terminal to production in minutes.

Users Never Fall Behind

Most users do not update their apps. Auto-updates get disabled, notifications get ignored, old phones cannot run the latest binary. CodePush keeps your JavaScript current regardless of which binary is installed.

Gradual Rollouts

Ship a new feature to 10% of your users first. Watch crash rates. If stable, expand. If something breaks, roll back in one click. CodePush gives you deployment controls that the app stores do not.

Emergency Fixes

When production is on fire, App Store review is not an option. CodePush lets you ship a fix immediately.

CodePush Alternatives After the Shutdown

With AppCenter CodePush gone, several platforms stepped in. Here is what replaced it.

Turbopush

Turbopush was built as a drop-in replacement for AppCenter CodePush. Your imports stay the same. Your deployment keys point to Turbopush servers instead of Microsoft's. The SDK is 100% API-compatible with react-native-code-push.

Turbopush costs up to 94% less than Expo EAS Updates and up to 60% less than other CodePush alternatives.

Pricing starts at $15 per month for 30,000 monthly active users. A free tier covers 2,000 MAUs with 20 releases per month. Storage and bandwidth are included on every plan. No overage surprises.

Turbopush supports bare React Native, Expo, and the New Architecture (Fabric and TurboModules). Migrating from AppCenter CodePush takes under 30 minutes.

Expo EAS Updates

Expo's built-in OTA service is the default for Expo projects. The integration is tight, especially if you already use EAS Build. The catch is pricing. The Production plan starts at $199 per month for 50,000 MAUs, with per-user overage fees once you cross the limit. Storage and bandwidth cost extra too. See our step-by-step guide to shipping Expo OTA updates.

Self-Hosting

Microsoft open-sourced a reference server called code-push-server. Self-hosting gives you full control and no monthly SaaS bill. But you own everything: servers, databases, CDN, SSL certificates, monitoring, backups, and scaling. For most teams, the engineering time alone costs more than a managed service.

Self-hosting seems free until you factor in the DevOps hours. A single engineer spending two days per month on maintenance already exceeds the cost of Turbopush's Growth plan.

Getting Started

Ready to get React Native CodePush running? The SDK is a drop-in for react-native-code-push, so existing integrations work with minimal changes. If you are new, the getting started guide walks through your first release.

Read the Getting Started Guide →

Conclusion

CodePush turned mobile releases from a multi-day ritual into something that happens in minutes. Microsoft shut down the original service, but React Native CodePush is here to stay.

Whether you need a CodePush replacement or you are exploring OTA updates for the first time, the options today are better than ever. The question is not whether your app needs OTA updates. It is which platform you pick.


Ready to ship faster?

How is this guide?