Expo Updates Protocol v1 · No EAS

Over-the-air updates for React Native,
without EAS or Expo cloud

Ship JavaScript and asset updates to your Expo / React Native apps instantly — without Expo cloud, without EAS, without per-request billing. Channels, rollbacks, code signing and analytics built in.

$ npm install -g otapush
$ otapush login
$ otapush init
$ otapush publish --channel staging --platform ios
✓ Update 8f3a2c1 published to staging (ios)

The same protocol as EAS Update: the expo-updates client, unchanged.

Your app talks to the update server over the standard Expo Updates protocol — the same client library you already use, no new SDK required.

Channels

Dev, staging and prod channels out of the box. Publish to staging, verify on real devices, promote to prod in one click.

Instant rollback

A bad release is one click away from being undone. Roll a channel back to the previous update — clients recover on next launch.

Real-time stats

Monthly active users, update checks, downloads and installs — broken down by day, channel and platform.

iOS + Android

One publish pipeline for both platforms. Per-platform channel state, so an iOS hotfix never disturbs Android users.

Expo & bare React Native

Managed Expo projects and bare RN alike — init patches app.json or your native AndroidManifest/Expo.plist, publish bundles with expo export or react-native bundle.

Code signing

Every manifest is signed with your app's private key. Clients verify signatures before applying an update — supply-chain safe.

No Expo account needed

Register, init, publish — that's all. No Expo login, no EAS CLI, no cloud lock-in: the app talks to the update server over the open protocol.

Otapush, EAS Update, CodePush

App Center — and with it CodePush — was retired on 31 March 2025. Here is where the remaining options differ.

Update protocolOtapushEAS UpdateCodePush (self-hosted)
Update protocolExpo Updates Protocol v1Expo Updates Protocol v1CodePush, its own
Client libraryexpo-updates, unmodifiedexpo-updates, unmodifiedreact-native-code-push
Expo accountNot neededRequiredNot needed
Who runs the serverWe doExpo doesYou do
Cost of leavingChange one URL — the client is standardChange one URL — the client is standardReplace the client library
Payment in ₽, invoice for companiesYesNoYour own hosting bill

Both Otapush and EAS Update speak the protocol the stock expo-updates client already implements, so moving between them is a configuration change rather than a migration.

Simple pricing

Metered by monthly active users (unique devices per month). The server keeps serving updates even over the limit — no surprise outages.

Free

0 ₽
  • Up to 10 MAU
  • One app
  • Dev / staging / prod channels
  • One-click rollbacks
  • Basic stats
  • Community support

For individual developers

Start for free

Start

490 ₽/month
  • Up to 1,000 MAU
  • Up to 3 apps
  • Dev / staging / prod channels
  • One-click rollbacks
  • Basic stats
  • Email support

For individual developers

Choose plan

ProRecommended

2,490 ₽/month
  • Up to 10,000 MAU
  • Up to 10 apps
  • Dev / staging / prod channels
  • One-click rollbacks
  • Full stats and analytics
  • Code signing
  • Priority support

For individuals and companies

Choose plan

Business

9,990 ₽/month
  • Up to 100,000 MAU
  • Unlimited apps
  • Dev / staging / prod channels
  • One-click rollbacks
  • Full stats and analytics
  • Code signing

For individuals and companies

Choose plan

Enterprise

Custom
  • Unlimited MAU
  • Unlimited apps
  • Everything in Business
  • On-premise setup assistance

For individuals and companies

Contact us

Payment methods: Bank card (MIR / Visa / Mastercard) or SBP via T-Bank acquiring; Invoice to a bank account for legal entities (Pro plan and up).

Withdrawal from the contract is by written request; the plan stays active until the end of the paid period. The price of services not rendered is refunded on request under the public offer.

Draft pricing — final prices will be announced before launch.

Questions people ask before switching

Can I update a React Native app without an App Store review?

Yes, as long as the update only changes the JavaScript bundle and assets. Apple's Developer Program License Agreement §3.3.1(B) permits downloading interpreted code provided it does not change the app's advertised purpose or bypass OS security; Google Play's Device and Network Abuse policy carries the same exception for interpreted languages. Native code still requires a store release.

Do I need an Expo account or the EAS CLI?

No. Otapush implements Expo Updates Protocol v1, so the expo-updates library already in your app is the whole client. You point its update URL at your Otapush app and publish with the otapush CLI. Bare React Native projects work too — otapush init writes the native configuration for you.

What happens if the update server is unreachable?

Nothing visible to your users. expo-updates launches the bundle the device already has — the last update it downloaded, or the one shipped inside the binary — and simply tries again on the next launch. An update server outage cannot take an app down.

What exactly counts as a monthly active user?

One MAU is one device that checked for or downloaded an update at least once in a calendar month. A device checking a hundred times still counts once. Updates published, channels, and bandwidth are not metered at all.

What happens when I go over the plan limit?

Your apps keep receiving updates. Going over the limit is reported in the portal; no extra charge is added for it, and the update endpoint does not enforce the limit at all — an app in production does not stop working because of a billing threshold.

How do I move from EAS Update?

Point the update URL in your app config at your Otapush app, rebuild once so the new URL and signing certificate are in the binary, then publish. Because both sides speak the same protocol, nothing in your JavaScript changes.

Can I pay from outside Russia?

Not self-serve yet. Card and SBP payments are processed in rubles through Russian acquiring, and companies can pay by invoice. If you are outside Russia, write to us and we will arrange it.

Ship your first OTA update today

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