A Modern CodePush Alternative for React Native

Microsoft retired the hosted App Center CodePush service on March 31, 2025. If your React Native app still relies on CodePush, here's what to consider when choosing a replacement—and how to migrate to Stallion.

The replacement isn't just about delivering another JavaScript bundle. Production apps need reliable releases, testing, controlled rollouts, rollback, security, release visibility, and infrastructure that can scale with the organization.

What happened to CodePush?

Microsoft retired the hosted App Center CodePush service on March 31, 2025. Teams that relied on CodePush for OTA updates now need to decide how they want to handle their existing update workflow.

The hosted service is gone

The managed CodePush service is no longer available, so teams need a new OTA delivery strategy.

Traditional full-bundle delivery can be inefficient

Legacy CodePush-style OTA delivery sends the full JavaScript bundle for an update. When only a small part of an application changes, that can mean users download much more data than the change itself requires.

Production controls matter

Testing, staged rollouts, monitoring, rollback, security, and release visibility become increasingly important as your app and user base grow.

Modern React Native needs modern tooling

Your OTA workflow needs to fit the React Native versions, architecture, and deployment process your team uses today.

A small change shouldn't mean a large download

A designer asks for a small UI change. Your JavaScript bundle changes by only a few lines, but a full-bundle OTA workflow may still require users to download the entire bundle. Stallion Patch Updates can generate a differential patch containing the changes between releases.

18.3 MB
Full bundle
236 KB
Stallion patch
Smaller download

Example from a Stallion patch update. Actual patch size varies depending on bundle size and the changes included in a release.

Patch Delivery: Any-to-Any, On Demand

Stallion Patch Updates support binary-safe differential delivery with on-demand patch generation between any two Stallion bundle versions.

A patch is automatically generated between the previous and new release as part of the normal release workflow. When users need to move across a version gap, Stallion can generate the required patch on demand rather than requiring every intermediate release to be applied first. This gives teams more flexibility when users are running different versions of an app.

Performance Benchmarks — React Native Stallion Patch Updates

Patch size depends heavily on the type and size of the change. The examples below illustrate how small a differential update can become compared with a full bundle.

ExampleFull BundleStallion PatchIllustrative Reduction
Small JS Edit2.5 MB50 KB98% smaller
Constant Change2.5 MB12 KB99.5% smaller
Screen UI Tweak2.5 MB150 KB94% smaller
Large Feature Update2.5 MB800 KB68% smaller

Illustrative Stallion patch scenarios. Actual patch size varies by bundle, React Native version, and the files changed in a release.

The practical benefit is straightforward: when a change can be represented by a small patch, users download substantially less data than they would with a full bundle.

What are your options now?

If you're moving away from CodePush, there are several paths you can take. The right choice depends on how much infrastructure your team wants to manage and how much control you need over releases.

Self-Hosted CodePush Fork

Keep a familiar CodePush-style workflow while managing the infrastructure, storage, CDN, security, maintenance, and operational reliability yourself.

Managed OTA Platform

Use a managed OTA service with release controls, differential updates, analytics, rollback, testing, security, and enterprise capabilities.

React Native Stallion

Stallion is designed for teams that want a managed React Native OTA platform without taking on the infrastructure required to operate the service themselves.

For organizations with stricter infrastructure requirements, Stallion also supports regional hosting, self-hosted and on-premise deployment options.

Cost-Effective OTA for React Native

OTA pricing matters once your application starts reaching larger MAU counts and shipping frequently. Stallion is designed to keep the cost of production OTA predictable:

Free

  • • 10K MAUs
  • • 50 GB download bandwidth

No paid subscription required to get started.

Pro

$51/month

Includes:

  • • 100K MAUs
  • • 2 TB download bandwidth
  • • Patch Updates

Enterprise

Custom pricing

For organizations with large-scale or specialized requirements, Enterprise can include:

  • • 1M+ MAUs
  • • 30 TB download bandwidth
  • • Dedicated support
  • • Uptime SLA
  • • Custom enterprise features

