Skip to content

Curly underline (SGR 4:3)

Category: sgr · Baseline: modern · Tags: Kitty Extensions · Specification ↗

ESC [ 4:3 m
SGR 4:3 draws a wavy/curly underline beneath text, using the ECMA-48 colon sub-parameter syntax: ESC [ 4:3 m. This underline style was introduced by Kitty and is commonly used by editors and IDEs to indicate spelling errors, lint warnings, or diagnostic information — similar to the red squiggly underline in graphical editors. Combine with SGR 58 (underline color) to set the underline color independently of the text color, e.g., red curly underline under normally-colored text for errors. Adopted by Ghostty, WezTerm, foot, and other modern terminals. Reset with SGR 24.
How this is testedautomated
Send \x1b[4:3mX (colon sub-parameter syntax), verify underline === "curly".

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 11 of 12 terminals (92%). Not supported by: vt100.js. Part of the Modern TUI baseline. Notes: vt100.js: Not in VT100/VT220 — only single underline supported.

Supported by 13 of 14 backends (93%)

Terminal Applications

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

Headless Backends

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

BackendVersionSupportNotes
Alacritty0.26.0✓ yes
Kitty0.40.0✓ yes
vterm0.2.0✓ yes
WezTerm0.1.0-fork.5✓ yes
xterm.js5.5.0✓ yes
vt100.js0.2.1✗ noNot in VT100/VT220 — only single underline supported