suve

module
v1.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 11, 2026 License: MIT

README

suve

suve

Secret Unified Versioning Explorer

for   AWS Google Cloud Azure

Go Reference Test Codecov

[!NOTE] This project was written by AI (Claude Code).

A Git-like CLI/GUI for AWS Parameter Store / Secrets Manager, Google Cloud Secret Manager, and Azure Key Vault / App Configuration. Familiar commands like show, log, diff, and a staging workflow for safe, reviewable changes.

CLI Demo

GUI Demo

Features

  • Git-like commands: show, log, diff, ls, tag
  • Staging workflow: editstatusdiffapply (review changes before applying), plus export / import for portable, per-service snapshots
  • Version navigation: #VERSION, ~SHIFT, :LABEL syntax
  • Colored diff output: Easy-to-read unified diff format
  • Multi-cloud: AWS SSM Parameter Store / Secrets Manager, Google Cloud Secret Manager, and Azure Key Vault / App Configuration
  • Secure staging: Working staging state is encrypted at rest with a data key stored in the OS keychain (override with SUVE_STAGING_KEY; plaintext fallback with a warning if unavailable). Exported snapshot files carry a separately passphrase-encrypted payload (Argon2 + AES-GCM; an empty passphrase writes plaintext).
  • GUI mode: Desktop application via --gui flag (built with Wails)

Installation

[!NOTE] On Linux, suve requires GTK3 and WebKit2GTK for GUI support. Use the CLI-only version if you only need CLI functionality.

Using mise (macOS/Linux/Windows)

suve is installable directly from GitHub Releases via mise's github backend — no extra registry required:

# Full version (CLI + GUI)
mise use -g "github:mpyw/suve"

# CLI-only version (no GUI dependencies, recommended for Linux. Not available on macOS/Windows)
mise use -g "github:mpyw/suve[matching=cli]"

[!TIP] Committing to a shared mise.toml used across OSes? Use a single cross-platform rule instead:

[tools]
"github:mpyw/suve" = { version = "latest", matching_regex = "(darwin|windows|cli_[0-9.]+_linux)" }

Using aqua (macOS/Linux/Windows)

suve is available in the standard aqua registry:

aqua g -i mpyw/suve

The registry picks the right asset per platform automatically: the self-contained GUI build on macOS/Windows, and the dependency-free CLI-only static build on Linux (supported from v1.3.0).

Using Homebrew (macOS/Linux)

# Full version (CLI + GUI)
brew install mpyw/tap/suve

# CLI-only version (no GUI dependencies, recommended for Linux)
brew install mpyw/tap/suve-cli

Using Scoop (Windows)

scoop bucket add mpyw https://github.com/mpyw/scoop-bucket.git
scoop install suve
Linux (.deb / .rpm)

Download packages from GitHub Releases:

Debian/Ubuntu (.deb):

export VERSION=0.0.0
export ARCH=amd64  # or arm64
export WEBKIT_SUFFIX=""  # use "_webkit2_41" for Ubuntu 24.04+

# CLI-only (recommended, no GUI dependencies)
curl -LO "https://github.com/mpyw/suve/releases/download/v${VERSION}/suve-cli_${VERSION}-1_${ARCH}.deb"
sudo dpkg -i "suve-cli_${VERSION}-1_${ARCH}.deb"

# Full version (CLI + GUI, requires GTK3 and WebKit2GTK)
curl -LO "https://github.com/mpyw/suve/releases/download/v${VERSION}/suve${WEBKIT_SUFFIX}_${VERSION}-1_${ARCH}.deb"
sudo dpkg -i "suve${WEBKIT_SUFFIX}_${VERSION}-1_${ARCH}.deb"

Note: Ubuntu 22.04/Debian uses webkit2gtk-4.0 (default). Ubuntu 24.04+ uses webkit2gtk-4.1 (set WEBKIT_SUFFIX="_webkit2_41").

Red Hat/Fedora (.rpm):

export VERSION=0.0.0
export ARCH=x86_64  # or aarch64
export WEBKIT_SUFFIX=""  # use "_webkit2_41" for Fedora 40+

# CLI-only (recommended, no GUI dependencies)
curl -LO "https://github.com/mpyw/suve/releases/download/v${VERSION}/suve-cli-${VERSION}-1.${ARCH}.rpm"
sudo rpm -i "suve-cli-${VERSION}-1.${ARCH}.rpm"

# Full version (CLI + GUI, requires GTK3 and WebKit2GTK)
curl -LO "https://github.com/mpyw/suve/releases/download/v${VERSION}/suve${WEBKIT_SUFFIX}-${VERSION}-1.${ARCH}.rpm"
sudo rpm -i "suve${WEBKIT_SUFFIX}-${VERSION}-1.${ARCH}.rpm"

Note: Fedora 39 and earlier uses webkit2gtk-4.0 (default). Fedora 40+ uses webkit2gtk-4.1 (set WEBKIT_SUFFIX="_webkit2_41").

Using go install (CLI only)
go install github.com/mpyw/suve/cmd/suve@latest

Note: go install builds CLI only. GUI requires pre-built assets that are not included in the Go module. For GUI support, use a package manager or build from source.

Using go tool (CLI only, Go 1.25+)
# Add to go.mod as a tool dependency
go get -tool github.com/mpyw/suve/cmd/suve@latest

# Run via go tool
go tool suve param show /my/param
Building from Source

For platforms without pre-built packages (e.g., Arch Linux) or if you need the latest development version with GUI:

Requires Go 1.25+.

git clone https://github.com/mpyw/suve.git
cd suve

CLI only:

mise build-cli
# Binary: bin/suve

CLI + GUI (requires Wails CLI and Node.js):

go install github.com/wailsapp/wails/v2/cmd/wails@latest
cd gui && wails build -tags production -skipbindings
# Binary: gui/build/bin/gui

Build dependencies for GUI:

Platform Dependencies
All Node.js (for frontend build)
macOS Xcode Command Line Tools
Windows WebView2 Runtime (usually pre-installed)
Linux build dependencies and webkit2gtk-4.1 support

