kittui

kittui · kittwm

Real graphics in the terminal, and a window manager built from them.

kittui renders rounded panels, gradients, glows, chrome and images into any terminal that speaks the kitty graphics protocol, from Rust, C, TypeScript, Python or the shell. kittwm uses it to compose terminals, browsers and native desktop windows into one window manager that runs in a terminal, or in a browser tab.

A dark workspace with three glowing windows: a cyan terminal with lines of text, a violet pane with a bar chart in violet-to-pink gradients, and a mint pane with three pill chips, a progress gauge and text lines.
Rendered by kittui.Not a mock-up: this is a scene, written as JSON, rendered by kittui render. Every picture of kittui output on this site is made the same way.

What ships

Start

From a checkout of the repository, with Nix:

nix run .#kittui-showcase       # the SDK studionix profile install .#kittwm    # kittwm and its helperskittwm quickstart               # first-run checklistkittwm                          # then Ctrl-A Enter for a terminal

Or draw something straight from the shell, in a kitty-protocol terminal:

kittui box -w 60 -h 8 --fg "#00d8ff" --bg "#08111fcc" --radius 6# or render to a PNG, no terminal neededkittui box -w 24 -h 4 --scene-json | kittui render - --out preview.png

Or open a live demo in a browser with WebGPU.

Built for speed

The renderer is shaped by a few rules that make graphics cheap enough for a window manager redrawing many times a second:

Content-addressed images
An image's id is a hash of what it looks like. Identical scenes are never uploaded twice, anywhere.
Upload once, place cheaply
Once uploaded, an image can be shown again at any position with a placement escape of a few dozen bytes. A cache hit does no rendering at all.
No animation traffic
Animations are uploaded frame by frame once, then looped by the terminal itself, so a thousand pulsing panels cost the same as one.
Diffs, not draws
Hosts describe what should be on screen; kittui computes the minimal uploads, placements and deletions.
Two renderers, one answer
The CPU renderer is the reference. The GPU renderer is for throughput, and is checked against the CPU renderer before it is trusted.