CLI Reference

Use the CLI to upload bundles, release them, inspect bundle and release history, and manage apps.

Project config

Project commands read from capacitor.config.*.

// capacitor.config.ts
import type { CapacitorConfig } from "@capacitor/cli";

const config: CapacitorConfig = {
  appId: "com.example.myapp",
  appName: "My App",
  webDir: "out",
  plugins: {
    OtaKit: {
      appId: "app_xxxxxxxx",
      // Optional named channel:
      // channel: "staging"
      // Optional compatibility lane:
      // runtimeVersion: "2026.04"
    }
  }
};

export default config;

Authentication

For local development, sign in once and the CLI stores a token locally. For CI or non-interactive environments, use an organization secret key instead.

# Local development
otakit login

# CI / non-interactive
export OTAKIT_TOKEN=otakit_sk_...
export OTAKIT_APP_ID=app_xxxxxxxx

Release flow

  • Upload only: otakit upload
  • Upload and release to the base channel: otakit upload --release
  • Upload and release to a named channel: otakit upload --release beta
  • Promote an existing bundle later: otakit release <bundleId> --channel production

Resolution order

The CLI resolves values in a deterministic order.

  • App ID: --app-id -> OTAKIT_APP_ID -> capacitor.config.*
  • Server URL: --server -> OTAKIT_SERVER_URL -> plugins.OtaKit.serverUrl -> hosted default
  • Auth token: OTAKIT_TOKEN -> stored login token
  • Upload path: CLI path argument -> OTAKIT_BUILD_DIR -> capacitor.config.* webDir
  • Release channel: --release -> base channel, --release <channel> -> named channel
  • Runtime version: plugins.OtaKit.runtimeVersion -> bundle metadata during upload
  • Upload version: --version -> OTAKIT_VERSION -> auto-generated version

Command reference

otakit upload[path]

Upload a bundle. Optionally release it immediately.

[path]Bundle directory. If omitted, the CLI uses OTAKIT_BUILD_DIR or capacitor.config.* webDir.
--app-id <id>App ID override.
--server <url>Server URL override.
--version <version>Version string. Otherwise OTAKIT_VERSION, then auto-generated.
--strict-versionRequire explicit or env-provided version.
--release [channel]Release after upload. Omit channel to release to the base channel.
otakit upload --release

otakit release[bundleId]

Release a bundle to the base channel or a named channel. The bundle already carries its runtimeVersion, so release only chooses the rollout channel.

--channel <channel>Target named channel. Omit it to use the base channel.
otakit release --channel production

otakit list

List uploaded bundles.

--limit <n>Max results. Defaults to 20.
otakit list --limit 20

otakit releases

Show release history across all streams or a specific target.

--channel <channel>Show only a named channel.
--baseShow only the base channel.
--limit <n>Max results. Defaults to 10.
otakit releases --base

otakit delete<bundleId>

Delete a bundle.

--forceSkip confirmation prompt.
otakit delete abc123 --force

otakit register

Create a new app and print the plugin snippet to paste into capacitor.config.ts.

--slug <slug>App slug (for example com.example.app).
--server <url>Server URL override.
--token <token>Access token or organization API key.
--secret-key <key>Alias for --token.
otakit register --slug com.example.myapp

otakit login

Sign in with email OTP and store a token locally.

--email <email>Email address. If omitted, prompts interactively.
--server <url>Server URL override.
--token-onlyPrint token to stdout only.
otakit login --email you@example.com

otakit whoami

Show current authenticated user and organization context.

--server <url>Server URL override.
otakit whoami

otakit logout

Remove stored token for a server.

--server <url>Server URL override.
otakit logout

otakit config resolve

Show effective CLI values and where they came from.

--app-id <id>App ID override.
--server <url>Server URL override.
--output-dir <path>Output directory override.
--channel <channel>Channel override.
--jsonPrint machine-readable JSON output.
otakit config resolve --json

otakit config validate

Validate the OtaKit-related values in capacitor.config.*.

--jsonPrint machine-readable JSON output.
otakit config validate

otakit generate-signing-key

Generate an ES256 key pair for manifest signing.

otakit generate-signing-key

Troubleshooting

  • Missing app ID: add plugins.OtaKit.appId to capacitor.config.ts, or pass --app-id.
  • Missing index.html: build your web app and verify webDir or the explicit upload path.
  • Need to create an app from automation: use otakit register --slug <slug>.