Skip to content

Using TUI

TUI Demo

--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 --tui follows 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/credentials or ~/.aws/config, or an ambient-credential variable in a cloud shell — see Cloud Shell Support). With two or more active, it lists the explicit suve <group> --tui forms instead; there is no silent priority.
  • Scope / env: the TUI consumes the same scope inputs as the CLI — GOOGLE_CLOUD_PROJECT for Google Cloud, --vault-name / AZURE_KEYVAULT_NAME and --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-name for the Key Vault tab, --store-name for 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 status sees them and stage apply from 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.