tui-tools

The shared foundation

tui-kit

The palette, the widgets, the configuration loader and the command runner that make every tool in the family look and behave the same. It is a library, not a tool, which is why it has no card in the marketplace.

Add it to a Go module
$ go get github.com/tui-tools/tui-kit@v0.1.2

Dependencies are deliberately small: Bubble Tea, Bubbles and Lip Gloss, nothing else. Configuration and palette files are read by a forty-line parser rather than a TOML library.

What is in it

PackageWhat it gives you
themeThe Tokyo Night palette, Omarchy theme detection, NO_COLOR, and a ready-made set of Lip Gloss styles
uiHeader, table, help bar, help screen, status line, and the confirm / input / picker dialogs
config/etc/<tool>/config.toml + ~/.config/<tool>/config.toml + environment, in that order
runnerPreview → confirm → run, including privilege escalation, timeouts and a fake for --demo and tests

Where the promise lives

The family's one promise — the command in the dialog is the command that runs — is kept in runner, and only there. A tool builds a runner.Command: an argv plus a description. It shows it with ui.Confirm. On yes, it handsthat same value back to the runner.

Because Preview and Run consume one value, the text in the dialog is guaranteed to be what executes. No tool in the family assembles a shell string, and none of them needs to be trusted to get this right individually.

runner.Fake is the other half. It records what it was asked to run and answers from a canned table, which is what makes--demo honest and what tests assert against: press a key, then check that the fake holds exactly one command with exactly the argv the preview showed.

Also in the repository

  • schema/tool.schema.json — the manifest this website is built from, andits documentation.
  • tools/render-install.py — renders a tool README's Install section from that manifest, so the README and this site cannot disagree.
  • tools/render-screenshots.py — renders a tool's README frames from the real binary in --demo, under a pseudo-terminal. Every screenshot on this site came out of it.
  • templates/ — the CI workflow and the GoReleaser configuration a new tool starts from.
  • assets/branding/ — the family mark, per-tool icons and the lockups, all generated.

Adding a tool to the family

Press Use this template ontui-template, which is a working tool rather than a pile of TODOs. Rename it, replace one package with your subject, fill in tool.json, re-render the screenshots, and tag v0.1.0.

This site picks the tool up on its next build — hourly, or immediately when the release workflow tells it a release shipped. Nothing here is edited by hand to add a tool.