CLI Quickstart
The hosted happy path is: create an app in the dashboard, paste its appId into capacitor.config.ts, run otakit login, then otakit upload --release.
Quick start
- Create an app in the OtaKit dashboard and copy its OtaKit
appId. - Add that
appIdtoplugins.OtaKitincapacitor.config.ts. - Log in:
otakit login - Build your web app.
- Upload and release:
otakit upload --release
Project config
Project commands read from capacitor.config.*. The CLI uses:
// 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 track
// channel: "staging"
}
}
};
export default config;The CLI reads plugins.OtaKit.appId, optional channel, optional serverUrl, and webDir. CLI flags and environment variables can still override any of those values.
Auth and config
otakit login stores a token locally for the current server. For CI or agent workflows, you can skip local login and use environment variables instead.
# Local dev otakit login # CI / non-interactive export OTAKIT_SECRET_KEY=otakit_sk_... export OTAKIT_APP_ID=app_xxxxxxxx export OTAKIT_BUILD_DIR=out
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->OTAKIT_ACCESS_TOKEN-> stored login token ->OTAKIT_SECRET_KEY - Upload path: CLI path argument ->
OTAKIT_BUILD_DIR/OTAKIT_OUTPUT_DIR->capacitor.config.* webDir - Release target:
--release-> base stream,--release <channel>-> named channel - Upload version:
--version->OTAKIT_VERSION-> auto-generated version
Upload flow
Use one command depending on intent:
- Upload only:
otakit upload - Upload and release to the base stream:
otakit upload --release - Upload and release to a specific channel:
otakit upload --release beta
Command reference
otakit upload[path]
Upload a bundle. Optionally release immediately.
otakit upload --release
otakit release[bundleId]
Release a bundle to the base stream or a named channel. If bundleId is omitted, releases the latest bundle.
otakit release --channel production
otakit list
List uploaded bundles.
otakit list --limit 20
otakit releases
Show release history across all streams or a specific target.
otakit releases --base
otakit delete<bundleId>
Delete a bundle.
otakit delete abc123 --force
otakit register
Create a new app and print the plugin snippet to paste into capacitor.config.ts.
otakit register --slug com.example.myapp
otakit login
Sign in with email OTP and store a token locally.
otakit login --email you@example.com
otakit whoami
Show current authenticated user and organization context.
otakit whoami
otakit logout
Remove stored token for a server.
otakit logout
otakit config resolve
Show effective CLI values and where they came from.
otakit config resolve --json
otakit config validate
Validate the OtaKit-related values in capacitor.config.*.
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.appIdtocapacitor.config.ts, or pass--app-id. - Missing
index.html: build your web app and verifywebDiror the explicit upload path. - Need to create an app from automation: use
otakit register --slug <slug>.