kittui

in the browser

kittwm in a browser tab

The same window manager compiles to WebAssembly and draws with the GPU through WebGPU. A tab can attach to a kittwm host you run, speak SSH to a machine by itself, or boot a whole Linux guest with no server at all.

Live demos

WebGPU requiredThe demos need a browser with WebGPU, such as a current Chrome or Edge. Without it they show a red banner explaining why they could not start, rather than a blank page.

Three ways in

Three ways to run kittwm in a tabIn every case the browser runs kittwm compiled to WebAssembly and draws it with WebGPU. In the first, the tab connects over a WebSocket, with a bearer token, to a native host running kittwm serve-pty or serve-session, which owns the terminals. In the second, the tab itself speaks SSH, compiled to WebAssembly, through a WebSocket relay to an SSH server, pinning host keys on first use and keeping secrets in an encrypted vault. In the third, there is no server at all: a v86 x86 emulator boots a small Linux guest inside the tab, and kittwm runs inside it. browser tab kittwm · WebAssembly drawn with WebGPU host client token over WebSocket SSH in the tab TOFU pins · vault v86 microVM Linux guest + kittwm native host kittwm serve-pty or serve-session relay WebSocket SSH server any host no network needed: everything runs in the page
One web shell, three backends.The tab always runs the same kittwm build and the same renderer; only where the windows live changes.

Attach to a host

A native kittwm serves its terminals over a WebSocket, guarded by a bearer token:

kittwm serve-pty --listen 127.0.0.1:8787 --token "$(openssl rand -hex 16)" --cols 80 --rows 24

Then open the web shell with ?ws=ws://127.0.0.1:8787#token=token. The token sits in the address fragment, which browsers never send to a server, or it can be typed into the in-canvas login prompt.

SSH in the tab, safely

For a machine with plain SSH, the tab runs an SSH client compiled to WebAssembly. A small relay near the target bridges the browser's WebSocket to TCP:

kittwm ws-ssh-relay --listen 127.0.0.1:8822 --ssh-target host:22

A browser has no known_hosts file and cannot stop a handshake to ask a question, so the web shell brings its own trust model:

Trust on first use
The first host key seen for a host is pinned. A different key later stops the connection behind a security overlay instead of continuing.
An encrypted vault
Pins and private keys persist in the browser only inside an AES-GCM-encrypted vault. Key passphrases are asked for at connect time and never stored.
No silent failures
No reachable backend, a GPU failure, a slow start, an authentication problem and a host-key mismatch each have a distinct message.

A Linux guest in the tab

The microVM demo needs no network at all. The page loads the v86 x86 emulator, boots a small Linux kernel and an initial ramdisk containing an i686 build of kittwm, and connects the web shell to kittwm serve-screen running inside the guest through an in-page network shim. It is slower than a real host, but it is a complete, isolated kittwm that anyone can try.

Every surface

SurfaceRun it with
Native, in a terminalkittwm in any kitty-protocol terminal
Scripts and agentskittwm commands, the socket, events and session files (see Automation)
Browser, one screenkittwm serve-pty and the web shell
Browser, every windowkittwm serve-screen --real-wm --per-window
Browser to SSHkittwm ws-ssh-relay and ?connect
Browser aloneThe microVM page