Alternatives
What happened to CodePush
Section titled “What happened to CodePush”CodePush was a service of Visual Studio App Center (Microsoft). In 2024 Microsoft announced the
retirement of all of App Center, which shut down on March 31, 2025 together with hosted CodePush.
It was a product decision (Microsoft focusing on Azure and GitHub), not a technical problem with
CodePush. Microsoft published a standalone code-push-server for self-hosting, but its repositories
were archived in May 2025 (read-only, unmaintained). The react-native-code-push SDK stopped
evolving too and has growing incompatibilities with the New Architecture.
What’s available today
Section titled “What’s available today”| solution | model | strengths | limitations |
|---|---|---|---|
| EAS Update (Expo) | SaaS | the market standard; rollouts, channels, runtime fingerprint, Hermes bytecode diffing | billed per MAU; the expo-updates SDK pulls in the Expo ecosystem; no official self-hosting |
| hot-updater (gronxb) | open source, self-hosted | plugins for Supabase/AWS/Cloudflare; web console | small project, API still changing |
| Revopush, Stallion | CodePush-style SaaS | easy migration from CodePush | vendor dependency, usage-based pricing |
| Codemagic Patch | self-hosted | dashboard + installer | tied to Codemagic |
code-push-server (Microsoft) |
self-hosted | compatible with the old SDK | archived; no support |
Every option updates JavaScript and assets only.
Can native code be updated?
Section titled “Can native code be updated?”Not in a way the stores allow:
- Apple: the Developer Program License Agreement (§3.3.1(B)) and guideline 2.5.2 forbid downloading executable code; interpreted code (JS) is allowed as long as it doesn’t change the app’s primary purpose. iOS code signing also prevents loading new native binaries.
- Google Play: the Device and Network Abuse policy forbids downloading executable code (DEX,
.so) from outside Google Play. It would technically work on Android, but the app would be removed.
The right approach, and the one Airdrop takes, is to make native changes safe: every update is bound to a runtime version, so older binaries keep receiving compatible JS and new binaries only receive JS built for them.
How Airdrop is different
Section titled “How Airdrop is different”- Runs on Cloudflare (Workers + D1 + R2): very low cost, no R2 egress fees, edge caching.
- Per-file diff downloads: files are addressed by SHA-256; a device downloads only what changed and copies the rest from the update it’s running.
- End-to-end code signing (ECDSA P-256) with the public key inside the binary: even a compromised server can’t publish code.
- Automatic rollback on launch crashes, with the update blacklisted on that device and reported.
- React Native 0.71+ (old and new architecture), no Expo required.
Roadmap ideas
Section titled “Roadmap ideas”- Binary diff of the Hermes bundle (bsdiff) for even smaller updates.
- Web dashboard with adoption and rollback charts.
- Multi-tenant accounts and organizations.
- Automatic
fingerprintruntime-version policy (a hash of the native dependencies). - Expo integration (
expo export:embedalready works through--bundle-dir).
Sources: Codemagic: React Native OTA tools in 2026, Bitrise: CodePush alternatives, Microsoft code-push (archived), Expo: OTA updates, Bitrise: what the app stores allow, hot-updater.