Skip to content

TUI Libraries Catalog ​

A breadth-first survey of terminal user interface (TUI) libraries across programming languages. This catalog covers rendering models, architecture patterns, and abstraction levels to inform the design of TUI capabilities for Sparkles.

Focused surveys ​

  • Text sizing: OSC 66 protocol semantics, ten implementation studies, capability negotiation, retained multicell rendering, and a cross-stack Sparkles baseline and proposal. Reviewed September 14, 2026.

Rust ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
RatatuiImmediateApp-driven loopMid-levelActiverepo · docs
CursiveRetainedCallback-basedHigh-levelMaintainedrepo · docs
CrosstermN/A (backend)ImperativeLow-levelActiverepo · docs
TermionN/A (backend)ImperativeLow-levelMaintainedrepo
TermwizImmediateImperativeMid-levelActiverepo
Dioxus TUIRetainedReact-likeHigh-levelExperimentalrepo

Python ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
TextualRetainedCSS + widgetsHigh-levelActiverepo · docs
RichImmediateRender-to-consoleMid-levelActiverepo · docs
UrwidRetainedWidget treeMid-levelMaintainedrepo · docs
npyscreenRetainedForm-basedHigh-levelUnmaintainedrepo
prompt_toolkitRetainedComponent-basedMid-levelActiverepo · docs
curses (stdlib)ImmediateImperativeLow-levelStabledocs

JavaScript / TypeScript ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
InkRetainedReact componentsHigh-levelActiverepo
BlessedRetainedWidget treeHigh-levelUnmaintainedrepo
Neo-blessedRetainedWidget treeHigh-levelLow activityrepo
Terminal KitHybridImperative + widgetsMid-levelMaintainedrepo
Yoga (layout)N/A (layout engine)FlexboxLow-levelActiverepo

Neovim / Lua ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
Snacks.nvimRetained (buffers/windows)Event-driven plugin suiteHigh-levelActiverepo · docs

Go ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
Bubble TeaImmediateElm / MVUMid-levelActiverepo
Lip GlossN/A (styling)Builder patternMid-levelActiverepo
BubblesImmediateMVU componentsMid-levelActiverepo
tviewRetainedWidget treeHigh-levelActiverepo
gocuiRetainedView-basedMid-levelMaintainedrepo
tcellN/A (backend)ImperativeLow-levelActiverepo
Termbox-goN/A (backend)ImperativeLow-levelArchivedrepo

Haskell ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
BrickRetainedPure functional / declarativeHigh-levelActiverepo · docs
VtyImmediateImperativeLow-levelActiverepo

C / C++ ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
NotcursesRetained (planes)Imperative + planesMid-levelActiverepo · docs
ncursesImmediateImperativeLow-levelStabledocs
FTXUIImmediateFunctional componentsMid-levelActiverepo
ImTuiImmediateDear ImGui for terminalMid-levelMaintainedrepo
CDKRetainedWidget-basedHigh-levelMaintaineddocs
Termbox2N/A (backend)ImperativeLow-levelActiverepo

D ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
SconeImmediateImperativeLow-levelArchivedrepo
Arsd terminalHybridImperative + widgetsMid-levelActiverepo
NiceN/A (backend)ImperativeLow-levelUnmaintainedrepo (deleted)

Java / Kotlin ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
LanternaRetainedWidget treeHigh-levelMaintainedrepo
JLineN/A (line editing)ImperativeLow-levelActiverepo
MosaicRetainedCompose-likeHigh-levelActiverepo

Ruby ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
TTYHybridComponent toolkitMid-levelMaintainedrepo
Curses (gem)ImmediateImperativeLow-levelMaintainedrepo

Zig ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
TuileImmediateFunctionalMid-levelArchivedrepo (deleted)
zboxImmediateRatatui-inspiredMid-levelArchivedrepo (deleted)
libvaxisImmediateImperativeLow-levelActiverepo

Nim ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
IllwillImmediateImperativeLow-levelMaintainedrepo
nimboxImmediateTermbox bindingLow-levelUnmaintainedrepo

