
Stop opening the dashboard to upload builds. Ship directly from your terminal or CI/CD pipeline.
The Problem with Manual Build Distribution
Every mobile team has a version of this workflow: build the app locally, open the browser, log into the distribution portal, click through the upload flow, wait, copy the link, paste it into Slack. Repeat for Android. Repeat for iOS. Repeat every release cycle.
It works — until it doesn't. Manual uploads slow down release cadence, create gaps in CI/CD automation, and introduce inconsistency when different team members handle distribution differently. The more frequently a team ships, the more this friction compounds.
The AppsOnAir CLI removes this entirely.
What Is the AppsOnAir CLI?
The AppsOnAir CLI is a command-line tool that lets you interact with AppsOnAir services directly from your terminal or CI/CD pipeline — without opening the web portal.
Supported on: macOS and Linux
Once installed, it gives you two commands:
appsonair -- handles auth, project setup, and system commands (`login`, `logout`, `whoami`, `init`, `system-info`, `uninstall`)
appsonair-ota -- handles OTA build uploads (`upload`)
Installation
Install the CLI globally via npm:
npm install -g @appsonair/appsonair-cli
Verify your environment is ready:
appsonair system-info
Authentication
Authenticate once — your session is saved securely in your OS keychain and reused across all subsequent CLI commands.
appsonair login # Opens browser login -- token saved to OS keychain
appsonair whoami # Verify your current session
appsonair logout # Clear saved tokenRun 'appsonair login' before using any other CLI command.
Uploading Builds
There are two ways to upload builds using appsonar CLL.
- Configbases upload: Most recommended approach which requires first time project level setup, team can then upload build smoothly from terminal easily.
- Direct upload: No project level setup directly from specific folder path build you can upload but need select workspace and app each time when execute command and config file not found.
Config based upload: (One-time Project-level Setup)
Run this from your project root to generate a config file its specially helpful team or multiple developers are working on the same project.
appsonair init otaThis creates a .appsonair-cli.yaml file linked to your workspace and app. The `workspaceId` and `appId` are filled in automatically and stored encrypted — don't touch them. All you need to do is set your build output paths:
.appsonair-cli.yaml
# Auto-detect platform from file extension
appsonair-ota upload --path build/app.apk
appsonair-ota upload --path build/app.ipa
# Point --path at a folder to upload the newest APK AND newest IPA inside it
appsonair-ota upload --path build/outputs/
# Strict platform targeting
appsonair-ota upload --android-path build/app.apk
appsonair-ota upload --ios-path build/app.ipa
# Upload both in one command
appsonair-ota upload --android-path build/app.apk --ios-path build/app.ipaPoint to a folder, not a file — the CLI automatically picks the newest APK/IPA by modified time. An exact file path also works.
Upload Both Platforms at Once
If you want to upload both android and iOS at once just use the simple below command.
appsonair-ota upload
Upload a Specific Platform:
Use below commands if specific platform wise want to upload builds.
appsonair-ota upload --android # Android APK only
appsonair-ota upload --ios # iOS IPA only
After a successful upload, the CLI prints a shareable install link for each build — ready to paste into Slack, Notion, or your release notes.
Direct path build upload
Navigate to a particular path / folder and just simply use below commands to upload your build.
Upload Without a Config File (Path Mode)
For one-off uploads or when you don't want a config file, use path mode:
Auto-detect platform from file extension
appsonair-ota upload --path build/app.apk
appsonair-ota upload --path build/app.ipa
Point at a folder — uploads newest APK AND newest IPA found inside
appsonair-ota upload --path build/outputs/
Strict platform targeting
appsonair-ota upload --android-path build/app.apk
appsonair-ota upload --ios-path build/app.ipa
Upload both platforms in one command
appsonair-ota upload --android-path build/app.apk --ios-path build/app.ipaIn path mode, since there's no `.appsonair-cli.yaml`, the CLI will prompt you to select your workspace and app interactively each time.
Adding Release Notes
You can also add release notes with build so for more details check bellow command.
Same note for both platforms
appsonair-ota upload --android-path build/app.apk --ios-path build/app.ipa
Platform-specific notes
appsonair-ota upload --android-note "Fixed crash on Android 12" --ios-note "Improved Dark Mode support"
Android-only upload with a note
appsonair-ota upload --android --android-note "Hotfix build"
Android gets its own note, iOS gets the shared note
appsonair-ota upload --android-note "Android specific fix" --note "Common release"
Platform-specific flags (`--android-note`, `--ios-note`) always take priority over `--note` for their respective platform.
All Upload Flags Reference
All optional flags are added here which helps you to smooth you day to day internal build automation.
Help at Any Point
Use --help on any command to see options and examples directly in the terminal:
appsonair --help # List all appsonair commands
appsonair init --help # Help for the init command
appsonair-ota --help # List OTA commands
appsonair-ota upload --help # Help for the upload command
Conclusion
The AppsOnAir CLI turns OTA distribution from a manual step into an automated part of your release pipeline. Install once, authenticate once, configure once per project — then upload any build, to any platform, from anywhere, with a single command.
For teams shipping frequently, that's not a convenience — it's a meaningful improvement to release velocity and consistency.
For more details check official documentation with AppsOnAir


