Documentation
Getting started with Ubriot CI/CD and Ubriot Notify.
Quickstart - zero to TestFlight
Install the CLI, create your app, and ship to TestFlight in two commands.
CI/CD - iOS & Android builds
Configure signing credentials and trigger your first build.
OTA updates
Publish compatible JavaScript-only updates without app review.
Notify - push notifications
Send iOS and Android push notifications with the @ubriot/notify-rn SDK.
Quickstart: zero to TestFlight
From an empty terminal to a build processing in TestFlight. First app takes about five minutes; every app after that is two commands.
1. Install and log in
npm install -g ubriot ubriot login
2. Create your app
ubriot apps create \ --name "My App" --slug myapp \ --repo https://github.com/you/yourrepo.git --branch main \ --ios-bundle com.you.myapp
Monorepo? Point Ubriot at the app folder with --expo-project-root apps/mobile.
3. Add Apple credentials (first app only)
Two uploads, once per Apple developer account. Every future app reuses them automatically.
# App Store Connect API key (.p8) - from appstoreconnect.apple.com → Users → Integrations ubriot credentials upload-asc-key --app myapp --name "ASC Key" \ --key-p8 AuthKey_XXXX.p8 --key-id XXXX --issuer-id YYYY # Distribution certificate (.p12) - exported from Keychain or the Apple Developer portal ubriot credentials upload-ios-cert --app myapp --name "Distribution Cert" \ --p12 dist.p12 --p12-password <password> --team-id ZZZZ
4. Ship
ubriot ship ios
Signing is provisioned automatically: Ubriot registers your bundle ID with Apple and creates the App Store provisioning profile from your stored credentials. No Apple portal visit, no profile downloads. The command builds the binary, uploads it, and tracks App Store Connect until TestFlight marks the build valid.
Android is the same shape: ubriot ship android after uploading your keystore and Play service account.
Every app after the first
ubriot apps create --name "Next App" --slug nextapp --ios-bundle com.you.nextapp --repo <url> ubriot ship ios
Credentials are account-level, signing is auto-provisioned: two commands, end to end.
CI/CD - iOS & Android builds
Ubriot handles iOS and Android builds in the cloud. Upload your signing credentials once and trigger builds from the CLI or dashboard.
1. Upload signing credentials
In the dashboard go to Credentials → Add credential (or use the CLI). For iOS, upload your distribution certificate (.p12) and App Store Connect API key (.p8) once; they are account-level and reused by every app. Provisioning profiles are created automatically at ship time: Ubriot registers the bundle ID with Apple and mints the App Store profile for you. For Android upload your keystore and Google Play service account JSON. All credentials are AES-256 encrypted at rest and never logged.
2. Trigger a build
From the CLI:
# iOS build + TestFlight submission ubriot ship ios # Android build + Google Play submission ubriot ship android # OTA update only (no build required) ubriot update
Or go to Builds in the dashboard and click Trigger build.
OTA updates
Publish JavaScript-only changes directly to devices without waiting on App Store review. Roll forward or back from the dashboard at any time.
Configure your app
Point expo-updates at your Ubriot manifest URL (replace your-app-slug with your release app slug from Ubriot):
// app.config.js / app.json - updates.url (exact field depends on Expo SDK) // Example manifest base: "https://api.ubriot.dev/api/v1/ubriot/updates/manifest?appId=your-app-slug" // Devices request updates on launch; channel matches your ubriot update --channel.
New binaries must include this URL. Existing installs keep their previous update host until users upgrade the app.
Publish an update
ubriot update --channel production --message "Fix checkout bug"
The update is live to all devices on the production channel within seconds. Roll back from the dashboard under Updates if needed.
Notify - push notifications
Send iOS and Android push notifications directly to APNs and FCM. Per-device pricing, auto-retry, campaigns, and delivery logs.
1. Upload push credentials
Go to Credentials in the dashboard. For iOS: add an APNs auth key (.p8 file with Key ID, Team ID, and Bundle ID). For Android: add a Firebase service account JSON from the Firebase console.
2. Install the SDK
npm install @ubriot/notify-rn
No additional dependencies. Works with Expo, react-native-firebase, or any push library.
3. Register at app launch
Get a native push token however your app already does it, then pass it to Ubriot:
import { UbriotNotify } from '@ubriot/notify-rn';
import * as Notifications from 'expo-notifications'; // or firebase, etc.
useEffect(() => {
async function register() {
const { data: nativeToken } = await Notifications.getDevicePushTokenAsync();
await UbriotNotify.register({
appId: 'your-app-id',
nativeToken,
platform: Platform.OS === 'ios' ? 'ios' : 'android',
userId: currentUser?.id, // optional
});
}
register();
}, []);4. Send from your backend
Use the push server key from Credentials → Push server key:
curl -X POST https://api.ubriot.dev/api/v1/ubriot/push/send \
-H "X-Ubriot-Push-Key: your-server-key" \
-H "Content-Type: application/json" \
-d '{
"to": ["UbriotPushToken[abc123...]"],
"title": "New message",
"body": "Alice replied to your post",
"data": { "screen": "chat", "threadId": "42" }
}'5. Broadcast campaigns
To send to all registered devices at once, go to Notify → Campaigns in the dashboard and click Send campaign. Choose a platform filter (All / iOS / Android), write your notification, and send. Delivery counts appear as soon as APNs and FCM respond.
SDK reference
- UbriotNotify.register(opts)
- Register a native push token with Ubriot. Returns a stable UbriotPushToken. Idempotent - safe to call on every launch.
- UbriotNotify.identifyUser(userId, opts)
- Link a device to a user ID in your system. Pass pushToken from register(). Call after login.
Need help?
Email hello@ubriot.dev. Enterprise customers get a dedicated Slack channel. Check the FAQ for common questions about builds, credentials, and OTA updates.