Skip to content

24-bit truecolor

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

ESC [ 38;2;R;G;B m
24-bit truecolor allows terminals to display any of 16.7 million colors (256 values per R/G/B channel), far beyond the 256-color palette. The escape sequences are ESC [ 38 ; 2 ; R ; G ; B m for foreground and ESC [ 48 ; 2 ; R ; G ; B m for background. There are two syntax variants: the original semicolon-separated format (38;2;R;G;B) introduced by xterm, and the colon-separated format (38:2::R:G:B) defined by ITU T.416. The colon format is technically more correct and avoids parsing ambiguities, but the semicolon format has wider support. Applications should use the semicolon variant for maximum compatibility. Applications can detect truecolor support via the COLORTERM=truecolor environment variable. Nearly all modern terminals support 24-bit color; the main exceptions are older versions of macOS Terminal.app and some minimal terminal emulators.
How this is testedautomated
Write text with 24-bit RGB foreground color (ESC [ 38;2;R;G;B m) and verify the cell stores the exact RGB values.

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 8 standard colors supported.

Supported by 12 of 14 backends (86%)

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 8 standard colors supported