programs, not demos

Apps built with HQTUI

Ten programs people actually run. They exist partly to keep the library honest: a real application finds the gaps a widget gallery does not, and several of these have already changed HQTUI — styled spans, collapsed borders and the braille metrics in these very screenshots all came from building one of them.

Every screenshot is rendered by HQTUI itself and captured at 2x — the same pipeline as the demo shots, so what you see is the frame the terminal draws.

r3q

A REST client for your terminalsource ↗

Requests are .http files you commit, so they diff and review with the code they belong to. {{VARS}} resolve from a gitignored .env, so the file holds the template and the secret stays on your machine. The response pane shows the whole exchange: status, timing, size, headers and a highlighted body.

r3q
r3q — A REST client for your terminal
bunx @profullstack/r3q ~/api

What it found: The JSON highlighting needed more than one colour on a line, which the library could not do. That became styled spans in 0.3.0.

g1tz

A git TUI that shows you the repositorysource ↗

Files, branches and log down the left; the diff for whatever is selected on the right. Changed lines emphasise the words that actually differ, rather than turning the whole line green. Reads git through porcelain formats with -z, because parsing output meant for humans is how a TUI corrupts a working tree. Press p for Pulse: what moved in the repository over a day, a week, a month or ever, from git alone, from GitHub through gh when it is logged in, and from a gh-pulse report when one is on the machine.

g1tz
g1tz — A git TUI that shows you the repository
g1tz pulse
g1tz Pulse — what moved in the repository over the last week

The Pulse screen: commits, authors and the files that changed from git; pull requests, issues, releases and stars from GitHub; views and clones from gh-pulse. The range buttons are clickable.

bunx @profullstack/g1tz

What it found: Word-level diff highlighting is the same span work as r3q, from the opposite direction: emphasis inside a line that already has a colour. Pulse is why it moved to 0.6.0: buttons, key-value rows, a histogram, sparklines and a spinner on one screen, and hqtui's focus navigation turned out to fire Enter on the first button of an app that handles its own keys.

nixamp

It really whips the terminal's asssource ↗

One decode feeds both the speakers and the display: ffmpeg writes raw samples to a pipe, nixamp reads every one on its way past, runs an FFT over it, and hands the same bytes to the output. Bands are logarithmic and scaled in decibels, because hearing is. Bars rise instantly and fall gradually, with a peak marker that sinks.

nixamp
nixamp — It really whips the terminal's ass
bunx nixamp ~/Music

What it found: The analyser is drawn on the braille canvas — four vertical pixels per character cell, which is why the bars move smoothly instead of stepping through eight block glyphs.

diskpush

Two panes and an rsync between themsource ↗

Local on one side, an SSH host on the other, and a transfer panel that shows the plan before it runs and every path as it lands. rsync does the work; the interface exists so you can see what it is about to do. The installer puts diskpush on your PATH.

diskpush
diskpush — Two panes and an rsync between them
curl -fsSL https://diskpush.com/install.sh | sh

What it found: The transfer panel updates several times a second against a full file listing, which is where a renderer that diffs frames stops being an optimisation and starts being the reason it is usable.

ThreatCrush

A security daemon you can watchsource ↗

Modules, a live event feed, top threats and a severity breakdown, fed by a daemon over a unix socket. When no daemon is running it says so and tells you how to start one, rather than filling the screen with invented attacks.

ThreatCrush
ThreatCrush — A security daemon you can watch
npx @profullstack/threatcrush tui

What it found: Rendering to a buffer made three header and truncation defects into ordinary failing tests. They had been invisible because the old build wrote escape codes straight to stdout.

CoinPay

A merchant's money, in one screensource ↗

Earnings, bank position and pipeline across seven screens, with a live payment feed over server-sent events. Bank syncs are a keypress, never automatic — the bridge allows about 24 pulls a day.

CoinPay
CoinPay — A merchant's money, in one screen
npx @profullstack/coinpay finances

What it found: Every figure here is a fixture. It is the one app on this page whose real screen cannot be published, which is its own kind of design constraint.

myna

Post once, everywheresource ↗

Compose in the terminal and publish to every network you have connected, with per-network character counts and thread splitting shown as you type. Credentials live in an encrypted vault the interface never reads.

myna
myna — Post once, everywhere
curl -fsSL https://mynaposter.com/install.sh | sh

What it found: The screen had to be lifted out of the app loop to be captured at all. That refactor is what made its layout testable, which it had never been.

logicsrc

Team vaults, without the plaintextsource ↗

Which vaults exist, what their secrets are called, who can decrypt them and what changed. It never fetches a decryption key and has no keybinding that would: a value that can appear on screen can appear in a screen share.

logicsrc
logicsrc — Team vaults, without the plaintext
curl -fsSL https://logicsrc.com/install.sh | sh

What it found: Being metadata-only is why this is the one screenshot here taken from something close to a real shape without redaction.

tsbb

A message board in your terminalsource ↗

Forums, topics, threads, search and notifications against any tsbb board. Unread, solved and locked are glyphs in the margin rather than colours alone, so the list still reads on a terminal with no colour at all.

tsbb
tsbb — A message board in your terminal
git clone https://github.com/profullstack/tsbb && cd tsbb && pnpm install && node apps/tui/bin/tsbb-tui.mjs bbs.hqtui.com

What it found: Its views were pure functions of state from the start, which is why the whole client is asserted on as text rather than described in a test.

nmaptui

An admin console for nmapsource ↗

Eighteen scan profiles and a form for every nmap option that matters, with the exact command shown before it runs. nmap's XML is read as it streams, so tasks, percent and finished hosts appear while the scan is still going. Hosts, services and a findings triage list follow, every scan is kept, and any two can be diffed or exported as text, JSON, CSV, Markdown or HTML.

nmaptui
nmaptui — An admin console for nmap
curl -fsSL https://raw.githubusercontent.com/profullstack/nmaptui/main/install.sh | sh

What it found: Its screens are pure functions of one state object, so the test suite renders the real frames headlessly and asserts on the text. A meter with a leading track bar and a panel subtitle that ate its title both showed up that way, in a test, before anyone opened a terminal.

Built something?

Open a pull request adding a scripts/showcase.ts to your repository that exports the frames you want captured, and a section here. The capture script takes application directories as arguments, so nothing about your layout has to be committed to this one.

bun apps/web/scripts/app-shots.ts ~/src/your-app