Bare React Native · No Expo

React Native OTA updates without Expo

Most OTA tooling assumes you are on Expo. Ubriot ships over-the-air updates to bare React Native too, through ubriot-updates-rn, a standalone native client that downloads, swaps, and rolls back on its own.

One package, no Expo required

ubriot-updates-rn is a published npm package: a native OTA client for bare React Native that reuses the same Ubriot update backend and CLI.

npm install ubriot-updates-rn

The same OTA workflow, minus Expo

  • OTA for bare React Native, no Expo
  • Standalone client: ubriot-updates-rn
  • Named channels (production, staging, etc.)
  • Runtime version compatibility checks
  • Download, swap, automatic rollback
  • Instant rollback from the dashboard
  • CLI command: ubriot update
  • Same backend as the Expo path

How OTA works on bare React Native

Install the client once, then ship updates with one command.

Step 1

Install ubriot-updates-rn

Add the standalone native OTA client to your bare React Native app. No Expo, no expo-updates. Published on npm and ready to install.

Step 2

Point it at your Ubriot endpoint

Configure the client with your Ubriot update URL and runtime version. The app checks for a new bundle on launch.

Step 3

Run ubriot update

Bundle your JS layer and publish it to a channel, production, staging, or any name you choose. The same CLI that powers the Expo path.

Step 4

Download, swap, roll back

The client downloads the new bundle, swaps it in, and rolls back automatically if the update fails. Roll back any release from the dashboard too.

A CodePush alternative for bare React Native

Ran CodePush before App Center shut down? Ubriot is a direct home: JS-layer over-the-air updates without Expo, published to named channels with instant rollback, driven by ubriot update. Expo and bare RN share one backend, so the whole team standardizes on Ubriot.

Ship OTA to bare React Native today

Install ubriot-updates-rn and publish with ubriot update. No Expo required.

Get started