Expand description
§SLT — Super Light TUI
Immediate-mode terminal UI for Rust. Two dependencies. Zero unsafe.
SLT gives you an egui-style API for terminals: your closure runs each frame, you describe your UI, and SLT handles layout, diffing, and rendering.
§Quick Start
fn main() -> std::io::Result<()> {
slt::run(|ui| {
ui.text("hello, world");
})
}§Features
- Flexbox layout —
row(),col(),gap(),grow() - 30+ built-in widgets — input, textarea, table, list, tabs, button, checkbox, toggle, spinner, progress, toast, separator, help bar, scrollable, chart, bar chart, sparkline, histogram, canvas, grid, select, radio, multi-select, tree, virtual list, command palette, markdown
- Styling — bold, italic, dim, underline, 256 colors, RGB
- Mouse — click, hover, drag-to-scroll
- Focus — automatic Tab/Shift+Tab cycling
- Theming — dark/light presets or custom
- Animation — tween and spring primitives with 9 easing functions
- Inline mode — render below your prompt, no alternate screen
- Async — optional tokio integration via
asyncfeature - Layout debugger — F12 to visualize container bounds
§Feature Flags
| Flag | Description |
|---|---|
async | Enable run_async() with tokio channel-based message passing |
serde | Enable Serialize/Deserialize for Style, Color, Theme, and layout types |
Re-exports§
pub use crate::test_utils::EventBuilder;pub use crate::test_utils::TestBackend;pub use anim::ease_in_cubic;pub use anim::ease_in_out_cubic;pub use anim::ease_in_out_quad;pub use anim::ease_in_quad;pub use anim::ease_linear;pub use anim::ease_out_bounce;pub use anim::ease_out_cubic;pub use anim::ease_out_elastic;pub use anim::ease_out_quad;pub use anim::lerp;pub use anim::Keyframes;pub use anim::LoopMode;pub use anim::Sequence;pub use anim::Spring;pub use anim::Stagger;pub use anim::Tween;pub use buffer::Buffer;pub use cell::Cell;pub use chart::Axis;pub use chart::Candle;pub use chart::ChartBuilder;pub use chart::ChartConfig;pub use chart::ChartRenderer;pub use chart::Dataset;pub use chart::DatasetEntry;pub use chart::GraphType;pub use chart::HistogramBuilder;pub use chart::LegendPosition;pub use chart::Marker;pub use context::Bar;pub use context::BarChartConfig;pub use context::BarDirection;pub use context::BarGroup;pub use context::CanvasContext;pub use context::ContainerBuilder;pub use context::Context;pub use context::Response;pub use context::State;pub use context::Widget;pub use event::Event;pub use event::KeyCode;pub use event::KeyEventKind;pub use event::KeyModifiers;pub use event::MouseButton;pub use event::MouseEvent;pub use event::MouseKind;pub use halfblock::HalfBlockImage;pub use keymap::Binding;pub use keymap::KeyMap;pub use layout::Direction;pub use palette::Palette;pub use rect::Rect;pub use style::Align;pub use style::Border;pub use style::BorderSides;pub use style::Breakpoint;pub use style::Color;pub use style::ColorDepth;pub use style::Constraints;pub use style::ContainerStyle;pub use style::Justify;pub use style::Margin;pub use style::Modifiers;pub use style::Padding;pub use style::Style;pub use style::Theme;pub use style::ThemeBuilder;pub use style::WidgetColors;pub use widgets::AlertLevel;pub use widgets::ApprovalAction;pub use widgets::ButtonVariant;pub use widgets::CommandPaletteState;pub use widgets::ContextItem;pub use widgets::FileEntry;pub use widgets::FilePickerState;pub use widgets::FormField;pub use widgets::FormState;pub use widgets::ListState;pub use widgets::MultiSelectState;pub use widgets::PaletteCommand;pub use widgets::RadioState;pub use widgets::ScrollState;pub use widgets::SelectState;pub use widgets::SpinnerState;pub use widgets::StreamingMarkdownState;pub use widgets::StreamingTextState;pub use widgets::TableState;pub use widgets::TabsState;pub use widgets::TextInputState;pub use widgets::TextareaState;pub use widgets::ToastLevel;pub use widgets::ToastMessage;pub use widgets::ToastState;pub use widgets::ToolApprovalState;pub use widgets::TreeNode;pub use widgets::TreeState;pub use widgets::Trend;
Modules§
- anim
- Animation primitives: tweens, springs, keyframes, sequences, and staggers.
- buffer
- Double-buffer grid of
Cells with clip-stack support. - cell
- Single terminal cell — the smallest unit of the render buffer.
- chart
- Data visualization: line charts, scatter plots, bar charts, and histograms.
- context
- event
- Terminal input events.
- halfblock
- Half-block image rendering for terminals with truecolor support.
- keymap
- layout
- Flexbox layout engine: builds a tree from commands, computes positions,
and renders to a
Buffer. - palette
- rect
- Axis-aligned rectangle type used throughout SLT for layout regions, clipping bounds, and hit-test areas.
- style
- Visual styling primitives.
- test_
utils - Headless testing utilities.
- widgets
- Widget state types passed to
Contextwidget methods.
Structs§
- AppState
- Opaque per-session state that persists between frames.
- RunConfig
- Configuration for a TUI run loop.
Traits§
- Backend
- Rendering backend for SLT.
Functions§
- frame
- Process a single UI frame with a custom
Backend. - run
- Run the TUI loop with default configuration.
- run_
async - Run the TUI loop asynchronously with default configuration.
- run_
async_ with - Run the TUI loop asynchronously with custom configuration.
- run_
inline - Run the TUI in inline mode with default configuration.
- run_
inline_ with - Run the TUI in inline mode with custom configuration.
- run_
with - Run the TUI loop with custom configuration.