Amr Gharbeia 3e0268c982 Initial commit: cl-tui — Reusable Common Lisp Terminal UI Framework
Layout engine (Yoga FFI), renderables (Box, Text), rendering engine,
theme engine, TextInput/Textarea, ScrollBox/TabBar, Select, Markdown/Code/Diff,
dialog system, mouse support, plugin/slot system.
2026-05-11 06:48:20 -04:00

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

Description
Reusable Common Lisp Terminal UI Framework
Readme GPL-3.0 1.8 MiB
Languages
Common Lisp 58.5%
Python 36.2%
Shell 5.3%