apk CLI commands
Reference for every i99dash apk subcommand, its flags, and what publish does before your APK reaches review.
The i99dash apk command group manages a native-app project end to end: scaffold it, validate it, hash the release APK, attest and upload it, and stage its rollout. The SDK does not build Android — you bring a release-signed .apk and the CLI hashes, attests, uploads, and submits it.
All commands read apk.json from the current directory. publish and promote also need an authenticated session and the can_publish_native grant; see the CI usage section below.
init
i99dash apk init my-appScaffolds a new native-app project: writes apk.json and .gitignore. The default directory name is my-app. By default it refuses to write into a non-empty directory.
| Flag | Description |
|---|---|
-f, --force | Overwrite a non-empty directory. Default false. |
validate
i99dash apk validateZod-validates apk.json, checks that the .apk at apkPath exists, and checks the signer SHA. No flags. Run this first whenever you change the manifest.
build
i99dash apk buildHashes and sizes the release .apk. There is no tarball step — an APK ships as-is, unlike a WebView mini-app. No flags.
publish
i99dash apk publishValidates, hashes, SSH-attests, requests a presigned upload URL, PUTs the .apk direct to storage, then submits the manifest for review. See What publish does for the full sequence.
| Flag | Description |
|---|---|
--dry-run | Run validation and hashing, but do not upload. |
--key <path> | SSH private key to attest with. Default ~/.ssh/id_ed25519. |
--passphrase <pass> | Passphrase for the SSH key. |
A submit defaults to pending human review, not auto-approve. After approval, use promote to roll it out. See distribution.
What publish does
- Validate
apk.jsonand confirm the.apkatapkPathexists. - Hash and size the
.apk(SHA-256 + byte size). - SSH-attest (K1): sign a canonical manifest of the exact artifact — package, versionCode, versionName, sha256, size, signerSha256 — with your SSH key.
- Request a presigned upload URL from the platform.
- PUT the
.apkdirect to storage at that URL. - Submit the manifest for review.
The attestation and the trust model behind it are documented in signing.
promote
i99dash apk promote --rollout 10Promotes the latest approved release to a staged rollout. --rollout exposes the release to a stable per-car bucket 0..N, so --rollout 10 reaches about 10% of cars. Raise it as you gain confidence.
| Flag | Description |
|---|---|
--rollout <percent> | Required. Integer 0–100. |
--status <status> | rolling (default) or published. published is a full release that supersedes older versions. |
status
i99dash apk statusLists your native apps and their review and release state. No flags.
CI usage
The CLI logs in with an SSH key — the one CLI credential, registered per authentication. The same key attests every artifact you publish (K1). Validate first, then publish with that key.
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm install -g i99dash
- run: i99dash apk validate
- run: i99dash apk publish --key ./ci_ed25519Publishing is invite-only. Without the can_publish_native grant, the upload-URL and submit calls return 403.