Developer Experience
The OrbitKit CLI: App Store web compliance from your terminal and CI
Generate, configure, and deploy your privacy policy, AASA file, support page, and more from the command line — scriptable for CI/CD. The OrbitKit CLI reference.
If you ship iOS apps from a CI pipeline, the web side of App Store compliance shouldn’t be the one manual step that breaks the automation. The OrbitKit CLI wraps the same API the dashboard uses, so your privacy policy, AASA file, support page, data-deletion page, and privacy manifest can be generated, configured, and deployed from a terminal or a CI job.
This is the practical reference: install, auth, the command surface, and a CI example.
For what these files are and why Apple requires them, see every URL and file Apple requires for an iOS App Store submission.
Install
The CLI ships as an npm package, Node ≥ 22:
npm install -g orbitkit
# or run without installing
npx orbitkit --help
Authentication
No stored credentials — auth is a single environment variable, which is exactly what CI secret stores expect:
export ORBITKIT_API_KEY="ok_live_…" # create one in the dashboard → Settings → API Keys
export ORBITKIT_APP_ID="…" # optional default; or pass [appId] per command
The API key is sent as a Bearer token over HTTPS. Nothing is written to disk.
The command surface
orbitkit --help
whoami Show current user info (verifies API key)
apps Manage apps (list, etc.)
deploy [appId] Deploy site to production
deploy-history [appId] Show deploy history
policy Manage privacy policy (get / set)
site Manage site config (get / update / icon / domain / custom-html)
support Manage support page (get / set)
deletion Manage data deletion page (get / set)
aasa Manage Apple App Site Association (get / set)
privacy-manifest Manage PrivacyInfo.xcprivacy (get / set / sync / download / reference)
banner Manage Smart App Banner (get / set)
well-known Upload well-known files (SIWA, Apple Pay, Wallet)
testflight Manage TestFlight landing page (get / set)
Every command takes --json for machine-readable output (pipe into jq), and --debug to print the requests.
Typical workflows
Verify auth in a CI preflight
orbitkit whoami --json | jq -e '.email' >/dev/null \
|| { echo "OrbitKit auth failed"; exit 1; }
Round-trip a config file (the get → edit → set pattern)
orbitkit policy get "$ORBITKIT_APP_ID" --json > policy.json
# edit policy.json in your repo / via a script
orbitkit policy set "$ORBITKIT_APP_ID" policy.json
The set [appId] <file> shape is consistent across policy, support, deletion, aasa, banner, and privacy-manifest — they all take a JSON file argument, so you can keep your App Store web config in version control next to your app code.
Pull the privacy manifest into your Xcode project
orbitkit privacy-manifest download "$ORBITKIT_APP_ID" \
-o ios/App/PrivacyInfo.xcprivacy
Wire that into a build phase and your PrivacyInfo.xcprivacy is regenerated from the same source of truth as your hosted privacy policy — no drift, no ITMS-91053 surprises.
Deploy as the last step of a release pipeline
orbitkit deploy "$ORBITKIT_APP_ID"
# Deployed: https://sites.orbitkit.io/your-app
GitHub Actions example
name: Sync App Store web compliance
on:
push:
branches: [main]
paths: ["app-store/**"]
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npm install -g orbitkit
- name: Push policy + AASA, then deploy
env:
ORBITKIT_API_KEY: $
ORBITKIT_APP_ID: $
run: |
orbitkit policy set "$ORBITKIT_APP_ID" app-store/policy.json
orbitkit aasa set "$ORBITKIT_APP_ID" app-store/aasa.json
orbitkit deploy "$ORBITKIT_APP_ID"
Now your privacy policy and AASA file live in the repo, change through pull requests, and deploy on merge — the same workflow as the rest of your app.
Exit codes
The CLI uses distinct exit codes so CI can branch on the failure type — e.g. missing API key vs. network error vs. validation error — rather than parsing stderr. Run with --debug to see the request/response and the X-Request-Id for support.
Related
- The same operations are available to AI agents — see the OrbitKit MCP server.
- Every URL and file Apple requires
- Resolving ITMS-91053
Create an API key in the dashboard to get started — start free or see the full feature list.