EAS Update alternative: same client, different billing

EAS Update is Expo's own update service and the reference implementation of the Expo Updates protocol — the same wire protocol Otapush speaks. This page is not going to argue that we are "better". The client library compiled into your app is identical either way, so the honest comparison is about everything around the client: accounts, billing, and what leaving costs.

When EAS Update is the right choice

Stay on EAS if all of these are true:

  • you can pay Expo with an internationally issued card,
  • you do not need ruble billing or an invoice from a Russian legal entity,
  • you like getting builds, store submissions and updates from one vendor.

EAS Update is maintained by the same team that maintains expo-updates, which is as low-risk as this category gets. And because Otapush uses the same client, deciding later is cheap: switching costs one URL and one rebuild, in both directions. A comparison page that does not admit this is not being honest with you.

Where Otapush actually differs

EAS Update Otapush
Client library expo-updates expo-updates
Wire protocol Expo Updates v1 Expo Updates v1
Expo account required not required
Who runs the update server Expo we do
Metering MAU tiers, then usage-based MAU, plan limit, no automatic overage charges
Payment billed by Expo in US dollars rubles: card / SBP via T-Bank acquiring, invoice for companies
Cost of switching servers one URL + one rebuild one URL + one rebuild

Three rows carry the whole argument.

Payment. Expo bills internationally, in US dollars. Otapush bills in rubles through Russian acquiring, and companies can pay by invoice — the next section covers this in detail.

No Expo account. Otapush has its own accounts and its own CLI. Nothing in the flow — registration, publishing, rollback — touches Expo's services.

Same client. Your app keeps the stock expo-updates library, so there is no SDK to rip out and no lock-in on either side: leaving EAS costs a URL, leaving us costs a URL.

Paying from Russia

Why this is a problem at all: since March 2022, Visa and Mastercard cards issued by Russian banks do not work for payments outside Russia, and MIR is not accepted by foreign services. So a Russian card fails against any internationally billed subscription — EAS included. That is a property of the card networks, not a flaw of EAS, and a page that frames it as one is selling you something.

What we accept instead:

Cards and SBP

Bank cards (MIR, Visa, Mastercard issued in Russia) and SBP, the Faster Payments System, through T-Bank acquiring, in rubles. Card details are entered on T-Bank's payment page and never reach our servers. See Billing & plans.

Invoice for companies

Pro and Business plans can be paid by invoice to a Russian bank account. On the Billing page you set the payer to "Legal entity" and the method to "Invoice"; the server returns the invoice details, you pay from the company's account, and the plan activates when the payment arrives.

Fiscal receipts (54-FZ)

Card payments produce a fiscal receipt under 54-FZ, issued by the acquiring side and sent to your email. Receipt data is part of every payment we initialize, not an afterthought.

Migrating from EAS Update

The client stays; only the server changes. Because the update URL and the code-signing certificate are compiled into the binary, the move costs exactly one store release.

  1. Create the app in Otapush. Register in the portal (no Expo account), create an app, then run otapush login and otapush init in your project. init writes the updates block — our URL, your runtime version, the signing certificate — into app.json for managed projects, or into AndroidManifest.xml and Expo.plist for bare ones. Details in Expo setup.
  2. Register a device id. Otapush meters MAU by device, so the server asks for a stable deviceId that EAS never needed. It is one call at startup — Updates.setExtraParamAsync("deviceid", id) — with the full snippet in Expo setup.
  3. Rebuild once and ship to the stores. expo prebuild --clean, then your usual local release build (./gradlew assembleRelease, or a Release archive in Xcode) — EAS Build is not required. Installs already in the field keep pulling updates from EAS until users receive this build from the store, so publish nothing disruptive until adoption is where you want it.
  4. Publish. otapush publish --channel prod --platform ios (or android). Channels, promotion and rollback work the way the quickstart describes.

Moving back to EAS later is the same operation with the opposite URL — that symmetry is the point of sharing a protocol.

Pricing models, not price tags

Both services meter by MAU — unique devices that check for or download an update within a calendar month. Expo's public pricing page lists MAU tiers with usage-based pricing above them (expo.dev/pricing, checked 28 August 2026); our limits and prices are in the pricing section and in Billing & plans. We deliberately do not quote EAS numbers here: vendor pricing changes, and a stale figure in a comparison is worse than no figure. Compare on your own device count.

One behavioral difference is worth stating plainly: going over your Otapush limit never stops updates. The server keeps serving checks, downloads and installs; the portal shows a warning and asks you to upgrade. That is a property of the serving path, not a policy promise — the manifest endpoint has no limit check in it.

Questions

Is Otapush better than EAS Update?

No — it differs on specific axes, listed above. The protocol and the client library are the same; what changes is who runs the server, whether you need an Expo account, and how you pay. If none of those axes hurts, EAS is the reasonable default.

EAS does not accept my Russian card. What do I do?

The card is not being rejected by EAS specifically: Russian-issued Visa and Mastercard do not work for international payments at all, and MIR is not accepted abroad. Your options are a card or legal entity outside Russia, or a service billed in rubles. Otapush is the second kind: cards and SBP through Russian acquiring, invoices for companies.

How do I pay for an Expo subscription from Russia?

With a card issued outside Russia or through a foreign legal entity, Expo billing works as usual. Without either, there is no supported way — which is exactly the situation this service exists for. If you stay on EAS through foreign billing, nothing else about your app needs to change; the client is the same one we use.

Do I need an Expo account to use Otapush?

No. Registration, the CLI, publishing and rollback all live in Otapush. expo-updates is an open client library; using it does not require an Expo account, only a server that speaks its protocol.

Can I go back to EAS later?

Yes, and it costs the same as leaving did: point updates.url back, rebuild once, ship to the stores. We consider this a feature. A service you cannot leave is a service you should not join — the same argument we make on the CodePush alternative page.

What happens when I exceed my MAU limit?

Nothing stops. Updates keep being served, the portal flags the overage and asks you to upgrade, and the new limit applies to the current month once you pay. There are no automatic overage charges.

Ship your first OTA update today

The free plan includes 10 MAU — unique devices per month. No card required.