Skip to content

Underline color (SGR 58) โ€‹

Category: sgr ยท Tags: Kitty Extensions ยท Specification โ†—

ESC [ 58;2;R;G;B m
SGR 58 sets the underline color independently of the text foreground color. The syntax mirrors SGR 38 (foreground): ESC [ 58:2::R:G:B m for truecolor, ESC [ 58:5:N m for 256-color. Reset the underline color to default with SGR 59. This is particularly useful with curly underlines (SGR 4:3) for diagnostic indicators: red underline for errors, yellow for warnings, blue for hints โ€” all while keeping the text color unchanged. Introduced by Kitty and adopted by other modern terminals.
How this is tested: Send \x1b[4m\x1b[58;2;255;0;128mX, verify the cell has underline active and underlineColor matches RGB(255, 0, 128).
Analysis2026-03-26

Supported by all 8 tested terminals โ€” universal adoption. Part of the Modern TUI baseline.

Supported by 10 of 13 backends (77%)

Terminal Applications โ€‹

TerminalVersionSupportNotes
iTerm23.6.9โœ“ yes
Ghostty1.3.1โœ“ yes
VS Code1.112.0โœ“ yes
Warp0.2026.03.18.08.24.03โœ“ yes
Cursor2.6.21โœ“ yes
tmux3.6aโœ“ yes
Kitty0.46.2โœ“ yesNot exposed via Python batch bridge
Terminal.app2.15โœ“ yes
GNU Screen5.0.1โœ“ yes

Headless Backends โ€‹

Parser correctness only โ€” a โœ“ means the parser accepts the sequence.

BackendVersionSupportNotes
vterm0.2.0โœ“ yes
Alacritty0.26.0~ partialNot exposed via alacritty_terminal API
WezTerm0.1.0-fork.5~ partialNot exposed via wezterm-term API
vt1000.2.1โœ— noNot implemented โ€” pure TypeScript emulator

Powered by Termless
Playwright for Terminals