Skip to content

CLI

Terminal window
npm install -g react-native-airdrop-cli
airdrop help

Connection settings resolve in this order: flags (--server, --token) → environment (AIRDROP_SERVER, AIRDROP_TOKEN, AIRDROP_APP_ID, AIRDROP_PRIVATE_KEY_PATH) → airdrop.config.json (project) → ~/.config/airdrop/credentials.json (written by login).

command
airdrop login --server <url> --token <token> validate and store credentials
airdrop init [--name <n>] [--sign] [--key-out <file>] create the app, write airdrop.config.json, optionally generate a signing key
airdrop keys generate [--out <file>] create a key pair later and register the public key (from then on unsigned updates are rejected)
airdrop tokens create <name> create an API token, e.g. for CI
airdrop apps list list apps
Terminal window
airdrop release --platform <ios|android> [options]
option default
--channel, -c production target channel
--message, -m release notes, available to the app
--mandatory off install immediately (mandatoryInstallMode)
--rollout <1-100> 100 staged rollout percentage
--runtime-version <v> detected otherwise read from Info.plist / project.pbxproj / strings.xml / build.gradle exactly like the SDK does
--private-key <pem> sign the update (required when the app has a public key)
--entry-file <file> index.js
--no-hermes auto Hermes is detected from gradle.properties / Podfile; hermesc from react-native or hermes-compiler
--bundle-dir <dir> --bundle-name <file> publish an already-built output (e.g. from Expo export:embed)
--dry-run bundle only
command
airdrop updates list [--channel] [--platform] [--limit] history with install and rollback counts
airdrop rollout <updateId> <percent> change rollout
airdrop rollback <updateId> disable; devices on it move to the previous update or the embedded bundle
airdrop resume <updateId> re-enable
airdrop promote <updateId> --to <channel> [--rollout] copy to another channel (files are shared, the signature stays valid)
- run: npm ci
- run: echo "$AIRDROP_PRIVATE_KEY" > /tmp/airdrop.pem
env: { AIRDROP_PRIVATE_KEY: "${{ secrets.AIRDROP_PRIVATE_KEY }}" }
- run: npx react-native-airdrop-cli release -p android -m "${{ github.event.head_commit.message }}" --private-key /tmp/airdrop.pem
env:
AIRDROP_SERVER: https://ota.example.com
AIRDROP_TOKEN: ${{ secrets.AIRDROP_TOKEN }}