Build beautiful, modern terminal interfaces in Java
TamboUI brings the power and elegance known from Rust's ratatui, and Python's Textual to Java. Write declarative UIs with CSS styling, build native executables, and create terminal apps that make you proud.
Because terminal UIs shouldn't be an afterthought. They should be a joy to build.
Three API levels: immediate mode for control freaks, TuiRunner for the pragmatic, and Toolkit DSL for the elegant. Pick what fits your style.
Yes, you read that right. Write TCSS files, switch themes at runtime, and separate style from logic. Your designer will thank you.
Compile to native executables with GraalVM for instant startup. Keep writing Java, get native performance. Best of both worlds.
Embrace modern Java features like speed, pattern matching, records, and sealed classes — or run comfortably on Java 8+ with zero compromises.
Tables, charts, lists, gauges, calendars, canvas drawing, image rendering. Plus PicoCLI integration. It's all here, ready to use.
Runs on all platforms that suports Java, including Windows, Linux and MacOS!
Full Unicode support including emoji (🎉 🚀 💻), multicharacters (你好 مرحبا नमस्ते), and ZWJ sequences (👨👩👧👦 👨💻 🏳️🌈).
Built from the ground up—each layer adds power and convenience
Declarative, component-based UI with fluent builders. Automatic focus management, CSS styling, and event routing. Write less, do more.
Use when: Building most applications—fastest path to a working UI
Managed event loop with callbacks. Handles terminal setup, event polling, and redraws. You focus on your logic, not the plumbing.
Use when: You want custom event handling without boilerplate
Direct terminal control. You manage the event loop, drawing, and all state. Perfect for learning how things work or building custom abstractions.
Use when: You want maximum control and speed or you want to create new widgets
Get a beautiful TUI running in minutes. No kidding.
///usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 25+
//DEPS dev.tamboui:tamboui-toolkit:LATEST
//DEPS dev.tamboui:tamboui-panama-backend:LATEST
import dev.tamboui.toolkit.app.ToolkitRunner;
import static dev.tamboui.toolkit.Toolkit.markupText;
void main() throws Exception {
try (var runner = ToolkitRunner.create()) {
runner.run(() ->
markupText("Hello, [red]TamboUI[/red]! Press [blue]q[/] to exit!")
);
}
}
Save as HelloWorld.java and run with jbang HelloWorld.java