etui

Values

pub const version: String

etui, TUI library for Gleam.

Correct Unicode, minimal diff, no terminal left broken.

Quick start

import etui/app
import etui/backend
import etui/backend/default
import etui/buffer
import etui/geometry.{rect_new}

pub fn main() {
  let _ = app.run_buffered(
    default.new(),
    Nil,
    fn(_state, screen) { buffer.buffer_new(screen) },
    fn(ev, state) { case ev { backend.KeyPress("q") -> state _ -> state } },
    fn(_) { False },
    16,
  )
}

Module map

ModulePurpose
etui/appApplication event loop (run, run_buffered, run_animated, run_buffered_cursor)
etui/backendTerminal event types and render ops
etui/backend/defaultPlatform-selecting backend (new() works on Erlang and JS)
etui/bufferCell grid storage, Unicode-aware rendering, diff output
etui/geometryLayout math: Rect, Constraint, split, resolve_sizes
etui/styleColors (Default / Indexed / Rgb), modifiers, ANSI sequences
etui/textGrapheme cluster width, truncate, pad, Unicode-correct
etui/spanInline styled text (Span, Line)
etui/keysKey name constants and match/1 for pattern-based dispatch
etui/keymapCommand-table key dispatch with help-text generation
etui/themeBuilt-in colour themes (Dracula, Nord, Catppuccin, Monokai, …)
etui/animAnimation helpers: lerp, easing, oscillate, keyframe sequences
etui/cursorHardware cursor ANSI sequences (show/hide/move/shape)
etui/focusFocus-ring for multi-panel UIs
etui/undoGeneric undo/redo history stack
etui/colorRGB interpolation, gradients, hue-to-RGB

Widgets

All stateless unless noted; stateful widgets store state externally.

WidgetModule
Block / borderetui/widgets/block
Paragraph (text)etui/widgets/paragraph
Scrollable listetui/widgets/list (stateful)
Table / gridetui/widgets/table (stateful)
Tree viewetui/widgets/tree (stateful)
Single-line inputetui/widgets/input (stateful)
Multi-line textareaetui/widgets/textarea (stateful)
Form (multi-field)etui/widgets/form (stateful)
Tabsetui/widgets/tabs
Dialogetui/widgets/dialog (stateful)
Notificationetui/widgets/notification
Status baretui/widgets/statusbar
Progress baretui/widgets/progress
Horizontal baretui/widgets/hbar
Gradient baretui/widgets/gradient_bar
Scrollbaretui/widgets/scrollbar
Spinneretui/widgets/spinner
Marqueeetui/widgets/marquee
Scroll viewetui/widgets/scroll_view (stateful)
Canvas (pixel)etui/widgets/canvas
Braille graphicsetui/braille
Chartetui/widgets/chart
Scene (composition)etui/widgets/scene
Clearetui/widgets/clear
Paginatoretui/widgets/paginator
Help (key bindings)etui/widgets/help
Fieldsetetui/widgets/fieldset
MultiSelectetui/widgets/multi_select (stateful)
Search Document