tuika
Rust terminal application framework
Layout, overlays, focus, keymaps, components, and terminal lifecycle over ratatui.
Complete example
One rendered screen.
Tabs, activity, progress, overlays, text input, and a status bar composed with the public component and layout APIs.
Rendering model
Views become cells.
Your application keeps its state. Each frame, tuika solves layout, composites overlays, and paints a deterministic buffer. ratatui handles the terminal diff.
- No hidden reconciler or retained UI tree.
- Selection, scroll, focus, and input state stay in your structs.
- Third-party ratatui widgets compose through
RatatuiView. - Render tests use an in-memory buffer, not a terminal.
use tuika::prelude::*;
let screen = view! {
col(gap = 1) {
fixed(1) { node(Spinner::new(frame)) }
grow(1) { node(Markdown::new(body)) }
fixed(1) { node(StatusBar::new(left, right)) }
}
};
paint(buffer, area, &theme, screen.as_ref(), &[]);Documentation
Guides.
The pages below are rendered directly from this repository’s docs/ directory.
Getting startedBuild and run a complete first application.→ComponentsEvery component, with a recorded demo.→LayoutFlex, Flow, Grid, and measurement.→MarkdownStreaming CommonMark, code, tables, and images.→KeymapChords, sequences, layers, and help surfaces.→StylingThemes, semantic roles, and stylesheets.→Terminal featuresGraphics, clipboard, links, mouse, and screen modes.→