Select widget: list of options with keyboard navigation (up/down/enter/esc, ctrl+n/p), case-insensitive substring filter with character-set Jaccard fuzzy fallback, category headers, viewport culling, on-select callback. Fixed from subagent review: - Category filter return-from bug: categories kept in filtered set - Dead trigram code removed (string-trigrams, trigram-score) - Exports cleaned up (removed unused trigram exports) - Character-set Jaccard replaces trigrams (better for short strings) 25 select tests, 100% GREEN. 196 total (27 backend + 58 box + 60 input + 26 scrollbox/tabbar + 25 select)
cl-tui — Reusable Common Lisp Terminal UI Framework
cl-tui
A reusable Common Lisp framework for building rich terminal user interfaces. Built on croatoan (ncurses) with Yoga for Flexbox layout. Provides a component tree model with dirty-tracking, incremental rendering, layered keybinding, theme engine, and full mouse support — the primitives needed to match the TUI quality of Claude Code and OpenCode from Common Lisp.
Why
Common Lisp has no reusable terminal UI framework at the level of Python's Rich/prompt_toolkit or Go's Bubble Tea. Every CL project that wants a terminal UI either builds ncurses from scratch or uses a text-only REPL. cl-tui fills that gap — a component library with Flexbox layout, semantic theming, layered keybinding, and full mouse support. Build a terminal UI once, reuse it everywhere.
Terminal UIs also work over SSH. A Qt or browser-based UI requires a local display. A cl-tui application runs remotely — same code, same components, accessible from anywhere.
Architecture
``` Application code (any CL project) └── cl-tui (layout, components, theme, events, dialogs) └── Yoga (Flexbox layout — C library via FFI) └── croatoan (ncurses terminal rendering) ```
cl-tui depends only on croatoan and Yoga. It is not tied to any application.
Dependencies
- Common Lisp (SBCL tested)
- croatoan — ncurses binding for terminal rendering
- Yoga — Flexbox layout engine (C library, loaded via CFFI)
- Quicklisp libraries as needed (ironclad for hashing, bordeaux-threads)
Status
v0.1.0 — Layout engine (in progress)
See docs/ROADMAP.org for the full release plan.
License
TBD