OCaml ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
NottuiRetainedFunctional reactiveMid-levelMaintainedrepo
Lambda-termRetainedWidget treeMid-levelMaintainedrepo

Clojure ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
ClansiN/A (styling)FunctionalLow-levelMaintainedrepo
clojure-lanternaRetainedWrapperMid-levelUnmaintainedrepo

Scala ​

LibraryRendering ModelArchitectureAbstractionStatusLinks
FansiN/A (styling)FunctionalLow-levelMaintainedrepo

Architectural Taxonomy ​

By Rendering Model ​

ModelDescriptionLibraries
ImmediateApplication redraws entire UI each frame; framework diffs or flushesRatatui, FTXUI, ImTui, Bubble Tea, ncurses
RetainedFramework maintains widget tree; updates propagate automaticallyTextual, Brick, Blessed, Ink, Cursive, tview, Lanterna, Notcurses (planes)
HybridMix of retained state with explicit render callsTerminal Kit, arsd terminal, TTY

By Architecture Pattern ​

PatternDescriptionLibraries
Elm / MVUModel-View-Update loop with messagesBubble Tea, Brick (partially)
React / ComponentDeclarative components with props, reconciliationInk, Dioxus TUI, Mosaic
Pure FunctionalImmutable state, declarative combinatorsBrick, Nottui
Widget TreeMutable tree of widget objectsTextual, Cursive, tview, Urwid, Lanterna, Blessed
ImperativeDirect terminal manipulationncurses, Crossterm, tcell, Termbox
Functional ComponentsStateless functions returning UI treesFTXUI

By Layout Approach ​

ApproachDescriptionLibraries
CSS / FlexboxWeb-inspired box model and flex layoutTextual (CSS subset), Ink (Yoga/flexbox)
Constraint-basedSize constraints flow through widget treeRatatui, Brick, tview
CombinatorsCompositional layout via functional combinatorsBrick (hBox, vBox, padded)
Manual / AbsoluteExplicit coordinates and sizesncurses, Notcurses (planes), Termbox
Declarative SplitsLayout DSL with percentage/fixed splitsRatatui (Layout::default().constraints([...]))

Detailed Studies ​

The following libraries are analyzed in depth:

  • Ratatui — Rust immediate-mode TUI with constraint-based layout
  • Ink — React for the terminal (JavaScript)
  • Textual — CSS-styled retained-mode framework (Python)
  • Bubble Tea — Elm Architecture for terminals (Go)
  • Brick — Pure functional declarative TUI (Haskell)
  • Notcurses — Modern ncurses successor (C)
  • FTXUI — Functional DOM-like components with flexbox layout (C++)
  • Cursive — Retained-mode callback-based view hierarchy (Rust)
  • Mosaic — Jetpack Compose runtime for terminals (Kotlin)
  • Nottui — Incremental computation / functional reactive TUI (OCaml)
  • libvaxis — comptime-powered, allocator-aware terminal library (Zig)
  • tview — Retained widget tree with flex layout (Go)
  • ImTui — Dear ImGui paradigm adapted for terminals (C++)
  • Snacks.nvim — Neovim UI toolkit built on floating windows and layouts

Comparative & Specialized Studies ​

See the Comparison for cross-library synthesis and design recommendations for Sparkles.

See the Tree-View Case Study for a focused analysis of tree-view implementations across 13 libraries, including detailed studies of snacks.nvim, ratatui, Textual, Rich (Python), broot, cursive_tree_view (Rust), and stlab::forest (C++).

See the Table Row/Column-Span Case Study for a focused analysis of how tables represent cell spanning (colspan/rowspan, merged cells) across terminal renderers (cli-table3, npm table, tablewriter, ratatui, FTXUI, ImTui), document/markup systems (HTML, GNU tbl, LaTeX, AsciiDoc, reStructuredText), and GUI grid layouts (CSS Grid, Qt, GTK, Swing, Android, Tk) — distilled into five representation strategies and design principles for a span-capable Sparkles table.

References ​