Expo Updatesprotocol v1

Over-the-air updates you host yourself

Ship JavaScript fixes to your Expo app without waiting on app store review.

The Open OTA dashboard showing production and staging channels with update adoption, health and device counts

Everything you need to ship an update

Deploy it once.
Publish as often as you like

One command sets everything up in your Cloudflare account. After that, shipping an update is one command from your app.

  1. Deploy to Cloudflare

    One command creates the server, its database, its file storage and the dashboard’s sign-in.

  2. Connect your Expo app

    open-ota init points your app at the server, fills in the settings, and checks the result.

  3. Publish an update

    open-ota publish uploads what changed, and devices pick it up on their next check.

Questions

No. Your app keeps the standard expo-updates library it already uses, pointed at your server instead of Expo’s. Your app code does not change.

Open OTA is MIT licensed. You pay Cloudflare for the Workers, D1, R2 and Analytics Engine usage in your own account, and nothing to us.

Any app using expo-updates that speaks version 1 of the update protocol. The server never looks at your Expo SDK version. Development and testing target SDK 57.

On its next check, which your app decides. There is no cache to clear: publish, widen a rollout, or roll one back, and the next check picks it up.

In your own Cloudflare account, and nowhere else. The update files, the device check-ins and the usage numbers all sit on infrastructure you control, and only people you name can open the dashboard.

Not yet. One deployment serves one app, across as many channels as you need. A second app means a second deployment.