AppsOnAir CLI: Automate Your Internal OTA Distribution from the Terminal

Editorial team
Dot
July 30, 2026
AppsOnAir CLI terminal interface for automating internal OTA distribution with faster delivery, secure sharing, usage analytics, and team access features

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 token

Run '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 ota

This 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.ipa

Point 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.ipa

In 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. 

Flag Description
(none) Upload both Android and iOS using yaml config
--android Upload Android only (yaml mode)
--ios Upload iOS only (yaml mode)
--path <path> Direct upload — auto-detect APK or IPA from file extension, or upload newest APK and IPA from a folder
--android-path <path> Direct upload — APK file or folder (strict APK validation)
--ios-path <path> Direct upload — IPA file or folder (strict IPA validation)
--note <note> Release note applied to both Android and iOS
--android-note <note> Release note for Android only
--ios-note <note> Release note for iOS only

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

FAQ’s

No items found.

Actionable Insights,
Straight to Your Inbox

Subscribe to our newsletter to get useful tutorials , webinars,use cases, and step-by-step guides from industry experts

Start Pushing Real-Time App Updates Today
Try AppsOnAir for Free
Stay Uptodate