Linux requires GTK3 and WebKit2GTK:

Platform Dependencies
Ubuntu 22.04/Debian sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev
Ubuntu 24.04+ sudo apt install libgtk-3-dev libwebkit2gtk-4.1-dev
Fedora 39 sudo dnf install gtk3-devel webkit2gtk4.0-devel
Fedora 40+ sudo dnf install gtk3-devel webkit2gtk4.1-devel
Arch Linux sudo pacman -S gtk3 webkit2gtk-4.1

For webkit2gtk-4.1 (Ubuntu 24.04+, Fedora 40+, Arch Linux), use the webkit2_41 build tag:

cd gui && wails build -tags production,webkit2_41 -skipbindings

Shell Completion

suve can generate completion scripts for bash, zsh, fish, and PowerShell. Source the output to enable completion for commands, subcommands, and flags.

# bash — add to ~/.bashrc
source <(suve completion bash)

# zsh — add to ~/.zshrc
source <(suve completion zsh)

# fish
suve completion fish > ~/.config/fish/completions/suve.fish

# PowerShell — add to $PROFILE
suve completion pwsh | Out-String | Invoke-Expression

Authentication

suve talks to each cloud's data plane using that cloud's own SDK credential chain — the same one the native CLI (aws / gcloud / az) uses. There is nothing suve-specific to configure: sign in the normal way, then point suve at the resource with an environment variable (or the equivalent flag).

ProviderSign in (identity)Point at the resource
AWS
aws sso login \
  --profile prod
export AWS_PROFILE=prod
export AWS_REGION=us-east-1
Google
Cloud
gcloud auth \
  application-default \
  login
export GOOGLE_CLOUD_PROJECT=my-project
Azure
az login
# secret
export AZURE_KEYVAULT_NAME=my-vault
# param
export AZURE_APPCONFIG_NAME=my-store

[!NOTE]

  • Every value has a flag equivalent: --profile/--region, --project, --vault-name/--store-name.
  • AWS — the standard credential chain: SSO, static keys, ~/.aws/credentials, or an IAM role. With aws-vault: aws-vault exec prod -- suve param show /my/param.
  • Google CloudApplication Default Credentials; or a service-account key via GOOGLE_APPLICATION_CREDENTIALS.
  • Azure — the DefaultAzureCredential chain; or a service principal via AZURE_CLIENT_ID / AZURE_CLIENT_SECRET / AZURE_TENANT_ID. az login sets no environment variables — it caches credentials under ~/.azure, which suve reuses. The Key Vault / App Configuration name is a globally-unique endpoint, so no subscription or resource group is needed.

Getting Started

Basic Commands

user@host:~$ suve param show /app/config/database-url
Name: /app/config/database-url
Version: 3
Type: SecureString
Modified: 2024-01-15T10:30:45Z

  postgres://db.example.com:5432/myapp

user@host:~$ suve param show --raw /app/config/database-url
postgres://db.example.com:5432/myapp

The show command displays value with metadata; --raw outputs raw value for piping:

# Use in scripts
DB_URL=$(suve param show --raw /app/config/database-url)

# Pipe to file
suve param show --raw /app/config/ssl-cert > cert.pem

Version History with log

View version history, just like git log:

user@host:~$ suve param log /app/config/database-url
Version 3 (current)
Date: 2024-01-15T10:30:45Z
postgres://db.example.com:5432/myapp...

Version 2
Date: 2024-01-14T09:20:30Z
postgres://old-db.example.com:5432/myapp...

Version 1
Date: 2024-01-13T08:10:00Z
postgres://localhost:5432/myapp...

Use --patch to see what changed in each version:

user@host:~$ suve param log --patch /app/config/database-url

Output will look like:

Version 3 (current)
Date: 2024-01-15T10:30:45Z

--- /app/config/database-url#2
+++ /app/config/database-url#3
@@ -1 +1 @@
-postgres://old-db.example.com:5432/myapp
+postgres://db.example.com:5432/myapp

Version 2
Date: 2024-01-14T09:20:30Z

--- /app/config/database-url#1
+++ /app/config/database-url#2
@@ -1 +1 @@
-postgres://localhost:5432/myapp
+postgres://old-db.example.com:5432/myapp

[!TIP] Add --parse-json to pretty-print JSON values before diffing. This normalizes formatting and sorts keys alphabetically, so you can focus on the actual content changes rather than formatting differences:

suve param log --patch --parse-json /app/config/credentials

Comparing Versions with diff

Compare previous version with latest (most common use case):

user@host:~$ suve param diff /app/config/database-url~

Output will look like:

--- /app/config/database-url#2
+++ /app/config/database-url#3
@@ -1 +1 @@
-postgres://old-db.example.com:5432/myapp
+postgres://db.example.com:5432/myapp

Compare any two specific versions:

user@host:~$ suve param diff /app/config/database-url#1 /app/config/database-url#3

Output will look like:

--- /app/config/database-url#1
+++ /app/config/database-url#3
@@ -1 +1 @@
-postgres://localhost:5432/myapp
+postgres://db.example.com:5432/myapp

Staging Workflow

[!NOTE] The staging workflow lets you prepare changes locally, review them, and apply when ready—just like git addgit diff --stagedgit commit. For detailed documentation, see Staging State Transitions.

[!TIP] Staged values live in encrypted files under ~/.suve/staging/. Use suve stage export <dir> to write them to portable snapshot files and suve stage import <dir> to restore them later.

1. Stage changes (opens editor or accepts value directly):

[!TIP] To use VSCode or Cursor as your editor, set export VISUAL='code --wait' or export VISUAL='cursor --wait' in your shell profile.

user@host:~$ suve stage param add /app/config/new-param "my-value"
✓ Staged for creation: /app/config/new-param

user@host:~$ suve stage param edit /app/config/database-url
✓ Staged: /app/config/database-url

