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.How this is testedautomated
Send a minimal Kitty graphics payload (
Send a minimal Kitty graphics payload (
ESC_P G ... ESC \) and check for an acknowledgment response.The same probe runs against headless backends (via Termless) and real terminal apps (via a daemon launched in each terminal). This lets us distinguish parser correctness from rendering correctness.
Analysis2026-04-06
Supported by 6 of 12 terminals (50%). Part of the Rich TUI baseline.
Supported by 7 of 14 backends (50%)
Terminal Applications
| Terminal | Version | Support | Notes |
|---|---|---|---|
| iTerm2 | 3.6.9 | ✓ yes | |
| Ghostty | 1.3.1 | ✓ yes | |
| Warp | ✓ yes | ||
| Terminal.app | ✓ yes | ||
| VS Code | ✗ no | ||
| Cursor | ✗ no |
Headless Backends
Parser correctness only — a ✓ means the parser accepts the sequence.
| Backend | Version | Support | Notes |
|---|---|---|---|
| Kitty | 0.40.0 | ✓ yes | |
| vterm | 0.2.0 | ✓ yes | |
| Alacritty | 0.26.0 | ✗ no | Not implemented in alacritty ↗ upstream |
| vt100.js | 0.2.1 | ✗ 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 |
Sub-features
This feature has 4 individually testable sub-features.
| Sub-feature | iTerm2 | Ghostty | VS Code | Warp | Cursor | Terminal.app |
|---|---|---|---|---|---|---|
| Kitty graphics: animation | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Kitty graphics: display | ✓ | ✓ | ✗ | ✓ | ✗ | ✓ |
| Kitty graphics: transmit | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Kitty graphics: Unicode placeholders | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ |