Command-line interface
The smplkit CLI (smplkit) is a thin imperative shell over the platform's management API. It manages the same resources the SDKs do — configurations, feature flags, audit forwarders, loggers, log groups, environments, and services — and shares one credential resolver with them, so an existing ~/.smplkit profile works against the CLI with zero extra setup.
Install
Pre-built binaries for Linux, macOS, and Windows are published on every release at github.com/smplkit/cli/releases. Pick the archive for your OS and arch, extract smplkit, and put it on your PATH. A multi-arch container image is also published to GHCR at ghcr.io/smplkit/cli.
To build from source:
go install github.com/smplkit/cli@latestAuthenticate
The CLI reads credentials from the same sources as the SDKs, in the same precedence (lowest → highest):
- Defaults.
~/.smplkit— INI:[common]overlaid by the selected profile.SMPLKIT_*environment variables.- Global flags.
If you've already configured ~/.smplkit for the SDKs, you're done.
Command model
Noun-verb. Each noun maps to one management namespace; each verb maps to a method on it:
| Noun | Manages |
|---|---|
flag | feature flags |
config | configuration resources |
logger | loggers |
log-group | log groups |
env | environments |
service | services |
audit forwarder | SIEM forwarders |
Five universal verbs apply to every noun:
list— paginate (--limit,--all).get <key>— fetch a single resource.create <key>— new resource; scalar flags or-f file.json.set <key>— read-modify-write: GET → apply edits → PUT the whole thing back. There is no PATCH on the platform — thesetverb is the only update path, and it always replaces the resource in full.delete <key>— confirms unless--yes/-y.
Global flags
--api-key API key (overrides SMPLKIT_API_KEY / ~/.smplkit)
--profile ~/.smplkit profile (default: default)
-e, --env smplkit environment (overrides SMPLKIT_ENVIRONMENT / ~/.smplkit)
-o, --output table|json|yaml output format (default: table)
--quiet identifiers only — useful in xargs / loops
--no-color disable ANSI color--env is required just-in-time, on commands that read or write per-environment values (flag set --enabled, config set --env-value, logger set --level). Commands that work with base/definition values need no environment.
Examples
# Flip a feature flag on for one environment
smplkit flag set checkout_v2 --enabled --env production
# Set a configuration item, parsed as a number
smplkit config set billing --item retry_count=3 --item-type number
# Override that item just for staging
smplkit config set billing --env staging --env-value retry_count=1 --item-type number
# Bump a logger to DEBUG for one environment
smplkit logger set sqlalchemy.engine --level DEBUG --env staging
# Round-trip a forwarder definition through your editor
smplkit audit forwarder get siem -o json > siem.json
$EDITOR siem.json
smplkit audit forwarder set siem -f siem.json
# Scripting: list every flag's id, one per line
smplkit flag list --all --quiet | while read id; do echo "flag: $id"; doneOutput
-o table (the default) is a human-readable column layout. -o json and -o yaml emit the resource's attributes — not a JSON:API envelope — so you can pipe directly into jq, yq, or feed it back into set -f file.json to round-trip changes.
Pagination
list accepts --limit (page size) and --all (auto-paginate to exhaustion). Without --all, one server-default page is returned.
Errors
The CLI surfaces JSON:API error arrays from the server verbatim — a 402 returns the entitlement and upgrade path, a 401 returns credential guidance, a 404 names the missing resource. The exit code is non-zero on any failure.
Self-documentation
Every command supports --help:
smplkit --help
smplkit flag set --help
smplkit audit forwarder create --helpSource
The CLI lives on GitHub at smplkit/cli.

