Appearance
vterm.js
Headless Backend
Full-featured TypeScript terminal emulator with complete VT standards coverage.
vterm.js is a comprehensive terminal emulator library written in pure TypeScript with zero dependencies. It targets 100% coverage of the terminfo.dev feature matrix — every SGR attribute (including blink, overline, curly/dotted/dashed underline with independent colors), all cursor shapes (DECSCUSR), every DEC private mode, OSC 8 hyperlinks, device attribute responses (DA1/DA2/DSR/DECRPM), DEC Special Graphics character sets, synchronized output, and full Unicode width handling including emoji ZWJ sequences and variation selectors.
vterm.js is the default backend for Termless — the headless terminal testing framework that powers terminfo.dev's probe infrastructure. Where vt100.js covers ~58% of the feature matrix (the common baseline), vterm.js targets 100% — including the edge cases, modern protocols, and obscure DEC sequences that comprehensive testing requires.
Pure TypeScript, zero dependencies, runs on any JavaScript runtime (Bun, Node.js, Deno, browsers). Provides an onResponse callback for DA1/DA2/DSR queries — enabling bidirectional terminal communication testing that most headless emulators can't do.
Backend: Full-featured TypeScript terminal emulator with complete VT standards coverage. (js) · v0.2.0
94%
230 passed · 1 partial · 14 failed of 245 features
Tested: May 19, 2026
Analysis2026-05-17
vterm.js scores 94% (231/245) on the terminfo.dev feature matrix, with gaps in the Modern TUI, Rich TUI, Legacy baselines. Ranks #2 of 12 tested terminals. Uniquely supports: iTerm2 Cell Size Reporting (OSC 1337), iTerm2 Capability Reporting (OSC 1337), OSC 5522 advanced clipboard, TBC clear tab stop (CSI g), DECSCLM — smooth scroll mode. Missing 14 features.
Character Sets
| Feature | Support | Notes |
|---|---|---|
| DEC line drawing character set | ✓ yes | |
| DEC Special Graphics | ✓ yes | |
| G0/G1 character set switching | ✓ yes | |
| UTF-8 mode | ✓ yes |
Cursor
| Feature | Support | Notes |
|---|---|---|
| ANSI restore cursor (CSI u) | ✓ yes | |
| ANSI save cursor (CSI s) | ✓ yes | |
| CPL cursor preceding line (CSI F) | ✓ yes | |
| CUD stops at bottom | ✓ yes | |
| CUP at screen boundaries | ✓ yes | |
| CUP with DECOM | ✓ yes | |
| CUU stops at top | ✓ yes | |
| Hide cursor (DECTCEM) | ✓ yes | |
| Cursor horizontal absolute (CHA) | ✓ yes | |
| HPA horizontal position absolute (CSI `) | ✓ yes | HPA (horizontal position absolute) not implemented in vterm.js |
| Cursor position (CUP) | ✓ yes | |
| Cursor back (CUB) | ✓ yes | |
| Cursor down (CUD) | ✓ yes | |
| Cursor forward (CUF) | ✓ yes | |
| Cursor home | ✓ yes | |
| Cursor up (CUU) | ✓ yes | |
| Cursor next line (CNL) | ✓ yes | |
| Cursor position report (DSR 6) | ✓ yes | |
| Reverse Wrap (Mode 45) | ✓ yes | |
| Save/restore cursor (DECSC) | ✓ yes | |
| Cursor shape (DECSCUSR) | ✓ yes | |
| VPA vertical position absolute (CSI d) | ✓ yes |
Device Status
Editing
| Feature | Support | Notes |
|---|---|---|
| DECCARA — change attrs in rectangle | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECCRA — copy rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECDC — delete columns (CSI Ps ' ~) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
| DECERA — erase rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECFRA — fill rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECIC — insert columns (CSI Ps ' }) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
| DECRARA — reverse attrs in rectangle | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECRQCRA — checksum rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECSACE — select attribute-change extent | ✓ yes | |
| DECSERA — selective erase rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| Delete characters (DCH) | ✓ yes | |
| Delete lines (DL) | ✓ yes | |
| Insert characters (ICH) | ✓ yes | |
| Insert lines (IL) | ✓ yes | |
| Repeat character (REP) | ✓ yes | |
| SL — shift left (CSI Ps SP @) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
| SR — shift right (CSI Ps SP A) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
Erase
| Feature | Support | Notes |
|---|---|---|
| Erase character (ECH) | ✓ yes | |
| ED at scroll region boundary | ✓ yes | |
| EL erases with bg color | ✓ yes | |
| Erase line (EL 2) | ✓ yes | |
| Erase to BOL (EL 1) | ✓ yes | |
| Erase to EOL (EL 0) | ✓ yes | |
| Erase above (ED 1) | ✓ yes | |
| Erase screen (ED 2) | ✓ yes | |
| Erase below (ED 0) | ✓ yes | |
| Erase scrollback (ED 3) | ✓ yes | |
| Selective Erase (DECSED) | ✓ yes |
Extensions
Input Protocols
| Feature | Support | Notes |
|---|---|---|
| Button-Event Mouse (1002) | ✓ yes | |
| CSI u Key Encoding | ✓ yes | |
| Kitty click events | ? unknown | |
| modifyOtherKeys | ✓ yes | |
| modifyOtherKeys mode 3 | ✓ yes | |
| Pixel Mouse Reporting (1016) | ✓ yes | |
| urxvt Mouse Reporting (1015) | ✓ yes | |
| X10 Mouse Tracking (9) | ✓ yes |
Modes
Reset
| Feature | Support | Notes |
|---|---|---|
| DECALN screen alignment (ESC # 8) | ✓ yes | DECALN not implemented in vterm.js |
| Backend reset() method | ✓ yes | |
| Full reset (RIS) | ✓ yes | |
| SGR reset clears attributes | ✓ yes | |
| Soft reset (DECSTR) | ✓ yes |
Scrollback
| Feature | Support | Notes |
|---|---|---|
| Scrollback accumulates | ✓ yes | |
| Alt screen separate scrollback | ✓ yes | |
| DECSTBM constrains scrolling | ✓ yes | |
| DECSTBM reset to full screen | ✓ yes | |
| Reverse index (RI) | ✓ yes | |
| Scroll down (SD) | ✓ yes | |
| Scroll up (SU) | ✓ yes | |
| Scroll region (DECSTBM) | ✓ yes | |
| Total line count | ✓ yes | |
| Viewport holds on output | ? unknown |
SGR (Text Styling)
Text
| Feature | Support | Notes |
|---|---|---|
| Backspace (BS) | ✓ yes | |
| Basic text rendering | ✓ yes | |
| CBT backward tab (CSI Z) | ✓ yes | Tab stop manipulation not implemented in vterm.js |
| CHT forward tab (CSI I) | ✓ yes | Tab stop manipulation not implemented in vterm.js |
| Combining characters (0 cols) | ✓ yes | |
| Carriage return | ✓ yes | |
| HTS set tab stop (ESC H) | ✓ yes | Tab stop manipulation not implemented in vterm.js |
| Index (IND) | ✓ yes | |
| Line feed | ✓ yes | |
| Next line (NEL) | ✓ yes | |
| Overwrite at cursor | ✓ yes | |
| Reverse Index at Scroll Top | ✓ yes | |
| Tab stops | ✓ yes | |
| TBC clear tab stop (CSI g) | ✓ yes | Tab stop manipulation not implemented in vterm.js |
| CJK wide chars (2 cols) | ✓ yes | |
| Emoji wide chars (2 cols) | ✓ yes | |
| Regional indicator flags (2 cols) | ✓ yes | |
| Variation selector 16 (emoji presentation) | ✓ yes | |
| Emoji ZWJ sequences (2 cols) | ✓ yes | |
| Text wraps at width | ✓ yes |
Unicode
| Feature | Support | Notes |
|---|---|---|
| East Asian Ambiguous Width | ✓ yes | |
| Grapheme Cluster Cursor Movement | ✓ yes | |
| Tab Stops (HT) | ✓ yes | |
| Wide Char at Line Wrap | ✓ yes |