Skip to content

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.

Animated tuika application with tabs, activity panels, progress bars, a command palette, text input, and a status bar
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(), &[]);

Type to search…

↑↓ navigate↵ selectEsc close