Appearance
Kitty graphics protocol
The Kitty graphics protocol enables inline image display in the terminal using a structured escape sequence format. Unlike Sixel, which encodes pixel data as ASCII characters, Kitty graphics transmits images as base64-encoded PNG, RGB, or RGBA data via APC (Application Program Command) sequences.
Images are sent with
ESC_G <control data> ; <payload> ESC \. Large images are split into chunks using the m=1 flag for continuation. The protocol supports placement (positioning images relative to cells), virtual image references (transmit once, display many times), animation frames, and z-layering. Each image gets a numeric ID, and Unicode placeholder characters allow images to participate in text layout and scrollback.
Compared to Sixel, the Kitty protocol offers higher fidelity (full 32-bit RGBA), streaming, and compositing — but requires explicit terminal support. Adopted by Ghostty, WezTerm, and Konsole.Supported by 2 of 6 backends (33%)
Support Matrix
| Backend | Version | Support | Notes |
|---|---|---|---|
| Ghostty | 1.3.1 | ✓ yes | |
| Kitty | 0.40.0 | ✓ yes | |
| Alacritty | 0.26.0 | ✗ no | Not implemented in alacritty ↗ upstream |
| vt100 | 0.1.0 | ✗ no | Not implemented — pure TypeScript emulator |
| WezTerm | 0.1.0-fork.5 | ✗ no | Not implemented in wezterm-term crate |
| xterm.js | 5.5.0 | ✗ no | Not implemented in xterm.js |