user@host:~$ suve stage param delete /app/config/old-param
✓ Staged for deletion: /app/config/old-param

2. Review staged changes:

user@host:~$ suve stage status
Staged SSM Parameter Store changes (3):
  A /app/config/new-param
  M /app/config/database-url
  D /app/config/old-param

user@host:~$ suve stage diff

Output will look like:

--- /app/config/database-url#3 (AWS)
+++ /app/config/database-url (staged)
@@ -1 +1 @@
-postgres://db.example.com:5432/myapp
+postgres://new-db.example.com:5432/myapp

--- /app/config/new-param (not in AWS)
+++ /app/config/new-param (staged for creation)
@@ -0,0 +1 @@
+my-value

--- /app/config/old-param#2 (AWS)
+++ /app/config/old-param (staged for deletion)
@@ -1 +0,0 @@
-deprecated-value

3. Apply changes:

user@host:~$ suve stage apply
Applying SSM Parameter Store parameters...
✓ Created /app/config/new-param
✓ Updated /app/config/database-url
✓ Deleted /app/config/old-param

Reset if needed:

# Unstage specific parameter
suve stage param reset /app/config/database-url

# Unstage all
suve stage reset --all

[!TIP] suve stage apply prompts for confirmation before applying. Use --yes to skip the prompt.

Save changes for later (export / import):

# Export staged changes to a directory as one file per service
# (param.json / secret.json); prompts for a passphrase.
# By default the working staging area is cleared; use --keep to retain it.
suve stage export ./backup

# Restore them into the working staging area later
suve stage import ./backup

# Export a single service to a specific file
suve stage param export ./param-backup.json

# Import a single service from a specific file
suve stage param import ./param-backup.json

[!NOTE] export writes the working area out wholesale (no merge). import prompts to Merge or Overwrite only when the working area already holds changes; pass --merge / --overwrite to choose non-interactively.

[!NOTE] See Staging State Transitions for detailed staging documentation.

Version Specification

Navigate versions with Git-like syntax.

AWS SSM Parameter Store

[!NOTE] SSM Parameter Store uses numeric version numbers (1, 2, 3, ...) that auto-increment on each update.

