Skip to content
🟢

Core TUI Baseline

Every terminal should support these

The universal baseline — features that have been standard since the VT100/VT220 era and are expected in any general-purpose modern terminal emulator. If a terminal fails Core features, it cannot reliably run any TUI application. This baseline covers SGR text styling basics (bold, italic, underline, colors up to 256), cursor positioning and visibility, screen and line erasing, line/character editing, the alternate screen buffer, scroll regions, and basic character set handling.

80 features in this baseline

Analysis2026-09-28

1 of 12 tested terminals achieve 100% Core TUI compliance. Lagging: vt100.js (77%), Kitty (90%), Terminal.app (91%). Most commonly missing: TBC clear tab stop (CSI g), CHT forward tab (CSI I), CBT backward tab (CSI Z).

Compliance Scorecard ​

Terminal Applications ​

iTerm2
93%74 / 80
Ghostty
93%74 / 80
Kitty
89%71 / 80
VS Code
90%72 / 80
Warp
90%72 / 80
Cursor
90%72 / 80
Terminal.app
90%72 / 80

Headless Backends ​

vterm.js
99%79 / 80
xterm.js
98%78 / 80
Alacritty
96%77 / 80
WezTerm
95%76 / 80
vt100.js
76%61 / 80

Guidance ​

For Developers

If your TUI only uses Core features, it will work in every terminal — including Terminal.app, older xterm builds, and embedded terminals in IDEs. This is the safe target for maximum compatibility.

For Terminal Authors

100% Core compliance is table stakes. For general-purpose terminals, Core failures will usually surface as interoperability bugs.

Features ​

Terminal Applications ​

