Appearance
OSC 66 text sizing
OSC 66 is the Kitty text sizing protocol, allowing applications to render text at different sizes (scale 1-7x) and explicitly specify character cell widths. The sequence
ESC ] 66 ; params BEL controls text sizing with s=N for scale factor and w=N for explicit cell width.
This protocol addresses the fundamental character width ambiguity problem — applications can tell the terminal exactly how wide a character should be, rather than relying on potentially inconsistent wcwidth() calculations. Supported by kitty and foot, with Ghostty parsing (but not yet rendering) the sequences.How this is testedautomated
Query text sizing state with
Query text sizing state with
OSC 66;? BEL and check for response. Fallback: send OSC 66;s=2 BEL and verify the sequence is consumed.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 9 of 14 backends (64%)
Terminal Applications
| Terminal | Version | Support | Notes |
|---|---|---|---|
| iTerm2 | 3.6.9 | ✓ yes | Consumed (no query) |
| Ghostty | 1.3.1 | ✓ yes | Consumed (no query) |
| VS Code | ✓ yes | ||
| Warp | ✓ yes | ||
| Cursor | ✓ yes | ||
| Terminal.app | ✓ yes |
Headless Backends
Parser correctness only — a ✓ means the parser accepts the sequence.
| Backend | Version | Support | Notes |
|---|---|---|---|
| vterm | 0.2.0 | ✓ yes | OSC 66 text sizing not implemented |
| Kitty | 0.40.0 | ~ partial | OSC 66 not exposed via Python batch bridge — kitty supports it natively |
| Alacritty | 0.26.0 | ✗ no | OSC 66 text sizing not implemented in alacritty |
| vt100.js | 0.2.1 | ✗ no | Not implemented — pure TypeScript emulator |
| WezTerm | 0.1.0-fork.5 | ✗ no | OSC 66 text sizing not implemented in wezterm |
| xterm.js | 5.5.0 | ✗ no | OSC 66 text sizing not implemented in xterm.js |