Start with the code you already own
Connect your Git repository and configure signing for your app. Ubriot builds React Native and Expo projects for iOS and Android, with the build tied to its source commit.
Why Ubriot
Your users cannot install a CI checkmark. They need a signed app, a store upload that finishes, and a way to ship the next fix. Ubriot keeps those steps in one release path.
SOURCE
Your commit
A version you can trace
BUILD
Signed binary
Logs and artifacts together
RELEASE
Store or OTA
A result you can follow
THE IDEA
Great developer tools shorten the distance between writing code and putting it in someone's hands. For mobile teams, that distance includes signing, native builds, store processing, and updates after launch.
Ubriot is built around that full path. You can start a release from a CLI or dashboard and follow the result without stitching together separate build logs, store uploads, and update channels.
The repository stays yours. The release state is visible. When something fails, the build and its logs are there to inspect.
HOW IT WORKS
Three connected steps, with a clear place to look at each result.
Connect your Git repository and configure signing for your app. Ubriot builds React Native and Expo projects for iOS and Android, with the build tied to its source commit.
Use the CLI or dashboard to send an iOS build to TestFlight or an Android build to Google Play. Follow the upload and processing result beside the build that produced it.
Publish compatible JavaScript updates to named OTA channels. A channel can be pointed back to a previous update group when an update needs to be rolled back.
THE CLI
Start an iOS or Android release, publish a compatible OTA update, then inspect the build that Ubriot ran.
Explore React Native CI/CD$ ubriot ship ios
$ ubriot ship android --track internal
$ ubriot update
$ ubriot builds logs <buildId>
STAY IN CONTROL
Build logs, artifacts, store upload status, and release history stay attached to the app. The CLI can show a build and stream its logs while it runs.
OTA channels keep their update groups. If an update misbehaves, point the channel to an earlier group from the dashboard. The app receives it on its next launch.
Build, submit, update, and see the result from one place.