FeatureiTerm2GhosttyKittyVS CodeWarpCursorTerminal.app
Bold (SGR 1)✓✓✓✓✓✓✓
Faint/dim (SGR 2)✓✓✓✓✓✓✓
Italic (SGR 3)✓✓✓✓✓✓✓
Underline (SGR 4)✓✓✓✓✓✓✓
Inverse video (SGR 7)✓✓✓✓✓✓✓
Hidden/invisible (SGR 8)✓✓✓✓✓✓✓
Strikethrough (SGR 9)✓✓✓✓✓✓✓
Standard fg colors (SGR 30-37)✓✓✓✓✓✓✓
Standard bg colors (SGR 40-47)✓✓✓✓✓✓✓
Default fg color (SGR 39)✓✓✓✓✓✓✓
Default bg color (SGR 49)✓✓✓✓✓✓✓
Reset bold/dim (SGR 22)✓✓✓✓✓✓✓
Reset underline (SGR 24)✓✓✓✓✓✓✓
Reset inverse (SGR 27)✓✓✓✓✓✓✓
Reset italic (SGR 23)✓✓✓✓✓✓✓
Reset all (SGR 0)✓✓✓✓✓✓✓
Hide cursor (DECTCEM)✓✓✓✓✓✓✓
Cursor position (CUP)✓✓✓✓✓✓✓
Cursor up (CUU)✓✓✗✗✗✗✗
Cursor down (CUD)✓✓✗✗✗✗✗
Cursor forward (CUF)✓✓✓✓✓✓✓
Cursor back (CUB)✓✓✗✗✗✗✗
Cursor home✓✓✓✓✓✓✓
Save/restore cursor (DECSC)✓✓✓✓✓✓✓
CUP at screen boundaries✗✗✗✗✗✗✓
CUU stops at top✓✓✓✓✓✓✓
CUD stops at bottom✓✓✓✓✓✓✓
CUP with DECOM✗✗✗✓✓✓✗
VPA vertical position absolute (CSI d)✓✓✓✓✓✓✓
CPL cursor preceding line (CSI F)✓✓✓✓✓✓✓
HPA horizontal position absolute (CSI `)✓✓✓✓✓✓✓
Erase to EOL (EL 0)✓✓✓✓✓✓✓
Erase to BOL (EL 1)✓✓✓✓✓✓✓
Erase line (EL 2)✓✓✓✓✓✓✓
Erase above (ED 1)✓✓✓✓✓✓✓
Erase screen (ED 2)✓✓✓✓✓✓✓
Erase below (ED 0)✓✓✓✓✓✓✓
Erase scrollback (ED 3)✓✓✓✓✓✓✓
Erase character (ECH)✓✓✓✓✓✓✓
EL erases with bg color✓✓✓✓✓✓✓
ED at scroll region boundary✓✓✓✓✓✓✓
Enter alt screen (DECSET 1049)✓✓✓✓✓✓✓
Exit alt screen (DECRST 1049)✓✓✓✓✓✓✓
Reverse video (DECSCNM)✓✓✓✓✓✓✓
Auto-wrap (DECAWM)✓✓✓✓✓✓✓
Scrollback accumulates✓✓✓✓✓✓✓
Total line count✓✓✓✓✓✓✓
Scroll up (SU)✓✓✓✓✓✓✓
Scroll down (SD)✓✓✓✓✓✓✓
Reverse index (RI)✓✓✓✓✓✓✓
Scroll region (DECSTBM)✓✓✓✓✓✓✓
Alt screen separate scrollback✓✓✓✓✓✓✓
DECSTBM constrains scrolling✓✓✓✓✓✓✓
DECSTBM reset to full screen✓✓✓✓✓✓✓
Basic text rendering✓✓✓✓✓✓✓
Text wraps at width✓✓✓✓✓✓✓
CJK wide chars (2 cols)✓✓✓✓✓✓✓
Tab stops✓✓✓✓✓✓✓
Tab Stops (HT)✓✓✓✓✓✓✓
Carriage return✓✓✓✓✓✓✓
Line feed✓✓✓✓✓✓✓
Backspace (BS)✓✓✓✓✓✓✓
Index (IND)✓✓✓✓✓✓✓
Next line (NEL)✓✓✓✓✓✓✓
Reverse Index at Scroll Top✓✓✓✓✓✓✓
Overwrite at cursor✓✓✓✓✓✓✓
HTS set tab stop (ESC H)✓✓✓✓✓✓✓
TBC clear tab stop (CSI g)✗✗✗✗✗✗✗
CHT forward tab (CSI I)✗✗✗✗✗✗✗
CBT backward tab (CSI Z)✗✗✗✗✗✗✗
SGR reset clears attributes✓✓✓✓✓✓✓
Full reset (RIS)✓✓✓✓✓✓✓
Soft reset (DECSTR)✓✓✓✓✓✓✓
Backend reset() method✓✓✓✓✓✓✓
DEC Special Graphics✓✓✓✓✓✓✓
UTF-8 mode✓✓✓✓✓✓✓
G0/G1 character set switching✓✓✓✓✓✓✓
DEC line drawing character set✓✓✓✓✓✓✓
TERM env variable???????
Icon name (OSC 1)✓✓✓✓✓✓✓

Headless Backends ​

Parser correctness tested via Termless. A ✓ means the parser accepts the sequence, not that it renders correctly.

Featurevterm.jsxterm.jsAlacrittyWezTermvt100.js
Bold (SGR 1)✓✓✓✓✓
Faint/dim (SGR 2)✓✓✓✓✗
Italic (SGR 3)✓✓✓✓✗
Underline (SGR 4)✓✓✓✓✓
Inverse video (SGR 7)✓✓✓✓✓
Hidden/invisible (SGR 8)✓~~~✗
Strikethrough (SGR 9)✓✓✓✓✗
Standard fg colors (SGR 30-37)✓✓~~✗
Standard bg colors (SGR 40-47)✓✓✓~✗
Default fg color (SGR 39)✓✓✓✓✓
Default bg color (SGR 49)✓✓✓✓✓
Reset bold/dim (SGR 22)✓✓✓✓✓
Reset underline (SGR 24)✓✓✓✓✓
Reset inverse (SGR 27)✓✓✓✓✓
Reset italic (SGR 23)✓✓✓✓✓
Reset all (SGR 0)✓✓✓✓✓
Hide cursor (DECTCEM)✓~✓✓✓
Cursor position (CUP)✓✓✓✓✓
Cursor up (CUU)✓✓✓✓✓
Cursor down (CUD)✓✓✓✓✓
Cursor forward (CUF)✓✓✓✓✓
Cursor back (CUB)✓✓✓✓✓
Cursor home✓✓✓✓✓
Save/restore cursor (DECSC)✓✓✓✓✓
CUP at screen boundaries✓✓✓✗✓
CUU stops at top✓✓✓✓✓
CUD stops at bottom✓✓✓✓✓
CUP with DECOM✓✓✓✓✗
VPA vertical position absolute (CSI d)✓✓✓✓✓
CPL cursor preceding line (CSI F)✓✓✓✓✓
HPA horizontal position absolute (CSI `)✓✓✓✓✗
Erase to EOL (EL 0)✓✓✓✓✓
Erase to BOL (EL 1)✓✓✓✓✓
Erase line (EL 2)✓✓✓✓✓
Erase above (ED 1)✓✓✓✓✓
Erase screen (ED 2)✓✓✗✓✓
Erase below (ED 0)✓✓✓✓✓
Erase scrollback (ED 3)✓✓✓✓✓
Erase character (ECH)✓✓✓✓✗
EL erases with bg color✓✓✓✗✗
ED at scroll region boundary✓✓✓✓✓
Enter alt screen (DECSET 1049)✓✓✓✓✗
Exit alt screen (DECRST 1049)✓✓✓✓✓
Reverse video (DECSCNM)✓~~✓✓
Auto-wrap (DECAWM)✓✓✓✓✓
Scrollback accumulates✓✓✓✓✓
Total line count✓✓✓✓✓
Scroll up (SU)✓~✓✓✓
Scroll down (SD)✓✓✓✓✓
Reverse index (RI)✓✓✓✓✓
Scroll region (DECSTBM)✓✓✓✓✓
Alt screen separate scrollback✓✓✓✓✗
DECSTBM constrains scrolling✓✓✓✓✓
DECSTBM reset to full screen✓✓✓✓✓
Basic text rendering✓✓✓✓✓
Text wraps at width✓✓✓✓✓
CJK wide chars (2 cols)✓✓✓✓✗
Tab stops✓✓✓✓✓
Tab Stops (HT)✓✓✓✓✓
Carriage return✓✓✓✓✓
Line feed✓✓✓✓✓
Backspace (BS)✓✓✓✓✓
Index (IND)✓✓✓✓✓
Next line (NEL)✓✓✓✓✓
Reverse Index at Scroll Top✓✓✓✓✓
Overwrite at cursor✓✓✓✓✓
HTS set tab stop (ESC H)✓✓✓✓✗
TBC clear tab stop (CSI g)✓✗✗✗✗
CHT forward tab (CSI I)✓✓✓✓✗
CBT backward tab (CSI Z)✓✓✓✓✗
SGR reset clears attributes✓✓✓✓✓
Full reset (RIS)✓✓✓✓✓
Soft reset (DECSTR)✓✓~~✗
Backend reset() method✓✓✓✓✓
DEC Special Graphics✓✓✓✓✓
UTF-8 mode✓✓✓✓✓
G0/G1 character set switching✓✓✓✓✓
DEC line drawing character set✓✓✓✓✓
TERM env variable?????
Icon name (OSC 1)✓✓✓✓✓