The Enterprise plan is fully customizable to the application's scale and organizational requirements. See Stallion pricing →

What should you look for in a CodePush replacement?

The right OTA platform should fit the way your team actually ships and operates React Native applications.

Efficient, Flexible Updates

Differential patches with on-demand generation can reduce the amount of data users need to download and let them move between release versions without forcing every intermediate update.

Safe Releases

Test releases and gradually roll them out to users before increasing exposure.

Rollback & Recovery

Quickly return users to a known-good release when something goes wrong, with recovery mechanisms designed to prevent failed updates from leaving the app unusable.

Release Visibility

Track adoption, downloads, release health, rollback activity, and patch performance.

Secure Delivery

Protect OTA artifacts with signing, integrity verification, and controlled release workflows.

Enterprise Infrastructure

Support requirements such as Enterprise SSO, audit logs, regional data hosting, self-hosting, on-premise deployment, and SLA-backed availability.

Different OTA solutions fit different teams. Self-hosted CodePush forks may make sense for teams that want to preserve a familiar workflow while managing the infrastructure themselves. Stallion is designed for teams that want a managed React Native OTA platform with efficient differential updates, release controls, testing, analytics, security, and enterprise deployment options.

Comparison

Compare React Native OTA Solutions

How Stallion stacks up against CodePush and Expo Updates across the capabilities that matter in production.

Differential / patch updates
Stallion
Binary-safe patches with on-demand generation between any two Stallion versions
CodePush / forks
Legacy CodePush uses full-bundle OTA; capabilities vary by fork
Expo Updates
Bundle diffing with on-demand patches for update pairs
Rollouts
Stallion
Gradual percentage-based rollouts
CodePush / forks
Deployment-based; fork-dependent
Expo Updates
Percentage-based and branch-based rollouts
Rollback & crash recovery
Stallion
Automatic + manual recovery with JS and native crash detection
CodePush / forks
Rollback/recovery varies by fork
Expo Updates
Manual rollback + automatic recovery for qualifying launch-time failures
Rollback analytics
Stallion
Grouped rollback failures with stack-trace insights
CodePush / forks
Not a standard capability
Expo Updates
No dedicated rollback analytics view
Release adoption analytics
Stallion
Detailed release, download, adoption and rollback insights
CodePush / forks
Limited / fork-dependent
Expo Updates
Launches, users, crash rate and payload insights
In-app testing & beta
Stallion
Purpose-built UI to switch to any version in one click — PIN-protected, including production testing
CodePush / forks
Not a standard CodePush capability
Expo Updates
Preview builds, staging channels and production-build testing
Bundle signing
Stallion
Customer-managed keys, local signing and on-device verification — all plans
CodePush / forks
Fork-dependent
Expo Updates
Customer-managed keys, local signing and on-device verification — Production & Enterprise
SSO
Stallion
SAML/OIDC via Okta, Google, Microsoft Entra & OneLogin — Enterprise
CodePush / forks
Fork/provider dependent
Expo Updates
Okta, OneLogin, Microsoft Entra ID & Google Workspace — Production & Enterprise
Regional data hosting
Stallion
Choose your data region
CodePush / forks
Depends on hosting setup
Expo Updates
No published regional EAS Update hosting option
Enterprise deployment
Stallion
Managed cloud, regional hosting or self-hosted/on-premise deployment
CodePush / forks
Self-managed infrastructure through forks
Expo Updates
Expo-managed EAS cloud service
Infrastructure control
Stallion
Control hosting, infrastructure and data location
CodePush / forks
Full control with self-hosting
Expo Updates
Expo-managed infrastructure
Audit logging
Stallion
Enterprise audit logs and security event trails
CodePush / forks
Depends on hosting implementation
Expo Updates
Plan / service dependent
SLA & uptime
Stallion
Enterprise uptime SLA and dedicated support
CodePush / forks
Infrastructure/provider dependent
Expo Updates
Enterprise SLA
Bare React Native support
Stallion
First-class support with no Expo dependency
CodePush / forks
React Native focused; fork compatibility varies
Expo Updates
Supported through expo-updates
Free OTA tier
Stallion
10K MAU
CodePush / forks
Varies by fork/provider
Expo Updates
1K MAU
Pricing at 50K MAU
Stallion
$51/mo Pro — 100K MAU included
CodePush / forks
Varies by fork/provider
Expo Updates
$199/mo Production — 50K MAU included

