pcharbon
TermUi - a direct mode terminal user interface framework with components
A direct-mode Terminal UI framework for Elixir/BEAM, inspired by BubbleTea (Go) and Ratatui (Rust).
TermUI leverages BEAM’s unique strengths—fault tolerance, actor model, hot code reloading—to build robust terminal applications using The Elm Architecture.

Features
-
Elm Architecture - Predictable state management with
init/update/view -
Rich Widget Library - Gauges, tables, menus, charts, dialogs, and more
-
Efficient Rendering - Double-buffered differential updates at 60 FPS
-
Themable - True color RGB support (16 million colors)
-
Cross-Platform - Linux, macOS, Windows 10+ terminal support
-
OTP Integration - Supervision trees, fault tolerance, hot code reload
Installation
Add term_ui to your dependencies in mix.exs:
def deps do
[
{:term_ui, "~> 0.1.0"}
]
end
Most Liked
pcharbon
TermUI v0.2.0
New Widgets
Basic Widgets:
- TextInput - Single-line and multi-line text input with cursor movement
Overlay Widgets:
- AlertDialog - Modal dialog for confirmations with standard button configurations
- ContextMenu - Right-click context menu with keyboard and mouse support
Layout Widgets:
- Viewport - Scrollable view with keyboard and mouse support
- SplitPane - Resizable multi-pane layouts for IDE-style interfaces
- TreeView - Hierarchical data display with expand/collapse
Input Widgets:
- FormBuilder - Structured forms with validation and multiple field types
- CommandPalette - VS Code-style command discovery with fuzzy search
Visualization Widgets:
- BarChart - Horizontal/vertical bar charts for categorical data
- LineChart - Line charts using Braille characters for sub-character resolution
- Canvas - Direct drawing surface for custom visualizations
Data Streaming Widgets:
- LogViewer - High-performance log viewer with virtual scrolling and filtering
- StreamWidget - GenStage-integrated widget with backpressure support
BEAM Introspection Widgets:
- ProcessMonitor - Live BEAM process inspection with sorting and filtering
- SupervisionTreeViewer - OTP supervision hierarchy visualization
- ClusterDashboard - Distributed Erlang cluster monitoring
Other Changes
- Added usage_rules for AI assistant integration - see usage_rules | Hex
- Added README documentation for all 25 example directories
- Fixed mouse tracking cleanup on application exit
- Fixed ToastManager rendering
- Improved ContextMenu mouse support and hover highlighting
- Various bug fixes and documentation improvements
pcharbon
Yes unfortunately (or fortunately) you cant see the refresh. The rendering process uses two ETS buffers and only render a diff of the previous buffer and the next. I actually spent time trying to figure out why the refresh did not work haha
Note: you can see the past refresh by changing the theme.
kevinschweikert
I tried the dashboard example and the refresh did not update the view. Would that be caused by
because the state diff is the same?