<name>[#VERSION][~SHIFT]*
where ~SHIFT = ~ | ~N  (repeatable, cumulative)
Syntax Description
/my/param Latest version
/my/param#3 Version 3
/my/param~1 1 version ago
/my/param#5~2 Version 5 minus 2 = Version 3
/my/param~~ 2 versions ago (~1~1)

AWS Secrets Manager

[!NOTE] Secrets Manager uses UUID version IDs and staging labels instead of numeric versions. AWSCURRENT and AWSPREVIOUS are special labels automatically managed by AWS—AWSCURRENT always points to the latest version.

<name>[#VERSION | :LABEL][~SHIFT]*
where ~SHIFT = ~ | ~N  (repeatable, cumulative)
Syntax Description
my-secret Current (AWSCURRENT)
my-secret:AWSPREVIOUS Previous staging label
my-secret#abc123 Specific version ID
my-secret~1 1 version ago

[!IMPORTANT] When specifying version-only syntax like '#3' or ':AWSPREVIOUS', you must use quotes to prevent shell interpretation of the # (comment) or : characters.

[!TIP] ~ without a number means ~1. You can chain them: ~~ = ~1~1 = ~2

Google Cloud Secret Manager

[!NOTE] Google Cloud Secret Manager uses integer version numbers (1, 2, 3, ...) plus the latest alias. There are no staging labels, so :LABEL syntax does not apply.

Syntax Description
my-secret Latest version
my-secret#3 Version 3
my-secret~1 1 version ago

Azure Key Vault

[!NOTE] Azure Key Vault versions are opaque version IDs. There are no staging labels, so :LABEL syntax does not apply.

Syntax Description
my-secret Current version
my-secret#<id> Specific version ID
my-secret~1 1 version ago

Azure App Configuration

[!NOTE] Azure App Configuration is unversioned. #, ~, and : are valid key characters — the whole argument is the literal key name, not a version spec — and log reports that history is unsupported.

Providers

Feature support

Backend Command Versioning Labels / Tags Staging GUI Auth
AWS Parameter Store aws param ✅ numeric ✅ tags shared config/env/role
AWS Secrets Manager aws secret ✅ UUID + staging labels ✅ tags shared config/env/role
Google Cloud Secret Manager gcloud secret ✅ integer (latest) ✅ labels Application Default Credentials
Azure Key Vault azure secret ✅ opaque id ✅ tags DefaultAzureCredential
Azure App Configuration azure param ❌ unversioned ✅ tags¹ ✅² DefaultAzureCredential

Read/write operations (show, log, diff, list, create, update, delete, tag, untag) are available on every backend, with these caveats: restore is available on AWS Secrets Manager and Azure Key Vault (soft-delete recovery); on Azure App Configuration log reports history unsupported and #/~/: are treated as literal key characters (not version specifiers). Only AWS Secrets Manager has staging labels (:AWSCURRENT etc.).

¹ App Configuration's PUT replaces the whole key-value, so tag writes are a GET-merge-PUT with an ETag precondition (azappconfig/v2): tag/untag preserve the value and other tags, and a value write (update) preserves existing tags.

² App Configuration is unversioned, so staging uses last-write-wins (no modified-after conflict check); tag/untag are available.

Metadata terminology

suve normalizes every provider's key=value metadata to a single term — tags (suve … tag / untag). Each provider's native word is a documented mapping; suve does not add per-provider command or flag aliases.

Cloud metadata term (native) suve term identity axis (native)
AWS SSM / Secrets Manager tags tags version
Azure Key Vault tags tags version
Azure App Configuration tags tags label ((key, label) — a separate concept, surfaced as suve's namespace)
Google Cloud Secret Manager labels tags version

[!WARNING] Naming trap: Google Cloud "labels" are key=value metadata — suve surfaces them as tags (suve gcloud secret tag …). Azure App Configuration's "label" is an identity dimension (part of a setting's address), which suve exposes as its own namespace axis (--namespace/--ns; see Namespaces). These are different concepts that happen to share the vendor word "label".

Provider selection

Every backend has an explicit command group that is always available, regardless of environment:

suve aws param    ...  # AWS Parameter Store
suve aws secret   ...  # AWS Secrets Manager
suve aws stage    ...  # AWS staging
suve gcloud secret ... # Google Cloud Secret Manager
suve gcloud stage  ... # Google Cloud staging
suve azure secret  ... # Azure Key Vault
suve azure param   ... # Azure App Configuration
suve azure stage   ... # Azure staging (secret = Key Vault, param = App Configuration)

For convenience, suve also exposes bare top-level aliasessuve param, suve secret, suve stage — but only when the environment makes the target unambiguous. param, secret, and stage are each resolved independently. All backends support staging, so stage follows the same "exactly one active backend" rule (Azure is staging-active when either AZURE_KEYVAULT_NAME or AZURE_APPCONFIG_NAME is set):

  1. A backend is active when its identifying environment variable is set:

    Backend Active when set
    AWS AWS_ACCESS_KEY_ID, AWS_VAULT, or AWS_PROFILE
    Google Cloud GOOGLE_CLOUD_PROJECT
    Azure Key Vault (secret) AZURE_KEYVAULT_NAME
    Azure App Configuration (param) AZURE_APPCONFIG_NAME
  2. The bare alias for a service appears only when exactly one backend is active for it. Zero or two-plus active → no alias, use the explicit group. There is no priority order — ambiguity is never resolved silently.

  3. AWS fallback: if no backend is active via env at all, AWS is accepted via ~/.aws/credentials (or $AWS_SHARED_CREDENTIALS_FILE). If that is also absent, there are no bare aliases.

Examples ( = alias not exposed):

Environment param secret stage
nothing set, ~/.aws/credentials present aws aws aws
AWS_PROFILE aws aws aws
GOOGLE_CLOUD_PROJECT gcloud gcloud
AZURE_KEYVAULT_NAME azure azure
AZURE_APPCONFIG_NAME azure azure
AWS_PROFILE + GOOGLE_CLOUD_PROJECT aws — (ambiguous) — (ambiguous)
nothing set, no credentials file

suve --help lists which aliases are active in the current environment.

Command Reference

Services

Explicit command groups (always available) and their bare aliases (exposed per the provider selection rules above):

Backend Explicit command Bare alias (conditional)
AWS SSM Parameter Store aws param (ssm, ps) param
AWS Secrets Manager aws secret (sm, secretsmanager) secret
AWS Staging aws stage (stg) stage
Google Cloud Secret Manager gcloud secret (secrets, sm) secret
Google Cloud Staging gcloud stage (stg) stage
Azure Key Vault azure secret (kv, keyvault) secret
Azure App Configuration azure param (appconfig, ac, appcfg) param
Azure Staging azure stage (stg) stage

The command groups themselves also take aliases: gcloudgcp / google, and azureaz (e.g. suve gcp secrets show, suve az kv show). Under azure stage, the secret / param subgroups accept the same aliases as their read/write counterparts (kv / keyvault, appconfig / ac / appcfg).

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

Staging commands (under suve stage param):

Command Options Description
suve stage param add --description=<TEXT> Stage new parameter
suve stage param edit --description=<TEXT> Stage modification
suve stage param delete Stage deletion
suve stage param status --verbose (-v) Show staged changes
suve stage param diff --parse-json (-j)
--no-pager
Compare staged vs AWS
suve stage param apply --yes
--ignore-conflicts
Apply staged changes
suve stage param reset --all Unstage changes
suve stage param tag <KEY>=<VALUE>... Stage tag additions
suve stage param untag <KEY>... Stage tag removals

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

Staging commands (under suve stage secret):

Command Options Description
suve stage secret add --description=<TEXT> Stage new secret
suve stage secret edit --description=<TEXT> Stage modification
suve stage secret delete --force
--recovery-window=<DAYS>
Stage deletion
suve stage secret status --verbose (-v) Show staged changes
suve stage secret diff --parse-json (-j)
--no-pager
Compare staged vs AWS
suve stage secret apply --yes
--ignore-conflicts
Apply staged changes
suve stage secret reset --all Unstage changes
suve stage secret tag <KEY>=<VALUE>... Stage tag additions
suve stage secret untag <KEY>... Stage tag removals

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")

Staging commands (under suve gcloud stage; Google Cloud is secret-only, so staging operates on secrets directly):

Command Options Description
suve gcloud stage add --description=<TEXT> Stage a new secret
suve gcloud stage edit --description=<TEXT> Stage a modification (applies as a new version)
suve gcloud stage delete Stage a deletion
suve gcloud stage status --verbose (-v) Show staged changes
suve gcloud stage diff --parse-json (-j)
--no-pager
Show staged vs Google Cloud
suve gcloud stage apply --yes
--ignore-conflicts
Apply staged changes
suve gcloud stage reset --all Unstage changes
suve gcloud stage tag <KEY>=<VALUE>... Stage tag additions (Google Cloud "labels")
suve gcloud stage untag <KEY>... Stage tag removals (Google Cloud "labels")
suve gcloud stage export <file> Export staged changes to a snapshot file
suve gcloud stage import <file> Import staged changes from a snapshot file

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

Staging commands (under suve azure stage secret):

Command Options Description
suve azure stage secret add --description=<TEXT> Stage a new secret
suve azure stage secret edit --description=<TEXT> Stage a modification (new version)
suve azure stage secret delete Stage a deletion
suve azure stage secret status --verbose (-v) Show staged changes
suve azure stage secret diff --parse-json (-j)
--no-pager
Show staged vs Key Vault
suve azure stage secret apply --yes
--ignore-conflicts
Apply staged changes
suve azure stage secret reset --all Unstage changes
suve azure stage secret tag <KEY>=<VALUE>... Stage tag additions
suve azure stage secret untag <KEY>... Stage tag removals
suve azure stage secret export <file> Export staged changes to a snapshot file
suve azure stage secret import <file> Import staged changes from a snapshot file

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 (see footnote ¹). 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), and dev,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:Default are unaffected. The filter grammar (* , \) lives only inside the --namespace value.

Staging commands (under suve azure stage param; unversioned → last-write-wins, no tag/untag):

Command Options Description
suve azure stage param add --description=<TEXT> Stage a new setting
suve azure stage param edit --description=<TEXT> Stage a modification
suve azure stage param delete Stage a deletion
suve azure stage param status --verbose (-v) Show staged changes
suve azure stage param diff --parse-json (-j)
--no-pager
Show staged vs App Configuration
suve azure stage param apply --yes Apply staged changes
suve azure stage param reset --all Unstage changes
suve azure stage param export <file> Export staged changes to a snapshot file
suve azure stage param import <file> Import staged changes from a snapshot file

[!NOTE] Azure staging is per-service under the hood: suve azure stage secret (Key Vault) and suve azure stage param (App Configuration) keep separate staging state. Provider-wide azure stage status/diff/apply/reset span both services, skipping whichever one is not configured.

Global Stage Commands (AWS)

Command Options Description
suve stage status --verbose (-v) Show all staged changes
suve stage diff --parse-json (-j)
--no-pager
Compare all staged vs AWS
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 Argument Options Description
suve stage export <dir> --keep
--yes (--force)
--passphrase-stdin
Export every service with staged changes to <dir>/param.json + <dir>/secret.json
suve stage {param,secret} export <file> --keep
--yes (--force)
--passphrase-stdin
Export a single service to <file>
suve stage import <dir> --merge
--overwrite
--yes
--passphrase-stdin
--force
Import param.json / secret.json from <dir> (missing files skipped; nothing imported if both absent)
suve stage {param,secret} import <file> --merge
--overwrite
--yes
--passphrase-stdin
--force
Import a single service from <file> (missing file or service mismatch is a hard error)
  • export writes the working area out wholesale; there is no --merge / --overwrite. By default it clears the working staging area; --keep retains it. --yes / --force skip the overwrite confirmation.
  • import has no --keep (it is read-only on the file). --merge / --overwrite are mutually exclusive and only matter when the working area already holds changes; otherwise the file is applied directly. --force imports even when the file's embedded scope differs from the current scope.

Environment Variables

Timezone

suve respects the TZ environment variable for date/time formatting:

# Show times in UTC
TZ=UTC suve param show /app/config

# Show times in Japan Standard Time
TZ=Asia/Tokyo suve param show /app/config

All timestamps are formatted in RFC3339 format with the local timezone offset applied. If TZ is not set, the system's local timezone is used. Invalid timezone values fall back to UTC.

General

Variable Description
TZ Timezone for date/time formatting (see above)
SUVE_NO_UPDATE_CHECK Opt out of the update-check notification
SUVE_DEBUG Enable verbose debug logging (same as the global --debug flag); any non-empty value except 0/false enables it
SUVE_NO_REDACTION With debug enabled, log full request/response bodies and unmasked headers — including secret values and credentials (same as the global --no-redaction flag); parsed like SUVE_DEBUG

Debugging

Pass the global --debug flag (or set SUVE_DEBUG=1) to trace what suve is doing on stderr. This is designed for the "command produces empty or unexpected output" case: it shows the decisions suve made before calling any API, the effective cloud configuration, each SDK request/response, and how many results each step produced:

suve secret ls --debug          # flag works in any position
SUVE_DEBUG=1 suve secret ls      # or via environment

Each entry starts with a [suve debug <time>] prefix (multi-line HTTP dumps are prefixed on their first line). The output includes:

  • CLI decisions — the suve version and which provider each flat alias (param / secret / stage) resolved to.
  • Effective configuration — for AWS, the resolved region, profile, and credentials source (the usual suspects when a listing is unexpectedly empty); for Google Cloud, the queried projects/... parent; for Azure, the credential the DefaultAzureCredential chain selected.
  • SDK requests/responses — AWS HTTP request/response dumps (bodyless) with retries, gRPC calls with resource paths and durations for Google Cloud, and azcore request/response/retry/authentication events for Azure.
  • Result counts — items returned per API page, and how many names survived the client-side prefix/regex filters, so "the API returned nothing" and "my filter dropped everything" are distinguishable.

Only request/response metadata is printed — secret values are never logged: AWS uses the bodyless log modes, and because the dump is taken after request signing, suve shows only an allowlist of non-sensitive headers (Host, X-Amz-Target, request IDs, …) and redacts every other header value — so the signing Authorization header, the session token, and any future credential-bearing header fail closed rather than leaking. The gRPC interceptor never prints request/reply messages; azcore redacts headers outside its own allowlist and never logs bodies (error events may include the service's error document, the same text normal error output already shows). Debug output goes to stderr, so it never contaminates piped stdout.

Unredacted output (--no-redaction)

When the redacted default hides too much — e.g. you need to see the exact secret value a request returned, or the raw payload of a failing call — add --no-redaction (or set SUVE_NO_REDACTION=1) alongside --debug:

suve secret show my-secret --debug --no-redaction

This switches AWS to the with-body log modes and stops masking headers, and turns on azcore body logging for Azure, so full request/response bodies and credentials — including secret values and the signing Authorization header — are written to stderr. Use it only for deliberate, local debugging and never where the log could be captured or shared; a one-line warning is printed to stderr whenever it is active. It has no effect without --debug (you'll get a hint saying so), and no effect on Google Cloud, whose gRPC interceptor logs no message bodies at all.

Staging

Variable Description
SUVE_STAGING_KEY Base64-encoded 32-byte key that overrides the OS keychain for encrypting the working staging state

AWS

Variable Description
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN Static credentials
AWS_PROFILE Shared-config profile to load
AWS_REGION / AWS_DEFAULT_REGION Region

Google Cloud

Variable Description
GOOGLE_CLOUD_PROJECT Project for Secret Manager (or use --project)

Azure

Variable Description
AZURE_KEYVAULT_NAME Key Vault name for azure secret (or use --vault-name)
AZURE_APPCONFIG_NAME App Configuration store for azure param (or use --store-name)
AZURE_APPCONFIG_NAMESPACE Default namespace for azure param — Azure calls this axis a "label" (or use --namespace/--ns)

Authentication uses the DefaultAzureCredential chain (az login, environment, managed identity, ...). The Key Vault / App Configuration name is a globally-unique endpoint, so no subscription or resource group is needed.

AWS Configuration

suve uses standard AWS SDK configuration:

Authentication (in order of precedence):

  1. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN)
  2. Shared credentials file (~/.aws/credentials) and config (~/.aws/config)
    • Use AWS_PROFILE to specify which profile to load (default: default)
  3. IAM role (EC2, ECS, Lambda)

Region:

  • AWS_REGION or AWS_DEFAULT_REGION environment variable
  • ~/.aws/config file

[!WARNING] Ensure your IAM role/user has appropriate permissions:

  • SSM: ssm:GetParameter, ssm:GetParameters, ssm:GetParameterHistory, ssm:PutParameter, ssm:DeleteParameter, ssm:DescribeParameters, ssm:AddTagsToResource, ssm:RemoveTagsFromResource
  • SM: secretsmanager:GetSecretValue, secretsmanager:ListSecretVersionIds, secretsmanager:ListSecrets, secretsmanager:CreateSecret, secretsmanager:PutSecretValue, secretsmanager:UpdateSecret, secretsmanager:DeleteSecret, secretsmanager:RestoreSecret, secretsmanager:TagResource, secretsmanager:UntagResource

[!NOTE] The gcloud and azure commands use their own credential chains: Google Cloud uses Application Default Credentials (ADC), and Azure uses DefaultAzureCredential (environment, managed identity, Azure CLI, ...). See docs/gcloud.md and docs/azure.md for details.

Development

# Run tests
mise test

# Run linter
mise lint

# Build CLI (without GUI)
mise build-cli

# Build with GUI support — builds the frontend first, then embeds it into
# bin/suve. (A bare `go build -tags production` skips the frontend build, so the
# binary aborts at `suve --gui` with "no index.html could be found".)
mise build-gui

# Run E2E tests (requires Docker)
mise e2e

# Coverage (unit + E2E combined)
mise coverage-all

Local Development with Emulators

mise run bash starts the selected cloud's emulator(s) and opens a shell with the right environment injected, so suve (and suve --gui) talk to the local emulators and auto-detect the active provider. Flags combine freely (0–4):

mise run bash --aws               # AWS (localstack: SSM + Secrets Manager)
mise run bash --gcloud            # Google Cloud Secret Manager
mise run bash --azure-appconfig   # Azure App Configuration
mise run bash --azure-keyvault    # Azure Key Vault
mise run bash --azure             # both Azure services
mise run bash --aws --gcloud --azure   # everything at once

# inside the shell:
suve --gui        # auto-detects the active provider
suve param ls
suve secret list

Containers keep running after you exit the shell; stop them with docker compose down (or mise run clean).

Every cloud is behind a docker compose profile (aws / gcloud / azure), so nothing starts by default. To drive the AWS emulator manually instead of the shell above:

SUVE_LOCALSTACK_EXTERNAL_PORT=4566 docker compose --profile aws up -d
AWS_ENDPOINT_URL=http://127.0.0.1:4566 \
AWS_ACCESS_KEY_ID=dummy \
AWS_SECRET_ACCESS_KEY=dummy \
AWS_DEFAULT_REGION=us-east-1 \
suve param ls
docker compose down

[!IMPORTANT] Dummy credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) are required to prevent the SDK from attempting IAM role credential fetching. The mise run bash --aws shell sets these for you.

License

MIT License

Directories

Path Synopsis
cmd
suve command
Package main provides the suve CLI entry point.
Package main provides the suve CLI entry point.
internal
cli/colors
Package colors provides per-destination colored output for the CLI.
Package colors provides per-destination colored output for the CLI.
cli/commands
Package commands provides the command-line interface for suve.
Package commands provides the command-line interface for suve.
cli/commands/aws
Package aws provides the "suve aws" command group: the explicit, always-present home for the AWS backends (Parameter Store, Secrets Manager, and the AWS-only staging workflow).
Package aws provides the "suve aws" command group: the explicit, always-present home for the AWS backends (Parameter Store, Secrets Manager, and the AWS-only staging workflow).
cli/commands/azure
Package azure provides CLI commands for Microsoft Azure, exposed as the "suve azure secret <op>" (Key Vault) and "suve azure param <op>" (App Configuration) command groups.
Package azure provides CLI commands for Microsoft Azure, exposed as the "suve azure secret <op>" (Key Vault) and "suve azure param <op>" (App Configuration) command groups.
cli/commands/azure/param
Package param provides CLI commands for Azure App Configuration, exposed as the "suve azure param <op>" command group.
Package param provides CLI commands for Azure App Configuration, exposed as the "suve azure param <op>" command group.
cli/commands/azure/secret
Package secret provides CLI commands for Azure Key Vault secrets, exposed as the "suve azure secret <op>" command group.
Package secret provides CLI commands for Azure Key Vault secrets, exposed as the "suve azure secret <op>" command group.
cli/commands/gcloud
Package gcloud provides CLI commands for Google Cloud Secret Manager, exposed as the "suve gcloud secret <op>" command group plus the "suve gcloud stage <op>" staging workflow.
Package gcloud provides CLI commands for Google Cloud Secret Manager, exposed as the "suve gcloud secret <op>" command group plus the "suve gcloud stage <op>" staging workflow.
cli/commands/generic/diff
Package diff provides the generic diff command shared by every provider.
Package diff provides the generic diff command shared by every provider.
cli/commands/generic/list
Package list provides the generic list command shared by every provider.
Package list provides the generic list command shared by every provider.
cli/commands/generic/log
Package log provides the generic log command shared by every provider.
Package log provides the generic log command shared by every provider.
cli/commands/generic/show
Package show provides the generic show command shared by every provider.
Package show provides the generic show command shared by every provider.
cli/commands/generic/tag
Package tag provides the generic tag/untag commands shared by every provider (AWS SSM Parameter Store, AWS Secrets Manager, and future providers).
Package tag provides the generic tag/untag commands shared by every provider (AWS SSM Parameter Store, AWS Secrets Manager, and future providers).
cli/commands/internal
Package internal provides shared utilities for CLI commands.
Package internal provides shared utilities for CLI commands.
cli/commands/internal/apptest
Package apptest provides helpers for constructing the CLI app with a deterministic provider-detection result, so command tests do not depend on the ambient environment (which decides the top-level param/secret aliases).
Package apptest provides helpers for constructing the CLI app with a deterministic provider-detection result, so command tests do not depend on the ambient environment (which decides the top-level param/secret aliases).
cli/commands/param
Package param provides CLI commands for AWS SSM Parameter Store.
Package param provides CLI commands for AWS SSM Parameter Store.
cli/commands/param/create
Package create provides the SSM Parameter Store create command.
Package create provides the SSM Parameter Store create command.
cli/commands/param/delete
Package delete provides the SSM Parameter Store delete command.
Package delete provides the SSM Parameter Store delete command.
cli/commands/param/paramopts
Package paramopts builds AWS Parameter Store provider write options from CLI flag values, keeping the flag-to-option mapping in one place shared by the param create and update commands.
Package paramopts builds AWS Parameter Store provider write options from CLI flag values, keeping the flag-to-option mapping in one place shared by the param create and update commands.
cli/commands/param/paramtype
Package paramtype maps between the provider-neutral domain.ValueType and the AWS SSM Parameter Store type names ("String", "SecureString", "StringList") used in CLI output and in the --type flag.
Package paramtype maps between the provider-neutral domain.ValueType and the AWS SSM Parameter Store type names ("String", "SecureString", "StringList") used in CLI output and in the --type flag.
cli/commands/param/update
Package update provides the SSM Parameter Store update command.
Package update provides the SSM Parameter Store update command.
cli/commands/secret
Package secret provides CLI commands for AWS Secrets Manager.
Package secret provides CLI commands for AWS Secrets Manager.
cli/commands/secret/create
Package create provides the Secrets Manager create command.
Package create provides the Secrets Manager create command.
cli/commands/secret/delete
Package delete provides the Secrets Manager delete command.
Package delete provides the Secrets Manager delete command.
cli/commands/secret/restore
Package restore provides the Secrets Manager restore command.
Package restore provides the Secrets Manager restore command.
cli/commands/secret/update
Package update provides the Secrets Manager update command.
Package update provides the Secrets Manager update command.
cli/commands/stage
Package stage provides the global stage command for managing staged changes.
Package stage provides the global stage command for managing staged changes.
cli/commands/stage/apply
Package apply provides the global apply command for applying all staged changes.
Package apply provides the global apply command for applying all staged changes.
cli/commands/stage/diff
Package diff provides the global diff command for viewing staged changes.
Package diff provides the global diff command for viewing staged changes.
cli/commands/stage/param
Package param provides the param stage subcommand for staging operations.
Package param provides the param stage subcommand for staging operations.
cli/commands/stage/reset
Package reset provides the global reset command for unstaging all changes.
Package reset provides the global reset command for unstaging all changes.
cli/commands/stage/secret
Package secret provides the secret stage subcommand for staging operations.
Package secret provides the secret stage subcommand for staging operations.
cli/commands/stage/status
Package status provides the global status command for viewing all staged changes.
Package status provides the global status command for viewing all staged changes.
cli/confirm
Package confirm provides confirmation prompts for destructive operations.
Package confirm provides confirmation prompts for destructive operations.
cli/diffargs
Package diffargs provides shared diff command argument parsing logic for SSM Parameter Store and Secrets Manager.
Package diffargs provides shared diff command argument parsing logic for SSM Parameter Store and Secrets Manager.
cli/editor
Package editor provides functionality for opening external editors.
Package editor provides functionality for opening external editors.
cli/output
Package output handles formatted output for the CLI.
Package output handles formatted output for the CLI.
cli/pager
Package pager provides terminal pager functionality for long outputs.
Package pager provides terminal pager functionality for long outputs.
cli/passphrase
Package passphrase provides passphrase input handling for encryption.
Package passphrase provides passphrase input handling for encryption.
cli/terminal
Package terminal provides terminal-related utilities.
Package terminal provides terminal-related utilities.
debug
Package debug carries an opt-in, SDK-neutral debug switch through the request context.
Package debug carries an opt-in, SDK-neutral debug switch through the request context.
domain
Package domain defines provider-neutral value types shared across every storage backend (AWS SSM, AWS Secrets Manager, and future providers).
Package domain defines provider-neutral value types shared across every storage backend (AWS SSM, AWS Secrets Manager, and future providers).
infra
Package infra provides AWS client initialization.
Package infra provides AWS client initialization.
jsonutil
Package jsonutil provides JSON formatting utilities.
Package jsonutil provides JSON formatting utilities.
maputil
Package maputil provides utilities for working with maps.
Package maputil provides utilities for working with maps.
parallel
Package parallel provides utilities for parallel execution of operations.
Package parallel provides utilities for parallel execution of operations.
provider
Package provider defines the provider-neutral storage seam: the interfaces and opaque reference types that every backend (AWS SSM, AWS Secrets Manager, and future providers) implements.
Package provider defines the provider-neutral storage seam: the interfaces and opaque reference types that every backend (AWS SSM, AWS Secrets Manager, and future providers) implements.
provider/aws
Package aws wires the AWS parameter and secret adapters into a provider.Factory / provider.Registry.
Package aws wires the AWS parameter and secret adapters into a provider.Factory / provider.Registry.
provider/aws/param
Package param implements the provider.Store contract for AWS Systems Manager Parameter Store.
Package param implements the provider.Store contract for AWS Systems Manager Parameter Store.
provider/aws/secret
Package secret implements the provider.Store, provider.Restorer and provider.Describer contracts for AWS Secrets Manager.
Package secret implements the provider.Store, provider.Restorer and provider.Describer contracts for AWS Secrets Manager.
provider/azure
Package azure wires the two Azure adapters into a provider.Factory / provider.Registry:
Package azure wires the two Azure adapters into a provider.Factory / provider.Registry:
provider/azure/appconfig
Package appconfig implements the provider.Store contract (Reader/Writer/Tagger) for Azure App Configuration, confining all App Configuration SDK types to this package.
Package appconfig implements the provider.Store contract (Reader/Writer/Tagger) for Azure App Configuration, confining all App Configuration SDK types to this package.
provider/azure/appconfig/aznamespace
Package aznamespace parses the value of the Azure App Configuration --namespace / --ns flag (env AZURE_APPCONFIG_NAMESPACE).
Package aznamespace parses the value of the Azure App Configuration --namespace / --ns flag (env AZURE_APPCONFIG_NAMESPACE).
provider/azure/keyvault
Package keyvault implements the provider.Store contract (Reader/Writer/Tagger) for Azure Key Vault secrets.
Package keyvault implements the provider.Store contract (Reader/Writer/Tagger) for Azure Key Vault secrets.
provider/detect
Package detect resolves which cloud provider should back the flat `param` / `secret` command aliases (and, later, the GUI's initial provider selection), based purely on environment variables.
Package detect resolves which cloud provider should back the flat `param` / `secret` command aliases (and, later, the GUI's initial provider selection), based purely on environment variables.
provider/gcloud
Package gcloud wires the Google Cloud Secret Manager adapter into a provider.Factory / provider.Registry.
Package gcloud wires the Google Cloud Secret Manager adapter into a provider.Factory / provider.Registry.
provider/gcloud/secret
Package secret implements the provider.Store contract (Reader/Writer/Tagger) for Google Cloud Secret Manager.
Package secret implements the provider.Store contract (Reader/Writer/Tagger) for Google Cloud Secret Manager.
provider/providermock
Package providermock provides a configurable mock implementation of the provider interfaces (Reader/Writer/Tagger/Store) for use in unit tests.
Package providermock provides a configurable mock implementation of the provider interfaces (Reader/Writer/Tagger/Store) for use in unit tests.
staging
Package staging provides staging functionality for AWS parameter and secret changes.
Package staging provides staging functionality for AWS parameter and secret changes.
staging/cli
Package cli provides shared runners and command builders for stage commands.
Package cli provides shared runners and command builders for stage commands.
staging/store
Package store provides storage interfaces and implementations for staging.
Package store provides storage interfaces and implementations for staging.
staging/store/file
Package file provides file-based staging storage.
Package file provides file-based staging storage.
staging/store/file/internal/crypt
Package crypt provides encryption for staging files.
Package crypt provides encryption for staging files.
staging/store/file/internal/keyprovider
Package keyprovider resolves the AES-256 data key used to encrypt the working staging state files (param.json/secret.json).
Package keyprovider resolves the AES-256 data key used to encrypt the working staging state files (param.json/secret.json).
staging/store/testutil
Package testutil provides test utilities for staging package.
Package testutil provides test utilities for staging package.
staging/transition
Package transition implements state machine logic for staging operations.
Package transition implements state machine logic for staging operations.
timeutil
Package timeutil provides timezone-aware time formatting utilities.
Package timeutil provides timezone-aware time formatting utilities.
updatecheck
Package updatecheck provides a notify-only, non-blocking, opt-out check for newer releases of suve on GitHub.
Package updatecheck provides a notify-only, non-blocking, opt-out check for newer releases of suve on GitHub.
usecase/azure
Package azure provides use cases for the two Azure adapters (Key Vault secrets and App Configuration params).
Package azure provides use cases for the two Azure adapters (Key Vault secrets and App Configuration params).
usecase/gcloud
Package gcloud provides use cases for Google Cloud Secret Manager operations.
Package gcloud provides use cases for Google Cloud Secret Manager operations.
usecase/param
Package param provides use cases for SSM Parameter Store operations.
Package param provides use cases for SSM Parameter Store operations.
usecase/secret
Package secret provides use cases for Secrets Manager operations.
Package secret provides use cases for Secrets Manager operations.
usecase/staging
Package staging provides use cases for staging operations.
Package staging provides use cases for staging operations.
version
Package version provides shared version specification parsing logic for SSM Parameter Store and Secrets Manager version specifiers.
Package version provides shared version specification parsing logic for SSM Parameter Store and Secrets Manager version specifiers.
version/azureappconfigversion
Package azureappconfigversion provides version spec parsing for Azure App Configuration (bare key names only).
Package azureappconfigversion provides version spec parsing for Azure App Configuration (bare key names only).
version/azurekvversion
Package azurekvversion provides version spec parsing for Azure Key Vault secrets (name#VERSION~SHIFT).
Package azurekvversion provides version spec parsing for Azure Key Vault secrets (name#VERSION~SHIFT).
version/gcloudversion
Package gcloudversion provides version spec parsing for Google Cloud Secret Manager (name#VERSION~SHIFT).
Package gcloudversion provides version spec parsing for Google Cloud Secret Manager (name#VERSION~SHIFT).
version/internal
Package internal provides shared utilities for version parsing.
Package internal provides shared utilities for version parsing.
version/paramversion
Package paramversion provides version spec parsing for AWS Systems Manager Parameter Store (name#VERSION~SHIFT).
Package paramversion provides version spec parsing for AWS Systems Manager Parameter Store (name#VERSION~SHIFT).
version/secretversion
Package secretversion provides version spec parsing and display helpers for AWS Secrets Manager.
Package secretversion provides version spec parsing and display helpers for AWS Secrets Manager.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL