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.
kittui render. Every picture of kittui output on this site is made the same way.What ships
- kittui-sdkOrdinary Ratatui text with Kitty-graphics surfaces, materials, borders, chips and images.
- kittui crate
Runtime,Sceneand builders; cached scenes are placed again without re-rendering. - C ABI and bindings
libkittui_ffiwith TypeScript and Python wrappers. - kittui CLIBoxes, gradients, glows, panels and chrome from the shell, composable through pipes; an MCP server too.
- kittwmA window manager of terminals, browsers, remote X11 and Wayland, macOS and Windows windows.
- kittwm in the browserThe same window manager in WebAssembly and WebGPU, including a whole Linux guest in the tab.
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 needed kittui 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.