Skip to content

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.

November 11, 20268 min read#mobile#react-native#self-hosting#indie
Testers Community — 12 testers for Google PlayGoogle Play's closed test needs 12 testers for 14 days. Get them from a tester community, free or paid.affiliatetesterscommunity.com ↗

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

ServiceFrameworkFree tierEntry paid planSelf-host
Expo EAS UpdateReact Native, Expo1,000 MAU$19/month, 3,000 MAUCustom server via the Expo Updates protocol
CapgoCapacitorNone; 14-day trial$14/month, 2,000 MAUYes, AGPL-3.0 backend
Capawesome CloudCapacitor, Ionic, CordovaNone; 14-day trial$9/month, 1,000 MAUPlugin downloads from any URL
Hot UpdaterReact Native, ExpoFree softwareNone (you host it)Yes, that is the product
code-push-serverReact Native (CodePush SDK)Free softwareNone (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-updates can point at any service that implements the Expo Updates protocol. Expo publishes an example at expo/custom-expo-updates-server; you set updates.url and a runtimeVersion in 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.