Skip to content

CSI u Key Encoding

Category: input · Baseline: modern · Tags: Xterm Extensions · Specification ↗

The fixterms/CSI u encoding reports keypresses as CSI codepoint ; modifiers u sequences. This was the precursor to the Kitty keyboard protocol and provides unambiguous key identification for terminal applications. CSI u came from the 'fixterms' effort to repair ambiguous keyboard input without replacing the whole terminal protocol. It reports Unicode code points plus modifiers, making Ctrl-I distinguishable from Tab and Ctrl-M from Enter. Kitty's keyboard protocol is the richer successor, but CSI u remains an important compatibility step.
How this is testedautomated
Query keyboard mode flags and check if the terminal supports CSI u encoding for key events.

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-05-17

Supported by 10 of 12 terminals (83%). Not supported by: vt100.js, xterm.js. Part of the Modern TUI baseline. Notes: vt100.js: CSI u keyboard protocol not implemented; xterm.js: CSI u keyboard protocol not implemented.

Supported by 12 of 14 backends (86%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yes
Ghostty1.3.1✓ yes
VS Code✓ yes
Warp✓ yes
Kitty0.46.2✓ yes
Cursor✓ yes
Terminal.app✓ yes

Headless Backends

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

BackendVersionSupportNotes
Alacritty0.26.0✓ yes
vterm.js0.2.0✓ yes
WezTerm0.1.0-fork.5✓ yes
vt100.js0.2.1✗ noCSI u keyboard protocol not implemented
xterm.js5.5.0✗ noCSI u keyboard protocol not implemented