Styled text
Color, emphasis, links, and terminal-aware rendering without an event loop.
let text = StyledText::new(
"Build complete",
TextStyle::new().bold(),
);
urushi::println(&text)?;01 Rust terminal UI library
Urushi is a UI library for Rust terminals. Style plain output, build interactive prompts, or build a full-screen TUI on one shared presentation foundation.
Different interfaces.
One underlying model.01 / SURFACES
Choose the surface that fits the application. Urushi keeps styling, composition, and terminal behavior coherent across all of them.
Color, emphasis, links, and terminal-aware rendering without an event loop.
let text = StyledText::new(
"Build complete",
TextStyle::new().bold(),
);
urushi::println(&text)?;Opinionated CLI presentations, beginning with structured summaries and warnings.
let view = cli.summary(
&Summary::new("Done")
.field(
"Output",
"app",
),
);Theme-aware input, selection, confirmation, and validation flows.
let field = Input::new(
FieldKey::new("name"),
"What is your name?",
"",
)?;A runnable TEA-style application runtime, plus a separate adapter for applications that already own a Ratatui loop.
fn view(
&self,
model: &Model,
) -> View {
status_view(model)
}02 / FOUNDATION
Plain output, prompts, and TUIs own different kinds of interaction. Urushi keeps their lifecycle ownership distinct while sharing the presentation decisions that should stay consistent.
Success, warning, focus, and other roles mean the same thing on every surface.
Components produce renderer-neutral views instead of terminal-specific output.
The same box model and CJK-aware width rules resolve each view.
03 / START
Begin with the core crate, then add CLI presentation, prompts, graphics, or full-screen support as the application requires. Run a TEA application with urushi_tui_app::run, or add Urushi views to an existing Ratatui loop through the adapter.
cargo add urushi