v0.1.0
0.1.0 - 2026-07-29
First release. Every endpoint the Keylight management API exposes is reachable
from a command, and a coverage test fails the build if that stops being true.
Added
Authentication
keylight login— browser approval over
RFC 8628 device authorization,
so it works over SSH and on headless machines.--scopenarrows the request;
dangeris never requested by default.keylight logout— revokes the token server-side and deletes the local
copy. If the revoke fails, the local copy is still removed and the output
says so, rather than leaving a credential on disk you believe is gone.keylight auth set-token/auth status— token read from stdin, never
argv.KEYLIGHT_API_TOKENtakes precedence over the stored file.
Resources
keylight products— list, get, create, update, free tier, Stripe test mode,
and per-provider price mapping.keylight products key-types— list, create, update, delete, verify-prices.keylight licenses— list, get, create, revoke, remint, deactivate-device,
bulk import, CSV export.keylight customers— list, get, create, entitlements, link-license.keylight integrations— list, status, connect, disconnect, rotate-secret.keylight webhook— get and set, including clearing it.keylight sdk-key— get and rotate.keylight usage— activation and validation volume, with a summary.keylight test-purchase— create and get.
Output
--jsonon every command, printing the raw API response.- Aligned tables for lists, key/value blocks for single items, and empty
results that name the command to run next. - Progress output — approval URLs, waiting notices — always goes to stderr, so
--jsonstdout stays parseable andlicenses export > out.csvwrites CSV.
Behavior worth knowing
- No command requires an interactive prompt. Every input is available as a
flag, so agents and CI can drive the whole surface. - Secrets are never flags.
--*-envflags name an environment variable
to read from, because argv lands in shell history and is visible to other
users viaps. - Pagination is explicit.
listcommands take--limitand--cursorand
print the next cursor; nothing auto-pages. - Confirm-gated operations block and poll. Seven operations need a human to
approve in a browser:licenses revoke,licenses export,products key-types delete,integrations rotate-secret,sdk-key get,sdk-key rotate,webhook set. - Mints are idempotent.
licenses createandlicenses importalways send
anIdempotency-Key, so a retry after a timeout cannot issue a second
license to the same customer. --duration-days 0means perpetual, which the API represents asnull.licenses remintprints the new plaintext key, which the API returns
exactly once.- Exit codes:
0success,1general failure,2not authenticated,
3confirmation denied or expired.
Known limitations
- Prebuilt macOS binaries are not code-signed or notarized, so Gatekeeper
blocks them on first run. Clear the quarantine flag with
xattr -d com.apple.quarantine ./keylight, or install with
cargo install keylight-cli, which builds locally and avoids it. - Only read paths have been exercised against production. Write and
confirm-gated paths are covered by tests written against the API's documented
request and response contracts, but have not been run live. - No shell completions or man pages yet.