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.

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++).

References