Comparison
How Patch compares
Codemagic Patch sits alongside other React Native OTA options. This page summarizes where they overlap and where they differ. For Patch-specific concepts, see Core concepts.
Products change over time. Treat this as a high-level guide when evaluating options, not a feature matrix with guaranteed parity.
What most OTA tools share
Patch, CodePush-compatible services and forks, Expo Updates, and Hot Updater all target the same core problem: ship JavaScript and asset changes to installed apps without a full store release.
Common ground includes:
- Rollout and rollback controls, to ship JavaScript or asset changes with minimal risk
- Binary diffs: prefer smaller patch downloads when only part of the bundle changed
- Deployment channels: separate Staging from Production (or equivalent) so you can test before wide release
- Client SDK: check, download, install, and apply updates on device with rollback when something goes wrong
Differences show up in hosting, licensing, how much you operate yourself, and how tightly integrated a vendor stack is.
vs Expo Updates
The headline difference is build vs buy.
| Expo Updates | Codemagic Patch | |
|---|---|---|
| Hosting | Hosted-only (EAS) | Self-hosted; you run the stack |
| Pricing | Free tier, then usage-based pricing | Free to self-host under 1 million MAU, commercial pricing at scale |
| Bare React Native | Works, but needs Expo modules in bare projects | Bare RN and Expo (prebuild plugin) |
| Fingerprinting | Yes | Yes |
| Binary diffs | Yes | Yes |
| Channels | EAS channels and branches | Staging and Production deployments |
| Rollout and rollback | Yes | Yes |
| Dashboard | Expo / EAS web UI | Patch web dashboard |
| Metrics | Release history, installs, failures | Release history, installs, failures |
| Team access | EAS org roles | User roles |
| Local evaluation | Against EAS | Full stack on localhost |
| Source | Client SDK open source; update server is proprietary | SDK, CLI, and server are source-available |
Expo Updates is a strong default if you already use EAS Build and EAS Update together; channel wiring is largely handled inside that ecosystem with minimal setup.
Costs can climb quickly past free limits if you ship often or have a large install base. That is the main trade-off against running Patch yourself.
Patch does not require EAS. You operate the server (Docker Compose or your own deployment), use cmpatch from CI or locally, and point the SDK at your API and storage domains. Setup is more involved, but you control hosting, scaling, and data.
Both offer a team-facing UI for managing releases, not only CLI workflows.
Migrating? See Migrating from Expo Updates.
vs CodePush forks
After App Center CodePush, a family of compatible forks and hosted successors remains (Codemagic CodePush, Revopush, @code-push-next, and self-hosted CodePush servers). They share a familiar mental model with Patch (apps per platform, Staging / Production, release-react-style CLI, sync() install modes), but delivery and operations differ.
| CodePush forks | Codemagic Patch | |
|---|---|---|
| Hosting | Hosted SaaS or a self-hosted CodePush-compatible server | All-in-one Compose stack (Postgres, MinIO, API, dashboard) |
| Architecture | CodePush-compatible control plane (often access-key based) | Integrated server product you deploy anywhere Docker runs |
| Local dev | Varies by fork; many assume a remote server | Full stack can run locally |
| Update check | Typically server API checks | Static manifest on storage or CDN |
| Bundle download | Storage behind the service or your configured CDN | Storage or CDN URLs from the manifest |
| Web console | Varies (hosted dashboard or limited tooling) | Dashboard with release management, metrics, and IAM |
| Team access | Access keys / org settings on the fork | RBAC managed in the dashboard |
| Audit trail | Varies | CLI identity tied to your OAuth provider (GitHub or Bitbucket) |
| Backups and DR | Build your own if self-hosting; hosted forks handle theirs | Built-in backup.sh, restore.sh, and upgrade.sh |
| Stewardship | Community forks or third-party hosts | Built and maintained by Codemagic |
| License / terms | Varies by fork | Codemagic Server License |
Choose a CodePush fork when you want drop-in CodePush compatibility or a managed host. Choose Patch when you want an integrated self-host stack with dashboard, metrics, and CDN-oriented delivery, without staying on the CodePush wire protocol.
Migrating? See Migrating from CodePush.
vs Hot Updater
Hot Updater is a community-driven OTA toolkit with a different architecture and ops profile, plugin-based backends rather than a single integrated server product.
| Hot Updater | Codemagic Patch | |
|---|---|---|
| Hosting | Provider plugins (Supabase, Cloudflare, and others) | All-in-one Compose stack (Postgres, MinIO, API, dashboard) |
| Architecture | Bring-your-own backend | Integrated server product you deploy anywhere Docker runs |
| Local dev | Unsupported | Full stack can run locally |
| Update check | Server polling database | Static manifest on storage or CDN |
| Bundle download | Your storage (often CDN-backed) | Storage or CDN URLs from manifest |
| Web console | Local console for editing releases | Cloud dashboard with release management, metrics and IAM |
| Adoption metrics | Not built in | Dashboard and CLI (downloads, installs, success / failure) |
| Team access | Share backend credentials | RBAC with management in the dashboard |
| Audit trail | No built in audit logging | CLI identity is tied to your OAuth provider (GitHub or Bitbucket) |
| Backups and DR | Build your own backup/restore process | Built-in backup.sh, restore.sh, and upgrade.sh |
| Migrations | Required for new major features | Only for management changes |
| Stewardship | Community open source | Built and maintained by Codemagic |
| License | MIT | Codemagic Server License |
Hot Updater is a good fit if you want MIT licensing and are comfortable assembling storage and hosting yourself. Patch targets teams that want an integrated server with dashboard and metrics, and optional vendor support for licensed deployments.
Licensing
Patch uses the Codemagic Server License for the server (based on FSL 1.1, converting to Apache 2.0 after two years on each version), and Apache 2.0 for the SDK and CLI. You may use, modify, and self-host without a paid license while monthly active users stay at or below one million. Above that, you need a commercial license from Codemagic. Details and pricing: Pricing.
Hot Updater is MIT. Expo Updates is tied to EAS pricing, not a source license on the client SDK. CodePush forks use their own hosted terms or upstream licenses.
Install behavior and mandatory updates
All of these tools support forcing critical updates and deferring apply timing on non-mandatory releases, but defaults and APIs differ (e.g. CodePush sync() install modes, Patch sync() + mandatoryInstallMode, Expo's Updates.reloadAsync() patterns).
Those details are worth comparing during integration, not at the hosting layer. For Patch behavior, see Checking for updates, Applying updates, and Production control.
Choosing a path
| If you… | Consider |
|---|---|
| Already live on EAS and want minimal setup | Expo Updates |
| Want CodePush-compatible APIs or a managed CodePush host | A CodePush fork |
| Want to self-host with dashboard, metrics, and team IAM | Codemagic Patch |
| Want MIT and BYO storage via plugins | Hot Updater |
To try Patch locally, start with the Local quickstart or Install.