Comparison based on publicly documented capabilities and common production usage as of 2026. Capabilities may vary by plan, deployment model, or CodePush fork.

OTA Update Reliability

A production OTA platform should protect the application from incomplete, corrupted, or unavailable updates.

Look for safeguards such as:

Atomic Activation

Complete the update before activation.

Integrity Verification

Verify the bundle or patch before activation.

Safe Recovery

Fall back to a known-good release when recovery is needed.

Interrupted Update Recovery

Handle failed downloads and interrupted installs safely.

Stallion combines cryptographic verification, atomic patch application, rollback, and crash-aware recovery to help keep failed OTA releases from becoming broken application states.

Built for the React Native Stack You Already Use

Whether you're using bare React Native or Expo, Stallion fits into your existing application and deployment workflow.

Bare React Native

Use Stallion without an Expo dependency.

Expo

Integrate Stallion with supported Expo workflows while continuing to use Expo for development and native builds.

New Architecture

Support modern React Native applications using the New Architecture.

iOS & Android

Deliver OTA updates across both platforms.

Learn more in our Expo integration guide and New Architecture documentation.

Built From the Ground Up for Enterprise OTA

Stallion is built with enterprise OTA requirements in mind—not simply a hosted replacement for a legacy update service. Enterprise deployments can combine:

  • Audit logs and security event trails
  • Customer-managed bundle signing
  • Enterprise SSO and team access controls
  • Regional data hosting
  • Self-hosted and on-premise deployment
  • SOC 2 Type I compliance
  • Enterprise uptime SLA
  • Dedicated support
  • High-performance AWS-backed infrastructure and CDN delivery

The platform is designed to support organizations that need production-grade security, reliability, compliance, and control around their React Native update infrastructure.

For regulated or security-sensitive workloads, regional hosting and on-premise deployment provide additional control over where OTA infrastructure and data operate.

Explore Stallion Enterprise →

Migrate from CodePush to Stallion

Stallion provides a modern CodePush replacement for teams migrating legacy React Native OTA workflows. Move your existing OTA workflow to Stallion and validate the migration before rolling it out to production.

The migration at a glance

1
Install Stallion
Replace the CodePush SDK with Stallion.
2
Configure your app
Update the required project and native configuration.
3
Publish your bundle
Upload your first OTA release through the Stallion CLI.
4
Test
Verify the release on a production build.
5
Roll out
Start with a controlled rollout and increase it when you're confident.

Step 1 — Remove CodePush and Install Stallion SDK

Remove CodePush SDK and all related settings, API keys, and native configurations from your project.

npm install react-native-stallion

or with Yarn: yarn add react-native-stallion

Step 2 — Native Changes (iOS & Android)

Android: Override getJSBundleFile in MainApplication.java or MainApplication.kt:

@Override
protected String getJSBundleFile() {
    return Stallion.getJSBundleFile(getApplicationContext());
}

iOS: Edit bundleURL method in AppDelegate.mm or AppDelegate.swift:

- (NSURL *)bundleURL {
    #if DEBUG
        return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
    #else
        return [StallionModule getBundleURL];
    #endif
}

Run npx pod-install for iOS after making changes.

Step 3 — Add Project ID and App Token

Get your Project ID from the Stallion Dashboard and generate an App Token from project settings.

  • iOS: Add to info.plist
  • Android: Add to strings.xml

Step 4 — React Native Changes

Wrap your app with withStallion():

import { withStallion } from "react-native-stallion";

