Skip to content

Free to start · Open source

Tidepush

OTA updates for Expo apps. Signed, staged, instantly reversible.

Ship JavaScript fixes to your React Native app without waiting for a store review. Sign up, run one command in your app, and publish your first update in minutes.

$ npx tidepush publish --channel production \
    -m "Fix fee copy on the send screen"
• Exporting ios + android bundle(s)…
• Reading app config and runtime version…
  ios      runtime 3f9c1a…  bundle 7.9 MB  42 assets
  android  runtime 3f9c1a…  bundle 8.1 MB  42 assets
• Uploading 2/86 files (16.0 MB)…
✔ Published to production at 100% (group 7c1e0b52-…)
  ios      9b0e6c1d-…
  android  4f2a8e77-…

What it is

Tidepush is an update service that speaks the open Expo Updates protocol. Your app keeps using the official expo-updates library; you point it at Tidepush instead of Expo's service. You publish with a command-line tool, from your laptop or CI, and watch and control every release from the dashboard.

How it works

One command to publish, one library you already use.

How Tidepush fits together Your Expo app asks Tidepush for updates and gets a signed manifest. Tidepush keeps your release history and serves bundles from a global CDN. The CLI and the dashboard manage the same app. Your Expo appstock expo-updates clienttidepush CLIpublish · promote · rollbackDashboardin your browserTidepushhosted for youupdate checkssigningrollouts · rollbacksRelease historyupdates, channels, devicesGlobal CDNbundles and imagesasks for updatessigned manifestAPI tokenlogin session
  1. 1

    You publish

    npx tidepush publish runs expo export, uploads only the files Tidepush doesn't have yet, and records a new update.

  2. 2

    The app checks

    On launch, expo-updates asks Tidepush: “anything newer for my channel and runtime?”

  3. 3

    The app updates

    It downloads the signed update in the background and runs it on the next launch.

Read the full request flow →

Features

Everything you need to ship and undo JavaScript updates safely.

Stock expo-updates client

Your app keeps the official expo-updates library. You only point updates.url at Tidepush.

Signed manifests

Every manifest and rollback is signed with your app's own key. The app refuses anything unsigned or changed.

Staged rollouts

Ship to 5% of devices, watch, then widen. Devices that already have the update keep it.

Instant rollback

One command puts devices back on the previous update, or on the bundle built into the app.

Promote staging → production

Test an update on staging builds, then promote the exact same files to production.

Adoption dashboard

See which devices run which update and runtime, plus a full audit log of who did what.

Teams & API tokens

Organizations with owner, admin and read-only roles. Sign in with GitHub. Per-app tokens for CI.

Open source, no lock-in

The same AGPL code runs the service. Export your signing key and run it yourself whenever you want.

Pricing that follows your users

Start on the free plan, no card needed. Paid plans are priced by monthly active devices: installs that checked for an update that month. Not by downloads, and not by how often you publish.

Going over your plan never stops updates reaching your users. See plans and limits →

Free planNo card
Billed byActive devices
Publishes & downloadsUnlimited
Over your limit?Phones still update

Open source

The service runs the same code that's on GitHub, under the GNU AGPL-3.0. Teams that must keep keys and data on their own infrastructure can run it themselves, and you can export your signing key at any time. You're never locked in.

Ship your first update in 20 minutes

Sign up, run npx tidepush init in your app, build once, publish.

Released under the AGPL-3.0-only license. Commercial licenses available.