VisiData
What it is
Section titled “What it is”VisiData (“a terminal interface for exploring and arranging tabular data”) is the maximalist member of this cluster: where csvlens views one CSV and sc-im edits one sheet, VisiData treats every tabular thing — a CSV, a directory, a SQLite database, the list of open sheets itself — as a Sheet, and lets you drill, transform, pivot, and aggregate across a stack of sheets. It’s mature (v3.x, ~9k stars, years of development) and its design vocabulary — typed columns, the sheet stack, metasheets, a command palette — is the richest in the cluster. It’s Python/curses, so not portable, but as an idea inventory for tabular interaction it’s the deepest well here.
Deckline relevance
Section titled “Deckline relevance”- Typed columns with single-character type indicators. Every VisiData column carries a type, shown by a one-character marker, and set by a one-key command:
#int (Shift+I),%float (Shift+Z/%),$currency ($),@date (@),~string (~/Shift+~), plus length/derived types. The marker sits in the column header so the type is visible at a glance without reading values. This is a strong, monochrome-friendly idea for KN-86: a roster/stat table can flag each column’s kind with a single glyph in the header row — no color, no legend, just a character. Pairs with the big-glyph-identity-object pattern from Batch 1 (golazo). - The sheet-stack navigation model. Sheets push and pop like a call stack: open a new view (drill into a cell, build a frequency table, open the columns metasheet) and it pushes onto the stack;
qpops back.Shift+Sshows the sheets stack itself as a sheet you can navigate. This drill-down-and-return idiom is exactly KN-86’sdrill-into/BACKmodel (thedrill-intoFFI primitive + the BACK key on the Ferris Sweep left half per CLAUDE.md). VisiData is the most rigorous reference for nav-stack semantics in the whole inspiration set — every drill is a push, every BACK is a pop, and the stack is itself inspectable. Validates the emulator’stest_nav_stackdesign. - Metasheets — the app’s own state as navigable tables. VisiData renders its columns, its open sheets, its command history as ordinary sheets you can sort/filter/edit. “The system’s own state is just another table” is a deep, very-Lisp idea (homoiconicity for UIs). For KN-86: the deck’s own state (cartridge history bitfield, mission board, reputation ledger per Universal Deck State) could be browsable with the same table cart that browses cart data — one viewer, pointed at deck internals.
- The command palette (
Space→ longname). Beyond keybindings, VisiData exposes every command by a searchable long name, reachable viaSpacethen typing — a discoverability layer over a huge command surface. KN-86’s key budget is tiny (34 keys), so a searchable command surface invoked from TERM/REPL is the right way to expose more verbs than there are keys. Maps onto the REPL + token-prediction (ADR-0009) plan. - The transformation pipeline. Frequency tables (
Shift+F), aggregations, melting/pivoting, derived columns — each transformation produces a new sheet on the stack, so a chain of transforms is a chain of stacked sheets you can step back through. The “every transform is an undoable, inspectable step” model is the right mental model for any KN-86 cart that processes data in stages (a mission generator’s seed→template→instance chain, for example).
Single-color adaptation
Section titled “Single-color adaptation”VisiData does use color (type-tinting, selected rows, error cells), but almost none of its load-relevant structure depends on it — its information architecture is carried by character and position, which is why it adapts cleanly:
- Type indicators are already single characters (
# $ % @ ~), not colors. This is the standout monochrome win: VisiData independently arrived at “encode column type as a glyph in the header,” which is exactly the KN-86 move. Lift directly into the KN-86 Code Page. - Selected rows → inversion. VisiData’s selection (color-highlighted by default) becomes inverted amber-on-black. The selection count shows as a text token in the status line (
12 selected), not a colored badge. - The sheet stack → a breadcrumb / depth indicator. VisiData’s stack is conceptual; on KN-86 render the current depth as a Row-0 breadcrumb (
deck ▸ roster ▸ filter) or a depth counter — position and text, no color. - Status line → Row 0 / Row 24 split. VisiData’s left status (sheet name, cursor) and right status (row counts, progress) map onto KN-86’s Row 0 (status) and Row 24 (action) — already monochrome by design.
- What genuinely relies on color: error-cell tinting and the default selected-row hue. Both reframe to inversion or a marker glyph (
✖for an error cell,▸for a selected row) with no loss of meaning.
The deepest single-color lesson from VisiData: a tabular tool this rich can carry its entire information model on glyph + position + inversion — color is decoration, not structure. That’s the proof case for monochrome KN-86 data carts.
LISP-integration angle
Section titled “LISP-integration angle”VisiData is built on the homoiconic idea KN-86’s Lisp paradigm wants: the system’s own state (columns, sheets, history) is data of the same kind the user manipulates, browsable with the same tools. On KN-86’s Fe VM this is natural — deck state is Lisp data, a table cart over it is a Lisp program, and “browse the deck’s mission board with the same cart that browses cart data” falls out for free. VisiData also exposes Python expressions for derived columns (= to add a column computed by an expression); the KN-86 analog is a derived column defined by a Lisp lambda over the row — the same idea as csvlens’s example-cell filters and sc-im’s @lua cells, generalized to “any column can be a Lisp expression over its siblings.” VisiData is the reference for how far that goes: an entire data-exploration workflow built out of small expressions over tables.
- Batch 8. The cluster’s idea-inventory maximalist — read for the typed-column-indicator vocabulary and the sheet-stack rigor, not for portable code (it’s Python/curses).
- Type-indicator glyphs (
# $ % @ ~) and the sheet-stack-as-push/pop are the two most-borrowable ideas, and both are monochrome-native. - Cross-link csvlens.md — the minimal viewer at the opposite end of the same lineage; VisiData is csvlens + a transformation pipeline + a sheet stack.
- Cross-link sc-im.md — the editing-focused sibling; VisiData is exploration-focused.
- Cross-link the nav-stack model — VisiData’s
drill-into→push /q→pop is the conceptual reference behind the emulator’stest_nav_stackand the BACK-key semantics. - Cross-link logradar.md — VisiData’s frequency tables are the tabular cousin of logradar’s pattern-clustering + sparklines; both turn a stream into a digestible summary.