Skip to main content
See Install the CLI for the published macOS ARM64, Linux x86-64, and Linux ARM64 binaries and authentication.

The parity promise

Everything the API does, the CLI does. Every public API operation that accepts an API key maps to exactly one korve command — this is enforced by a parity test in the CLI’s own test suite, so a new platform capability cannot ship without its command. The layout is korve <noun> <verb> (korve domains add, korve databases rotate) plus a few top-level verbs (korve init, korve deploy, korve logs, korve login). The only exceptions are session-only operations (key management, billing mutations, org membership) — the CLI ships those commands anyway so the failure mode is a helpful pointer to the dashboard rather than a mystery.

Global flags

--json is the agent/scripting mode: stdout is the API payload, status chatter goes to stderr. Shown-once secrets print bare on stdout so they pipe cleanly.

Configuration precedence

Explicit beats ambient, everywhere:
  1. Command-line flags (--project, --api-url, --api-key)
  2. Environment (KORVE_API_KEY, KORVE_ORG, KORVE_PROJECT, KORVE_API_URL)
  3. Local link file .korve.toml (project only — written by korve link)
  4. ${KORVE_CONFIG_DIR:-~/.config/korve}/oauth-credentials.toml for OAuth tokens, with 0600 on Unix; ~/.config/korve/config.toml stores login metadata or a legacy key
  5. Built-in defaults (https://api.korve.dev)
Project-scoped commands resolve the project as --project$KORVE_PROJECT.korve.toml, and accept either a slug or a UUID.

Exit codes

API errors print as error (CODE): message on stderr, preserving the error envelope’s machine-readable code. OAuth grants have a member or admin ceiling and never carry owner authority. The CLI rejects owner-only operations before network I/O and tells you to use an organization API key for that explicit command.

Confirmations

Destructive commands (projects delete, database delete, previews remove, manifest apply) prompt interactively; pass --yes to skip in scripts. korve projects delete asks you to type the slug.

Next