TamboUI

TamboUI

TamboUI

Terminals with a little bit of spice😊

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.

Why TamboUI?

Because terminal UIs shouldn't be an afterthought. They should be a joy to build.

🎯

Choose Your Adventure

Three API levels: immediate mode for control freaks, TuiRunner for the pragmatic, and Toolkit DSL for the elegant. Pick what fits your style.

🎨

CSS Styling in the Terminal

Yes, you read that right. Write TCSS files, switch themes at runtime, and separate style from logic. Your designer will thank you.

Native Speed, Java Comfort

Compile to native executables with GraalVM for instant startup. Keep writing Java, get native performance. Best of both worlds.

🛠️

Modern Java, Your Way

Embrace modern Java features like speed, pattern matching, records, and sealed classes — or run comfortably on Java 8+ with zero compromises.

📦

Everything You Need

Tables, charts, lists, gauges, calendars, canvas drawing, image rendering. Plus PicoCLI integration. It's all here, ready to use.

🌍

Works Everywhere

Runs on all platforms that suports Java, including Windows, Linux and MacOS!
Full Unicode support including emoji (🎉 🚀 💻), multicharacters (你好 مرحبا नमस्ते), and ZWJ sequences (👨‍👩‍👧‍👦 👨‍💻 🏳️‍🌈).

Three Layers, One Stack

Built from the ground up—each layer adds power and convenience

High Level

Toolkit

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

Mid Level

TuiRunner

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

Low Level

Immediate Mode

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

Quick Start

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