Mobile
Over-the-Air Updates for Mobile Apps: EAS Update vs Capgo vs Capawesome (2026)
Expo EAS Update, Capgo, Capawesome Cloud and self-hosted OTA compared: free tiers, MAU pricing, React Native or Capacitor, and what Apple and Google allow.

Over-the-air (OTA) updates let you ship JavaScript, styling and asset fixes to an installed app without a new store review. For React Native and Expo apps the hosted default is Expo's EAS Update, the only one of the three with a free plan (1,000 monthly active users). For Capacitor apps the hosted choices are Capgo and Capawesome Cloud, both paid with a 14-day trial. If you would rather pay for storage than for users, every option here has a self-hosted path.
Prices and limits below were checked against each vendor's own page on 11 November 2026. The store-policy section quotes Apple's and Google's own text.
Why this comes up now
Microsoft's App Center retirement notice set March 31, 2025 as the end date for most of App Center, CodePush included. Its migration table points CodePush users to a standalone code-push-server instead. That repository is MIT-licensed but was archived on May 20, 2025, so it is read-only and Microsoft takes no issues or contributions. You can still fork and run it; you will be maintaining it yourself.
What an OTA update can and cannot change
The rule is the same everywhere: only the non-native layer moves. Expo's EAS Update docs list JS, styling and images as updatable, and say native code, native dependencies, permissions and the SDK version need a new binary. Capawesome's Live Update plugin page draws the same line for Capacitor: HTML, CSS and JavaScript yes, native changes no.
So OTA is for bug fixes, copy, layout and logic. Adding a native module, a new permission or a Capacitor or Expo SDK upgrade still goes through the stores.
Side by side
| Service | Framework | Free tier | Entry paid plan | Self-host |
|---|---|---|---|---|
| Expo EAS Update | React Native, Expo | 1,000 MAU | $19/month, 3,000 MAU | Custom server via the Expo Updates protocol |
| Capgo | Capacitor | None; 14-day trial | $14/month, 2,000 MAU | Yes, AGPL-3.0 backend |
| Capawesome Cloud | Capacitor, Ionic, Cordova | None; 14-day trial | $9/month, 1,000 MAU | Plugin downloads from any URL |
| Hot Updater | React Native, Expo | Free software | None (you host it) | Yes, that is the product |
| code-push-server | React Native (CodePush SDK) | Free software | None (you host it) | Yes; archived May 2025 |
MAU means a device that downloads at least one update in the billing cycle (Expo's definition), so users who never get an update usually do not count.
Hosted services
Expo EAS Update — React Native and Expo
Best for: Expo and React Native apps that want OTA with nothing to run.
Expo's pricing page (the update product now appears there as "Expo Update") lists:
- Free: 1,000 MAU, 100 GiB bandwidth, 20 GiB storage. No overage; you are capped at the included users.
- Starter: $19/month plus usage, 3,000 MAU included, then $0.005 per MAU in the first overage tier, dropping at higher volumes.
- Production: $199/month plus usage, 50,000 MAU included, 1 TiB bandwidth.
Updates themselves are unlimited on every plan. It also works in bare React Native projects
that install expo-updates, per the docs linked above.
Capgo — Capacitor
Best for: Capacitor apps that want a hosted service with an open-source escape hatch.
Capgo's pricing has no free plan. Every plan starts with a 14-day trial with no card, and pay-as-you-go accounts get $5 in credits valid for 12 months.
- Solo: $14/month ($12/month billed yearly), 2,000 MAU, 100 GiB bandwidth.
- Maker: $39/month, 10,000 MAU, 1,000 GiB bandwidth.
- Team: $99/month, 100,000 MAU.
Usage beyond a plan is paid from credits, starting at $0.003 per MAU; the page says overages
are not charged without your confirmation. Solo has regional discounts of 15–50% by
country. The client is
@capgo/capacitor-updater (MPL-2.0), with
major versions matching Capacitor 4 through 8:
npm install @capgo/capacitor-updater
npx cap sync
Capawesome Cloud — Capacitor, Ionic, Cordova
Best for: Capacitor or Ionic teams that want flat pricing and no usage charges.
Capawesome Cloud's pricing sells Live Updates on its own or inside a wider Platform plan. Live Updates alone:
- Starter: $9/month, 1,000 MAU, 100 GB transfer.
- Professional: $29/month, 10,000 MAU, 1 TB.
- Team: $79/month, 50,000 MAU, 3 TB.
Storage is unlimited on all plans, and every plan includes code signing and delta updates. There is no permanent free tier, only a 14-day trial; open-source projects can apply for a free OSS plan. Instead of overage fees, you get an email near the limit and can upgrade or wait for the cycle to reset. The client plugin is MIT-licensed:
npm install @capawesome/capacitor-live-update
npx cap sync
Self-hosted options
- Expo custom update server.
expo-updatescan point at any service that implements the Expo Updates protocol. Expo publishes an example at expo/custom-expo-updates-server; you setupdates.urland aruntimeVersionin app config. - Hot Updater. Hot Updater is an MIT-licensed, self-hostable OTA tool for React Native, with an Expo build adapter. Storage plugins cover S3, Cloudflare R2, Supabase Storage, Vercel Blob and others. Offering its server or console as a hosted service to others requires a "Powered by hot-updater" notice.
- Capgo self-hosted. The Capgo backend is AGPL-3.0; the README says Supabase is the only required piece for a self-hosted install. The plugin also has a manual mode that downloads zip bundles from your own URL.
- Capawesome plugin without the cloud. The Live Update plugin can download bundles from
any URL; the cloud is only needed for
sync(), channels and rollouts. - code-push-server. Works with the CodePush React Native SDK, but it is archived; treat it as a stopgap for an app already on CodePush.
What Apple and Google actually allow
Neither store names a vendor. Both draw the line at what kind of code you download and what it does.
Apple. The App Review Guidelines (2.5.2) say apps may not download code that introduces or changes features or functionality. The Developer Program License Agreement, section 3.3.1(B), carves out interpreted code: it "may be downloaded to an Application but only so long as" it meets three conditions. The code must not change the app's primary, advertised purpose; must not bypass signing, sandbox or other OS security; and, on the App Store, must not create a store for other apps.
Google. Play's Device and Network Abuse policy bans downloading executable code such as dex, JAR or .so files from anywhere but Google Play. The restriction does not apply to "code that runs in a virtual machine or an interpreter" with indirect access to Android APIs, such as JavaScript in a webview.
In practice: a bug fix or a tweak to an existing screen fits both texts. Shipping a new feature that changes what the app is for, or that reviewers never saw, is what the rules target. Expo's own docs say updates must follow the store guidelines and that behavior changes usually need review.
How to choose
- Expo or React Native, small user base: EAS Update's free plan covers 1,000 updating users at no cost and no infrastructure.
- React Native, cost-sensitive at scale: compare EAS Update's per-MAU overage with self-hosting Hot Updater or an Expo Updates protocol server on storage you already pay for.
- Capacitor, lowest entry price: Capawesome Live Updates Starter at $9/month for 1,000 MAU, or Capgo Solo at $14/month for 2,000 MAU.
- Capacitor, want to leave later without rewriting: Capgo (AGPL backend you can run) or the Capawesome plugin (MIT, works from any URL).
- Still on CodePush: plan a move; the official server is archived.
FAQ
Is there a free alternative to CodePush?
EAS Update has a free plan for 1,000 MAU on React Native and Expo. For unlimited users at no license cost, self-host Hot Updater, an Expo Updates protocol server, or a fork of the archived code-push-server.
Do OTA updates break App Store rules?
Not by themselves. Apple's license agreement allows downloaded interpreted code that does not change the app's primary purpose or bypass OS security, and Google Play exempts code running in an interpreter. Using OTA to add unreviewed features is what breaks the rules.
Can I use EAS Update with a Capacitor app?
No. EAS Update works through expo-updates in React Native projects. Capacitor apps use
Capgo's or Capawesome's plugins instead.
Does Capgo or Capawesome have a free tier?
Neither has a permanent free plan. Both offer a 14-day trial; Capgo also gives $5 of pay-as-you-go credit, and Capawesome has a free plan open-source projects can apply for.
OTA is one piece of a solo release loop; the rest is in mobile tools for solo developers. When a change does need a store build, App Store screenshot sizes covers the listing side. For more build and release tooling, browse the developer tools directory.