Using TUI¶
--tui launches a keyboard-driven terminal UI over the same use cases as the CLI and GUI. It is pure Go (no GTK/WebKit) and ships in every build. The provider and scope are fixed for the session at launch — switch provider by relaunching.
Launch forms:
suve --tui # only when exactly one provider is active (see Bare Aliases)
suve aws --tui # explicit provider group (always available)
suve gcloud --tui
suve azure --tui
suve aws param --tui # a service subgroup preselects that tab (Parameter Store)
suve azure secret --tui # opens on the Key Vault tab
- Unique-provider rule: bare
suve --tuifollows the same detection as the bare aliases — it launches only when exactly one provider is active across the union of the param/secret/stage axes (AWS is also accepted via~/.aws/credentialsor~/.aws/config, or an ambient-credential variable in a cloud shell — see Cloud Shell Support). With two or more active, it lists the explicitsuve <group> --tuiforms instead; there is no silent priority. - Scope / env: the TUI consumes the same scope inputs as the CLI —
GOOGLE_CLOUD_PROJECTfor Google Cloud,--vault-name/AZURE_KEYVAULT_NAMEand--store-name/AZURE_APPCONFIG_NAME(plus--namespace/AZURE_APPCONFIG_NAMESPACE, which the App Configuration tab's namespace filter starts on; an OR-list or prefix wildcard starts it on all namespaces) for Azure. AWS uses the ambient shared config. A flag wins over its env var, including an explicit empty--namespace ""(the default namespace). - Azure tab gating: the App Configuration (param) and Key Vault (secret) tabs appear only for the services the launch scope resolves — set
--vault-namefor the Key Vault tab,--store-namefor the App Configuration tab, either or both as needed. The Staging tab is always present. - Shared staging area: staged edits made in the TUI use the same per-scope staging store as the CLI/GUI, so
suve stage statussees them andstage applyfrom either side applies the same working set. - The TUI adds no new commands and does not cover export/import (use the CLI/GUI for those). It requires an interactive terminal (a TTY on stdin and stdout).
Keymap (the in-app ? toggles full help, which is the source of truth):
| Scope | Key | Action |
|---|---|---|
| Global | ? |
toggle help |
| Global | q / ctrl+c |
quit |
| Global | tab / shift+tab |
next / previous tab |
| Global | 1 2 3 |
jump to tab |
| Global | ↑/k, ↓/j |
move selection |
| Global | enter |
select / open detail |
| Global | esc |
back / close |
| Global | y |
copy value to the clipboard (the on-screen value stays masked) |
| Browser | p / / |
edit prefix / filter |
| Browser | v |
toggle value display |
| Browser | r |
recursive toggle (Parameter Store) / refresh |
| Browser | [ / ] |
narrow / widen the list pane |
| Browser | x |
reveal a masked value |
| Browser | c, space, enter |
compare mode: toggle, pick a version, open diff |
| Browser | space |
pick namespace (App Configuration) |
| Browser | n / e / d / t / R |
new / edit / delete / tag / restore |
| Compare / Diff | ↑/↓ |
scroll the diff |
| Compare / Diff | s |
toggle side-by-side / unified layout |
| Compare / Diff | x |
hide / show a secret diff's values |
| Staging | v |
toggle diff / value view |
| Staging | e / u / t |
edit staged / unstage (entry + tags) / add or remove staged tags |
| Staging | x |
reveal / hide the selected row's value |
| Staging | enter |
open the full-diff detail |
| Staging | a / A |
apply this section / apply all |
| Staging | r / R |
reset this section / reset all |
| Staging | ctrl+r |
refresh |
| Dialogs (create / edit) | tab / shift+tab |
move between fields |
| Dialogs (create / edit) | enter |
next field; inserts a newline in the multi-line Value / Description; submits on the [ OK ] button |
| Dialogs (create / edit) | ctrl+o |
open the Value or Description in $EDITOR |
| Dialogs | esc |
cancel (press twice to discard an edited form) |
JSON values are always pretty-printed automatically (parity with --parse-json), so there is no format toggle. Mutations are staged by default where the backend supports staging: completing a create, edit, or delete opens a Stage / Apply confirmation popup (←/→ choose, enter confirms, esc returns to the form); on a backend without staging the write is always immediate. Operation markers and unsupported controls follow each backend's capabilities. Rendering honors NO_COLOR and degrades gracefully on narrow terminals.