Skip to content

OSC 66 text sizing

Category: extensions · Baseline: rich · Tags: Operating System Commands (OSC), Kitty Extensions · Specification ↗

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 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 8 of 12 terminals (67%). Not supported by: vt100.js, Alacritty, WezTerm, xterm.js. Part of the Rich TUI baseline.

Supported by 9 of 14 backends (64%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yesConsumed (no query)
Ghostty1.3.1✓ yesConsumed (no query)
VS Code✓ yes
Warp✓ yes
Cursor✓ yes
Terminal.app✓ yes

Headless Backends

Parser correctness only — a means the parser accepts the sequence.

BackendVersionSupportNotes
vterm0.2.0✓ yesOSC 66 text sizing not implemented
Kitty0.40.0~ partialOSC 66 not exposed via Python batch bridge — kitty supports it natively
Alacritty0.26.0✗ noOSC 66 text sizing not implemented in alacritty
vt100.js0.2.1✗ noNot implemented — pure TypeScript emulator
WezTerm0.1.0-fork.5✗ noOSC 66 text sizing not implemented in wezterm
xterm.js5.5.0✗ noOSC 66 text sizing not implemented in xterm.js