Skip to content

UTF-8 mouse mode (?1005)

Category: modes · Baseline: rich · Tags: Xterm Extensions · Specification ↗

CSI ? 1005 h/l
DECSET 1005 enables UTF-8 mouse encoding, an early extension that worked around the 223-column limit of legacy X10 mouse reporting by encoding coordinates as UTF-8 multibyte sequences. The sequence is ESC [ ? 1005 h. Mouse reports use the same format as X10 (ESC [ M + button + col + row) but each coordinate byte may be a multibyte UTF-8 character, supporting columns up to 2015. Mode 1005 sits between the legacy X10 encoding (?1000) and the modern SGR encoding (?1006). It was a transitional standard and is rarely used today — applications and terminals have largely standardized on SGR mouse mode, which avoids the parsing ambiguities of UTF-8 (some bytes can collide with control characters or get corrupted by non-UTF-8-aware middleware). Still implemented by xterm and a few derivatives for backwards compatibility.
How this is testedpartial
Send \x1b[?1005h (DECSET 1005), verify the sequence is consumed without breaking subsequent terminal output. Headless backends rarely track this mode, so verification is partial.

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 all 9 tested terminals — universal adoption. Part of the Rich TUI baseline.

Supported by 11 of 14 backends (79%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yesDECRPM: mode reset
Ghostty1.3.1✓ yesDECRPM: mode reset
Terminal.app2.15✓ yesBehavioral: ?1005 accepted
Kitty0.46.2✓ yesBehavioral: ?1005 accepted
VS Code1.113.0? unknown
Warp0.2026.03.18.08.24.03? unknown
Cursor2.6.21? unknown

Headless Backends

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

BackendVersionSupportNotes
Alacritty0.26.0✓ yes
vt100.js0.2.1✓ yes
vterm0.2.0✓ yes
WezTerm0.1.0-fork.5✓ yes
xterm.js5.5.0✓ yes