const MyApp = () => {
    // Your App.js Code
}

export default withStallion(MyApp);

Step 5 — Upload Your Bundle

Install Stallion CLI and upload your bundle:

npm install --save-dev stallion-cli
npx stallion publish-bundle \
  --upload-path=<orgname>/<project-name>/<bucket-name> \
  --platform=<android/ios> \
  --release-note="Migrated from CodePush"

Step 6 — Promote Your Bundle

In the Stallion Console, select your bucket, choose the bundle, click "Promote," fill in Target App Version and Release Note, then promote. Initially set the release to a low rollout percentage while you test, then increase the rollout when you're confident.

Step 7 — Verify the Release

Generate a release build (not debug) to ensure Metro bundler doesn't override the Stallion bundle. Launch the app to download the released bundle, then restart to apply changes.

Tip: For detailed migration instructions with code examples, check out our complete CodePush migration guide.

Before you migrate

A little preparation can make the transition smoother.

  • Check your React Native version.
  • Review your current CodePush deployment setup.
  • Identify native changes that still require an app-store release.
  • Decide how you'll test your first Stallion release.
  • Plan a gradual production rollout.

Common migration mistakes

  • Don't mix CodePush + new OTA in the same release—complete the migration first
  • Ensure versioning is aligned between your native app and OTA updates
  • Test OTA build before rollout using internal testing channels
  • Don't skip bundle signing—it's critical for security
  • Keep minimum React Native version compatible with Stallion SDK

Frequently Asked Questions

Why is CodePush no longer ideal?

CodePush has minimal updates, missing modern features like patch updates, no hosted service, and limited JavaScript API control. It's effectively in maintenance mode.

Can I self-host with modern OTA systems?

Yes—React Native Stallion supports custom infrastructure for on-premise hosting. Contact our team for more details on deployment options and requirements.

Is migration risky?

No—most teams migrate in less than 30 minutes. The API patterns are familiar, and React Native Stallion provides comprehensive migration documentation and support.

Do OTA updates violate App Store rules?

No—OTA updates are safe if you don't change native code. Both Apple and Google allow JavaScript and asset updates over-the-air.

What makes React Native Stallion better than CodePush?

React Native Stallion offers patch updates (up to 95% size reduction), hosted service, advanced JavaScript API, flexible install strategies, internal testing channels, comprehensive analytics, active development, and both hosted and on-premise options—all features CodePush lacks or no longer provides.

Is CodePush deprecated?

Yes, CodePush is effectively deprecated and in maintenance mode. Microsoft has shifted focus away from CodePush, leaving it without active development or new features. This is why many teams are looking for CodePush alternatives like React Native Stallion.

What are CodePush alternatives?

The best CodePush alternatives include React Native Stallion, Expo Updates, and self-hosted solutions. React Native Stallion is the top CodePush replacement because it offers patch updates, hosted service, active development, and better performance than CodePush.

CodePush vs Expo Updates: Which is better?

When comparing CodePush vs Expo Updates, React Native Stallion offers the best of both worlds. Unlike CodePush (deprecated) or Expo Updates (tied to Expo ecosystem), React Native Stallion provides patch updates, works with standalone apps, supports new architecture, and offers a fully managed hosted service.

Does CodePush work with React Native new architecture?

CodePush has limited support for React Native's new architecture. React Native Stallion provides full support for the new architecture, making it a better CodePush alternative for teams using modern React Native features.

Can I use CodePush alternatives with standalone apps?

Yes, React Native Stallion works perfectly with standalone React Native apps, unlike Expo Updates which requires Expo Go or EAS. This makes React Native Stallion the best CodePush alternative for standalone app deployments.

Ready to move beyond CodePush?

If your team needs smaller updates, safer releases, release visibility, and enterprise deployment options, Stallion provides a modern path forward from CodePush.

For a deeper technical breakdown, see our blog post on CodePush alternatives.

Related Resources

Found this guide useful? Add Stallion Tech to your preferred sources on Google.