Command Reference¶
AWS SSM Parameter Store¶
| Command | Options | Description |
|---|---|---|
suve aws param show |
--raw--parse-json (-j)--no-pager--output=<FORMAT> |
Display parameter with metadata |
suve aws param log |
--number=<N> (-n)--patch (-p)--parse-json (-j)--oneline--reverse--since=<DATE>--until=<DATE>--no-pager--output=<FORMAT> |
Show version history |
suve aws param diff |
--parse-json (-j)--no-pager--output=<FORMAT> |
Compare versions |
suve aws param list |
--recursive (-R)--filter=<REGEX>--show--output=<FORMAT> |
List parameters |
suve aws param create |
--type=<TYPE>--secure--description=<TEXT>--tier=<TIER>--data-type=<TYPE>--allowed-pattern=<REGEX>--policies=<JSON> |
Create a new parameter |
suve aws param update |
--type=<TYPE>--secure--description=<TEXT>--tier=<TIER>--data-type=<TYPE>--allowed-pattern=<REGEX>--policies=<JSON>--yes |
Update an existing parameter |
suve aws param delete |
--yes |
Delete parameter |
suve aws param tag |
<KEY>=<VALUE>... |
Add or update tags |
suve aws param untag |
<KEY>... |
Remove tags |
AWS Secrets Manager¶
| Command | Options | Description |
|---|---|---|
suve aws secret show |
--raw--parse-json (-j)--no-pager--output=<FORMAT> |
Display secret with metadata |
suve aws secret log |
--number=<N> (-n)--patch (-p)--parse-json (-j)--oneline--reverse--since=<DATE>--until=<DATE>--no-pager--output=<FORMAT> |
Show version history |
suve aws secret diff |
--parse-json (-j)--no-pager--output=<FORMAT> |
Compare versions |
suve aws secret list |
--filter=<REGEX>--show--output=<FORMAT> |
List secrets |
suve aws secret create |
--description=<TEXT> |
Create new secret |
suve aws secret update |
--description=<TEXT>--yes |
Update existing secret |
suve aws secret delete |
--force--recovery-window=<DAYS>--yes |
Delete secret |
suve aws secret restore |
Restore deleted secret | |
suve aws secret tag |
<KEY>=<VALUE>... |
Add or update tags |
suve aws secret untag |
<KEY>... |
Remove tags |
Google Cloud Secret Manager¶
Uses integer version numbers (with the latest alias) and has no staging labels. Select the project with --project or the GOOGLE_CLOUD_PROJECT environment variable. Authentication uses Application Default Credentials (ADC). See docs/gcloud.md for details.
Note
Google Cloud Secret Manager calls key=value metadata "labels"; suve surfaces them under its cross-provider term tags (tag / untag). See Metadata Terminology.
| Command | Options | Description |
|---|---|---|
suve gcloud secret show |
--raw--parse-json (-j)--no-pager--output=<FORMAT> |
Display secret with metadata |
suve gcloud secret log |
--number=<N> (-n)--patch (-p)--parse-json (-j)--oneline--reverse--since=<DATE>--until=<DATE>--no-pager--output=<FORMAT> |
Show version history |
suve gcloud secret diff |
--parse-json (-j)--no-pager--output=<FORMAT> |
Compare versions |
suve gcloud secret list |
--filter=<REGEX>--show--output=<FORMAT> |
List secrets |
suve gcloud secret create |
Create new secret | |
suve gcloud secret update |
--yes |
Update existing secret |
suve gcloud secret delete |
--yes |
Delete secret |
suve gcloud secret tag |
<KEY>=<VALUE>... |
Add or update tags (Google Cloud "labels") |
suve gcloud secret untag |
<KEY>... |
Remove tags (Google Cloud "labels") |
Azure Key Vault¶
Secrets are versioned by opaque IDs and have no staging labels. Select the vault with --vault-name or the AZURE_KEYVAULT_NAME environment variable — the vault name is a globally-unique endpoint, so no subscription or resource group is needed. Authentication uses the DefaultAzureCredential chain (environment, managed identity, Azure CLI, ...). See docs/azure.md for details.
| Command | Options | Description |
|---|---|---|
suve azure secret show |
--raw--parse-json (-j)--no-pager--output=<FORMAT> |
Display secret with metadata |
suve azure secret log |
--number=<N> (-n)--patch (-p)--parse-json (-j)--oneline--reverse--since=<DATE>--until=<DATE>--no-pager--output=<FORMAT> |
Show version history |
suve azure secret diff |
--parse-json (-j)--no-pager--output=<FORMAT> |
Compare versions |
suve azure secret list |
--filter=<REGEX>--show--output=<FORMAT> |
List secrets |
suve azure secret create |
Create new secret | |
suve azure secret update |
--yes |
Update existing secret |
suve azure secret delete |
--yes |
Delete secret (soft-delete) |
suve azure secret restore |
Recover a soft-deleted secret | |
suve azure secret tag |
<KEY>=<VALUE>... |
Add or update tags |
suve azure secret untag |
<KEY>... |
Remove tags |
Azure App Configuration¶
Unversioned key-value store. #, ~, and : are valid key characters — the whole argument is the literal key name, not a version spec — and log reports that history is unsupported. tag / untag are supported via a GET-merge-PUT that preserves the value and any other tags (a value update likewise keeps existing tags). Select the store with --store-name or the AZURE_APPCONFIG_NAME environment variable — the store name is a globally-unique endpoint, so no subscription or resource group is needed. See docs/azure.md for details.
| Command | Options | Description |
|---|---|---|
suve azure param show |
--namespace/--ns--raw--parse-json (-j)--no-pager--output=<FORMAT> |
Display value with metadata |
suve azure param list |
--namespace/--ns--filter=<REGEX>--show--output=<FORMAT> |
List keys |
suve azure param create |
--namespace/--ns |
Create a new key |
suve azure param update |
--namespace/--ns--yes |
Update an existing key |
suve azure param delete |
--namespace/--ns--yes |
Delete a key |
suve azure param tag |
--namespace/--ns |
Add or update tags (GET-merge-PUT) |
suve azure param untag |
--namespace/--ns |
Remove tags |
Namespaces¶
App Configuration addresses a setting by (key, label). This label axis is an identity dimension — a flat partition of the key space, like a Kubernetes namespace — not key=value metadata. Because "label" almost everywhere else means metadata (which suve unifies as tags), suve calls this axis a namespace; Azure App Configuration calls it a "label".
Select the namespace with --namespace (alias --ns) or the AZURE_APPCONFIG_NAMESPACE environment variable (precedence: flag > env > default). The default is the null namespace (App Configuration's unlabeled/default settings); a dev namespace never surfaces prod settings in list/show.
The value is interpreted by context:
| Value | Meaning | Where |
|---|---|---|
unset or "" |
the null namespace (default; "" also overrides an env default back to null) |
all commands |
"*" |
all namespaces (wildcard) | list/read only |
"dev,prod" |
dev OR prod (, = OR-list) |
list/read only |
"dev*" |
prefix wildcard | list/read only |
"dev" |
the literal namespace dev |
all commands |
"\*", "foo\,bar" |
a literal namespace containing a reserved char (\ escapes *, ,, \) |
all commands |
- List/read (
list,show) forward the value to App Configuration's label filter, so*(all),dev*(prefix), anddev,prod(OR-list) work natively; an empty value maps to the null-namespace filter. - Single-item ops (
show,create,update,delete, staging) need exactly one namespace:\escapes are decoded, and any unescaped*or,is a usage error (it names all/multiple namespaces). This is also how you address a namespace literally named*/,/\— e.g.--namespace "\*". - The namespace is a separate flag/env channel; the positional argument stays the whole key, so colon keys like
Logging:LogLevel:Defaultare unaffected. The filter grammar (*,\) lives only inside the--namespacevalue.
Stage Commands¶
Every backend shares one staging workflow, invoked as suve <provider> stage <service> <command> — drop <provider> when it is the only active backend (Bare Aliases), and drop <service> on a secret-only provider (Google Cloud). Services are param / secret (AWS), secret (Azure Key Vault) / param (Azure App Configuration).
+---------+ +---------+ +---------+
| edit |--->| stage |--->| apply |
+---------+ +---------+ +---------+
| | |
| | v
| | Applied to the backend
| |
| v
| status (view)
| diff (compare)
| reset (unstage)
| |
| v
| Discarded
+-------------+
| Command | Options | Description |
|---|---|---|
add |
--value-stdin⁴--description=<TEXT>¹ |
Stage a new entry |
edit |
--value-stdin⁴--description=<TEXT>¹ |
Stage a modification (a new version where the backend versions) |
delete |
AWS Secrets Manager: --force--recovery-window=<DAYS> |
Stage a deletion |
status |
--verbose (-v) |
Show staged changes |
diff |
--parse-json (-j)--no-pager |
Compare staged vs the live backend |
apply |
--yes--ignore-conflicts² |
Apply staged changes |
reset |
--all |
Unstage; or reset <name>#<VERSION> / <name>~N restores that live version as the staged value³ |
tag / untag |
<KEY>=<VALUE>... / <KEY>... |
Stage tag additions / removals |
export / import |
see Export / Import Commands | Portable snapshot files (per service, or every AWS service at once) |
¹ Only where the backend stores a description (AWS, Google Cloud); Azure omits the flag. AWS Parameter Store staging additionally accepts its type flags (--type, --secure).
² --ignore-conflicts is ignored by Azure App Configuration, which is unversioned (last-write-wins) and has no modified-after conflict to skip.
³ Restoring a version needs a versioned backend; on unversioned Azure App Configuration reset only unstages.
⁴ add / edit take the value as a positional argument (an explicit "" is an empty value), from stdin with --value-stdin, or from $EDITOR when both are omitted. Without a terminal, a missing value is an error instead of an editor launch.
Aggregate Stage Commands¶
suve stage <command> (and suve <backend> stage <command>) operate across every service of the active backend — AWS Parameter Store + Secrets Manager, or Azure Key Vault + App Configuration (Google Cloud is secret-only). The backend is resolved by the same bare-alias rules, and a backend that is not configured is skipped.
| Command | Options | Description |
|---|---|---|
suve stage status |
--verbose (-v) |
Show all staged changes |
suve stage diff |
--parse-json (-j)--no-pager |
Compare all staged vs the live backend |
suve stage apply |
--yes--ignore-conflicts |
Apply all staged changes |
suve stage reset |
--all |
Unstage all changes |
Export / Import Commands¶
Export writes the working staging area out to portable snapshot files (one per service) and import reads them back. Each file is a plaintext JSON envelope ({version, provider, scope, service, payload}) whose payload is passphrase-encrypted (Argon2id) or plaintext when the passphrase is empty. The full scope is embedded and validated on import.
| Command | Backend | Argument | Options | Description |
|---|---|---|---|---|
suve stage export |
AWS | <dir> |
--keep--yes (--force)--passphrase-stdin |
Export every service with staged changes to <dir>/param.json + <dir>/secret.json |
suve stage {param,secret} export |
AWS, Azure | <file> |
--keep--yes (--force)--passphrase-stdin |
Export a single service to <file> |
suve stage export |
Google Cloud | <file> |
--keep--yes (--force)--passphrase-stdin |
Export the staged Secret Manager changes to <file> |
suve stage import |
AWS | <dir> |
--merge--overwrite--yes--passphrase-stdin--allow-scope-mismatch |
Import param.json / secret.json from <dir> (missing files skipped; nothing imported if both absent) |
suve stage {param,secret} import |
AWS, Azure | <file> |
--merge--overwrite--yes--passphrase-stdin--allow-scope-mismatch |
Import a single service from <file> (missing file or service mismatch is a hard error) |
suve stage import |
Google Cloud | <file> |
--merge--overwrite--yes--passphrase-stdin--allow-scope-mismatch |
Import Secret Manager changes from <file> (missing file or service mismatch is a hard error) |
Note
Azure has no all-service export / import. Key Vault and App Configuration keep separate staging scopes, and one snapshot directory holds one scope. Export each Azure service to its own file instead.
exportwrites the working area out wholesale; there is no--merge/--overwrite. By default it clears the working staging area;--keepretains it.--yes/--forceskip the overwrite confirmation.- Directory export is not atomic across files. On AWS,
suve stage export <dir>writesparam.jsonandsecret.jsonas separate files. If the first write succeeds and the second fails (for example a full disk or a permissions error), the command aborts with an error and leaves a partial directory — a freshly writtenparam.jsonalongside a stale or missingsecret.json. Your working staging area is never touched, so no staged changes are lost; just re-run the export once the underlying problem is resolved and it overwrites the directory cleanly. Because each snapshot file embeds and validates its own scope on import, a laterstage import <dir>restores whatever files are present per service without silently merging a mismatched pair; still, avoid importing a directory left behind by a failed export. importhas no--keep(it is read-only on the file).--merge/--overwriteare mutually exclusive and only matter when the working area already holds changes; otherwise the file is applied directly.--allow-scope-mismatchimports even when the file's embedded scope differs from the current scope.