Mobile CLI Reference
Every absolute mobile command, and the mobile flags of absolute dev. Run them from your project root with bunx absolute; each accepts --config path when your config is not absolute.config.ts.
#Everyday flow
BASH
bunx absolute mobile init # once: create the native projects
bun dev # every day: web plus emulator and simulator
bunx absolute mobile sync # after changing the mobile config or device features
bunx absolute mobile build android # a signed store build
bunx absolute mobile publish android --play-track internal#absolute dev
absolute dev [entry]Start the web server plus every configured mobile target: an Android emulator, and an iOS Simulator on macOS or a paired Mac. Mobile targets start only in an interactive terminal.
--android-device <serial>Run on a connected Android phone. The serial comes from adb devices.
--ios-device <identifier>Run on a connected iPhone, by identifier or name from xcrun devicectl list devices. Needs macOS or a paired Mac.
--no-mobileWeb only. Cannot be combined with the device flags. ABSOLUTE_NO_MOBILE=1 does the same.
d, relaunchWhile running: press d for each device’s status, or type relaunch to restart the app.
#Setup and sync
mobile init [--no-native] [--force] [--yes]Install the pinned native packages, write capacitor.config.ts and create the iOS and Android projects, then apply branding, deep links, permissions and the rest of your config. --no-native writes the config without creating projects; --force replaces a capacitor.config.ts you edited; --yes approves package installs.
mobile sync [ios|android] [--yes] [--force]Bring the native projects up to date with your config and the device features your code imports. Run it after changing either.
mobile assets [ios|android] [--check] [--preview] [--json] [--yes]Generate every icon and splash size from mobile.branding. --preview writes an HTML preview of the results; --check fails if the generated files are out of date.
mobile inspect [--json] [--require-bundle]Read-only report of the mobile setup: config, native projects, packages and the packaged interface. --require-bundle fails unless the packaged interface is valid.
mobile doctor [ios|android] [--remote name] [--json | --fix [--yes]]Check the Android SDK, emulator, Java and Xcode. --fix installs what is missing, after showing the plan.
mobile associations [--outdir dir] [--verify]Write the Apple and Android association files for your deep-link hosts, or with --verify fetch them from each host and compare.
#Remote Mac
mobile pair mac <name> <user@host> [--port n] [--workspace path]Pair a Mac over SSH for iOS builds and simulators from Linux or Windows. The Mac needs Xcode, Bun and Remote Login. The last Mac you pair becomes the default.
mobile remotes [inspect [name] | clean [name] --yes] [--json]List paired Macs, inspect one, or remove abandoned project copies from it.
mobile unpair mac <name>Forget a paired Mac.
#Testing on devices
mobile test android [--release dir [--yes] | --route path [--wait-for-hmr] [--port n]] [--report [dir]] [--serial id] [--artifacts dir] [--json]Check routes in the running dev app, or install a release build and test it end to end: offline launch, live data and the network. --report writes evidence for mobile certify.
mobile test ios [--release dir [--remote name] [--device id [--testflight] --yes] | --wait-for-hmr] [--report [dir]] [--udid id] [--artifacts dir] [--json]The same for iOS, on a simulator or with --device on a real iPhone, optionally installed through TestFlight.
#Build and publish
Store credentials live in your release module, mobile.release.ts by default (choose another with --registry), never on the command line. Release walks through signing and publishing.
mobile doctor release [ios|android] [--json]Check a release build for anything that must not ship: dev servers, debug flags, cleartext traffic, development certificates, missing link identities. Fails the build on errors.
mobile build <android|ios> [server-entry] [--remote name] [--registered-device-artifact] [--outdir dir] [--web-outdir dir] [--unsigned]Build a signed Android App Bundle or iOS archive. --unsigned builds one that cannot be published; --registered-device-artifact also exports an IPA for registered test devices.
mobile certify <release-dir> [--evidence dir]... [--require level] [--outdir dir] [--json]Bind test reports to one exact build. --require sets the evidence needed: installed (Android), or simulator, device or store (iOS). --verify checks an existing certification.
mobile publish android [server-entry] [--release dir] [--certification dir] [--play-track track] [--play-status status] [--play-rollout fraction] [--play-name name] [--play-notes lang=text] [--play-update-priority 0..5] [--play-hold-review] [--play-cancel-existing-review]Publish to Google Play: track, status, staged rollout fraction, release name and notes, update priority, and review options. Builds first unless --release is given.
mobile publish ios [server-entry] [--release dir] [--certification dir] [--remote name] [--testflight-group name] [--testflight-notes locale=text] [--testflight-submit-review]Publish to TestFlight, optionally to a group with notes, and submit for beta review.
#CI
mobile ci github [server-entry] [--publish] [--registry module] [--secret-env NAME] [--output path] [--force] [--json]Write .github/workflows/absolute-mobile.yml: validation on pull requests, and signed Android and iOS builds in a protected environment. --publish adds store publishing; --secret-env passes extra secrets.
mobile ci promote <android|ios> --run-id id --certification path [--channel] [--play-track | --testflight-group] [--watch] [--audit]Publish a build that CI already made and tested, without rebuilding it. --resume continues a promotion that was interrupted.
mobile ci promotions | ci status --run-id id | ci audit --run-id idList promotions, follow a workflow run, or download a run’s audit record.
#Over-the-air updates
Every update command accepts --registry module, and the read commands accept --json. update build prints the release folder to publish. Over-the-air updates covers keys and rollouts.
BASH
bunx absolute mobile update build --classification bug-fix \
--key-id 2026-10 --signing-key ~/.config/absolutejs/mobile-update.pem \
--within-submitted-purpose
bunx absolute mobile update publish .absolutejs/mobile/updates/<release> --rollout 0.05
bunx absolute mobile update statusmobile update provision [--storage local|s3] [--registry module] [--force] [--yes]Create the mobile.update.ts registry that stores releases: local for development, s3 for production.
mobile update signing generate --private-key path [--certificate path] [--key-id id] [--common-name name] [--validity-years n]Expo only: create the certificate and private key Expo uses to verify updates. The key must be written outside your project.
mobile update build [server-entry] --classification bug-fix|content|security --key-id id --signing-key path --within-submitted-purposeBuild and sign an update. You state what kind of change it is and confirm it stays within what the stores reviewed.
mobile update publish <release-dir> [--rollout fraction]Upload an update and offer it to a fraction of installations.
mobile update promote | advance | pause | resume | cancel | reconcileChange who gets an update: promote a release to a new fraction, move to the next stage, pause, resume or cancel a rollout.
mobile update rollback [--release id]Go back to a previous update, or with no --release, to the version that shipped in the store build.
mobile update status | storage | gc [--retain n] [--min-age-days d] [--apply]See the current release, rollout and health; inspect storage; delete releases no longer needed (dry run unless --apply).
#Environment variables
| Variable | What it does |
|---|---|
ABSOLUTE_NO_MOBILE | Set to 1 to start absolute dev without mobile targets. |
ABSOLUTE_IOS_REMOTE | The paired Mac to use, instead of the default. |
ABSOLUTE_IOS_DEVELOPMENT_TEAM | Your Apple team ID, used to sign iOS builds. |
ANDROID_HOME | An existing Android SDK. Otherwise AbsoluteJS uses its own under ~/.absolutejs. ANDROID_SDK_ROOT also works. |
ABSOLUTE_ANDROID_KEYSTORE_PATH | Sign Android release builds with this keystore. Set it with ABSOLUTE_ANDROID_KEYSTORE_PASSWORD, ABSOLUTE_ANDROID_KEY_ALIAS and ABSOLUTE_ANDROID_KEY_PASSWORD. |
ABSOLUTE_MOBILE_UPDATE_S3_BUCKET | Where the update server stores releases, with standard AWS credentials. Optional: ABSOLUTE_MOBILE_UPDATE_S3_REGION, _ENDPOINT and _FORCE_PATH_STYLE=1 for S3-compatible storage. |
ABSOLUTE_MOBILE_UPDATE_LOCAL_ROOT | Folder for update releases when the registry uses local storage. |
ABSOLUTE_MOBILE_UPDATE_HEALTH_SECRET | Secret for update health reports, on the server only. Rename it with updates.server.health.secretEnv. |
ABSOLUTE_EXPO_UPDATE_PRIVATE_KEY | Expo only: the private key that signs updates, on the server only. |