Skip to content

vt100.js

Headless Backend

Pure TypeScript VT100 emulator. Zero dependencies, fastest backend.

vt100.js is a lightweight, zero-dependency terminal emulator written in pure TypeScript. It covers approximately 58% of the terminfo.dev feature matrix — SGR styling (bold, italic, underline, 256-color, truecolor), cursor positioning and visibility, scroll regions, alternate screen buffer, and basic character set handling. The coverage is a deliberate tradeoff: by focusing on the most commonly used features, vt100.js stays small, fast, and easy to reason about.

vt100.js was originally designed as the default backend for Termless (headless terminal testing). vterm.js has since replaced it as the default, offering near-100% feature coverage. The two libraries are complementary: vt100.js for speed in CI pipelines where only common features matter, vterm.js for thoroughness when standards compliance is the goal.

Pure TypeScript, zero dependencies, runs on any JavaScript runtime (Bun, Node.js, Deno, browsers).

Backend: Pure TypeScript VT100 emulator. Zero dependencies, fastest backend. (js) · v0.2.1
46%
107 passed · 126 failed of 233 features
Tested: April 10, 2026
Analysis2026-04-06

vt100.js scores 50% (114/227) on the terminfo.dev feature matrix, with gaps in the Core TUI, Modern TUI, Rich TUI, Unicode baselines. Ranks #12 of 12 tested terminals. Missing 113 features.

Character Sets

FeatureSupportNotes
DEC line drawing character set✓ yes
DEC Special Graphics✓ yes
G0/G1 character set switching✓ yes
UTF-8 mode✓ yes

Cursor

FeatureSupportNotes
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✗ noCUP with DECOM not implemented — pure TypeScript emulator
CUU stops at top✓ yes
Hide cursor (DECTCEM)✓ yes
Cursor horizontal absolute (CHA)✓ yes
HPA horizontal position absolute (CSI `)✗ noHPA (horizontal position absolute) not implemented in vt100.js baseline emulator
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)✓ yesNo output stream — pure TypeScript emulator
Reverse Wrap (Mode 45)✓ yes
Save/restore cursor (DECSC)✓ yes
Cursor shape (DECSCUSR)✗ noNot implemented — pure TypeScript emulator
VPA vertical position absolute (CSI d)✓ yes

Device Status

FeatureSupportNotes
Mode Report (DECRPM)✗ noNo output stream — pure TypeScript emulator
Request Setting (DECRQSS)✗ noNo output stream — pure TypeScript emulator
DSR ?996 — color scheme query? unknown
COLORTERM env variable? unknown
KITTY_* env variables? unknown
LC_TERMINAL env variable? unknown
NO_COLOR env variable? unknown
TERM env variable? unknown
TERM_PROGRAM env variable? unknown
VTE_VERSION env variable? unknown
WEZTERM_* env variables? unknown
WT_SESSION env variable? unknown
Primary device attributes (DA1)✓ yesNo output stream — pure TypeScript emulator
Secondary Device Attributes (DA2)✗ noNo output stream — pure TypeScript emulator
Device status report (DSR 5)✓ yesNo output stream — pure TypeScript emulator
Feature Reporting (TERM_FEATURES)? unknown
Tertiary Device Attributes (DA3)✗ noNo output stream — pure TypeScript emulator
Query Terminfo (XTGETTCAP)✗ noNo output stream — pure TypeScript emulator
XTGETXRES — query resource value (DCS + Q)✗ noXTGETXRES resource query — xterm-specific
XTREPORTCOLORS — report color capabilities (CSI # R)✗ noXTREPORTCOLORS (xterm patch 401+) not yet adopted outside xterm
Terminal Version (XTVERSION)✗ noNo output stream — pure TypeScript emulator
Report window size in pixels (CSI 14 t)✗ noXTWINOPS not implemented — post-dates VT220 baseline
Report cell size in pixels (CSI 16 t)✗ noXTWINOPS not implemented — post-dates VT220 baseline
Report text area size in chars (CSI 18 t)✗ noXTWINOPS not implemented — post-dates VT220 baseline
Report icon label (CSI 20 t)✗ noXTWINOPS not implemented — post-dates VT220 baseline
Report window title (CSI 21 t)✗ noXTWINOPS not implemented — post-dates VT220 baseline
Push title/icon stack (CSI 22 ; 0 t)✓ yes
Pop title/icon stack (CSI 23 ; 0 t)✓ yes

Editing

FeatureSupportNotes
DECCARA — change attrs in rectangle✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECCRA — copy rectangular area✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECDC — delete columns (CSI Ps ' ~)✗ noColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps
DECERA — erase rectangular area✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECFRA — fill rectangular area✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECIC — insert columns (CSI Ps ' })✗ noColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps
DECRARA — reverse attrs in rectangle✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECRQCRA — checksum rectangular area✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECSACE — select attribute-change extent✓ yes
DECSERA — selective erase rectangular area✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
Delete characters (DCH)✗ noDCH (delete characters) not implemented in vt100.js baseline emulator
Delete lines (DL)✗ noDL (delete lines) not implemented in vt100.js baseline emulator
Insert characters (ICH)✗ noICH (insert characters) not implemented in vt100.js baseline emulator
Insert lines (IL)✗ noIL (insert lines) not implemented in vt100.js baseline emulator
Repeat character (REP)✗ noREP not implemented — pure TypeScript emulator
SL — shift left (CSI Ps SP @)✗ noColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps
SR — shift right (CSI Ps SP A)✗ noColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps

Erase

FeatureSupportNotes
Erase character (ECH)✗ noECH (erase character) not implemented in vt100.js baseline emulator
ED at scroll region boundary✓ yes
EL erases with bg color✗ noEL doesn't preserve SGR background — pure TypeScript emulator
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)✗ noDECSED not implemented — pure TypeScript emulator

Extensions

FeatureSupportNotes
System clipboard paste? unknown
Font ligatures? unknown
iTerm2 Inline Images (OSC 1337)✗ noNot implemented — pure TypeScript emulator
Kitty graphics protocol✗ noNot implemented — pure TypeScript emulator
Kitty graphics: animation✗ noNot implemented — pure TypeScript emulator
Kitty graphics: display✗ noNot implemented — pure TypeScript emulator
Kitty graphics: transmit✗ noNot implemented — pure TypeScript emulator
Kitty graphics: Unicode placeholders✗ noNot implemented — pure TypeScript emulator
Kitty keyboard protocol✗ noNot implemented — pure TypeScript emulator
Kitty keyboard: DISAMBIGUATE (flag 1)✗ noNot implemented — pure TypeScript emulator
Kitty keyboard: REPORT_ALL_KEYS (flag 8)✗ noNot implemented — pure TypeScript emulator
Kitty keyboard: REPORT_ALTERNATE (flag 4)✗ noNot implemented — pure TypeScript emulator
Kitty keyboard: REPORT_EVENTS (flag 2)✗ noNot implemented — pure TypeScript emulator
Kitty keyboard: REPORT_TEXT (flag 16)✗ noNot implemented — pure TypeScript emulator
Desktop Notifications (OSC 9/777)✗ noNot implemented — pure TypeScript emulator
VS Code Shell Integration (OSC 633)✗ noVS Code shell integration (OSC 633) not supported
Icon and title (OSC 0)✓ yes
Icon name (OSC 1)✓ yes
Foreground color query (OSC 10)✗ noNot implemented — pure TypeScript emulator
Reset color palette (OSC 104)✗ noNot implemented — pure TypeScript emulator
Background color query (OSC 11)✗ noNot implemented — pure TypeScript emulator
Reset foreground color (OSC 110)✗ noNot implemented — pure TypeScript emulator
Reset background color (OSC 111)✗ noNot implemented — pure TypeScript emulator
Reset cursor color (OSC 112)✗ noNot implemented — pure TypeScript emulator
Reset pointer fg color (OSC 113)? unknown
Reset pointer bg color (OSC 114)? unknown
Reset highlight background (OSC 117)✓ yes
Reset highlight foreground (OSC 119)✓ yes
Cursor color (OSC 12)✗ noNot implemented — pure TypeScript emulator
OSC 133;A prompt start (FTCS_PROMPT)✓ yes
OSC 133;B command start (FTCS_COMMAND_START)✓ yes
OSC 133;C command executed (FTCS_COMMAND_EXECUTED)✓ yes
OSC 133;D command finished (FTCS_COMMAND_FINISHED)✓ yes
OSC 133;P properties✓ yes
iTerm2 Capability Reporting (OSC 1337)✗ noiTerm2-specific protocol not implemented — pure TypeScript emulator
iTerm2 Cell Size Reporting (OSC 1337)✗ noiTerm2-specific protocol not implemented — pure TypeScript emulator
Highlight background (OSC 17)✗ noNot implemented — pure TypeScript emulator
Set Wayland app-id (OSC 176)? unknown
Highlight foreground (OSC 19)✗ noNot implemented — pure TypeScript emulator
Window title (OSC 2)✓ yes
Kitty color protocol (OSC 21)✗ noKitty color protocol (OSC 21) not implemented — post-dates VT220 baseline
Pointer shape (OSC 22)? unknown
Kitty color stack push (OSC 30001)? unknown
Systemd context (OSC 3008)? unknown
Kitty color stack pop (OSC 30101)? unknown
Color palette (OSC 4)✗ noNot implemented — pure TypeScript emulator
Audio sound (OSC 440)? unknown
Special color (OSC 5)✗ noNot implemented — pure TypeScript emulator
Clipboard access (OSC 52)✗ noNot implemented — pure TypeScript emulator
OSC 52 clipboard read✗ noNot implemented — pure TypeScript emulator
OSC 52 clipboard write✓ yes
OSC 5522 advanced clipboard✗ noNot implemented — pure TypeScript emulator
Screen flash (OSC 555)? unknown
OSC 633;A prompt start✓ yes
OSC 633;B prompt end✓ yes
OSC 633;C pre-execution✓ yes
OSC 633;D command finished✓ yes
OSC 633;E set commandline✓ yes
OSC 633;P properties✓ yes
OSC 66 text sizing✗ noNot implemented — pure TypeScript emulator
VTE termprop (OSC 666)? unknown
Current directory (OSC 7)✗ noNot implemented — pure TypeScript emulator
Locale query/set (OSC 701)? unknown
Version query (OSC 702)? unknown
Set normal font (OSC 710)? unknown
Scroll view up (OSC 720)? unknown
Cell size report (OSC 776)? unknown
Notifications (OSC 777)? unknown
Font size query/set (OSC 7770)? unknown
Font + window size (OSC 7777)? unknown
Hyperlinks (OSC 8)✗ noNot implemented — pure TypeScript emulator
OSC 9;4 progress bar? unknown
Desktop notifications (OSC 99)? unknown
Text reflow on resize✗ noNot implemented — pure TypeScript emulator
Semantic prompts (OSC 133)✗ noNot implemented — pure TypeScript emulator
Sixel graphics✗ noNot implemented — pure TypeScript emulator
Sixel support in DA1✗ noNot implemented — pure TypeScript emulator
Sixel geometry report (CSI ? Pi;Pa;Pv S)✓ yes
24-bit truecolor✗ noNot in VT100/VT220 — only 8 standard colors supported

Input Protocols

FeatureSupportNotes
Button-Event Mouse (1002)✗ noNot in VT100/VT220 — xterm extension
CSI u Key Encoding✗ noCSI u keyboard protocol not implemented
Kitty click events? unknown
modifyOtherKeys✗ noNot implemented — pure TypeScript emulator
modifyOtherKeys mode 3✗ noNot implemented — pure TypeScript emulator
Pixel Mouse Reporting (1016)✗ noSGR pixel mouse mode not implemented — pure TypeScript emulator
urxvt Mouse Reporting (1015)✗ nourxvt mouse mode (?1015) not implemented
X10 Mouse Tracking (9)✗ noX10 mouse mode (?9) not implemented

Modes

FeatureSupportNotes
Enter alt screen (DECSET 1049)✗ noNot in VT100/VT220 — xterm extension
Exit alt screen (DECRST 1049)✓ yes
Alt-scroll mouse wheel (?1007)✓ yes
Alt screen clear-on-enter (?1047)✗ noAlt screen variants not supported in vt100.js baseline
Save/restore cursor (?1048)✗ noAlt screen variants not supported in vt100.js baseline
Alt screen legacy (?47)✗ noAlt screen variants not supported in vt100.js baseline
App cursor keys (DECCKM)✓ yes
Application keypad (DECKPAM)✓ yes
Auto-wrap (DECAWM)✓ yes
Bracketed paste (DECSET 2004)✗ noNot in VT100/VT220 — xterm extension
Mode 2031 color scheme reporting✗ noNot implemented — pure TypeScript emulator
DECCOLM 80/132 column switch (?3)✓ yes
DECSCLM — smooth scroll mode? unknown
DECSSCLS — set scroll speed? unknown
Focus tracking (DECSET 1004)✗ noNot in VT100/VT220 — xterm extension
Insert/replace mode (IRM)✗ noIRM (insert/replace mode) not implemented in vt100.js baseline emulator
Left/Right Margins (DECLRMM, Mode 69)✗ noDECLRMM not implemented — pure TypeScript emulator
All motion mouse (DECSET 1003)✗ noNot in VT100/VT220 — xterm extension
SGR mouse mode (DECSET 1006)✗ noSGR mouse encoding not implemented — pure TypeScript emulator
Mouse tracking (DECSET 1000)✗ noNot in VT100/VT220 — xterm extension
Origin mode (DECOM)✓ yes
Reverse video (DECSCNM)✓ yes
Synchronized output (DECSET 2026)✓ yes
UTF-8 mouse mode (?1005)✓ yes
Pop color palette (CSI # Q)✓ yes
XTPOPSGR — pop SGR stack (CSI # })✓ yes
Push color palette (CSI # P)✓ yes
XTPUSHSGR — push SGR stack (CSI # {)✓ yes
XTRESTORE — restore DEC private modes (CSI ? Pm r)✓ yes
XTSAVE — save DEC private modes (CSI ? Pm s)✓ yes

Reset

FeatureSupportNotes
DECALN screen alignment (ESC # 8)✗ noDECALN not implemented in vt100.js baseline emulator
Backend reset() method✓ yes
Full reset (RIS)✓ yes
SGR reset clears attributes✓ yes
Soft reset (DECSTR)✗ noDECSTR (soft reset) not implemented in vt100.js baseline emulator

Scrollback

FeatureSupportNotes
Scrollback accumulates✓ yes
Alt screen separate scrollback✗ noNot in VT100/VT220 — no alternate screen buffer
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

SGR (Text Styling)

FeatureSupportNotes
256-color bg (SGR 48;5)✗ noNot in VT100/VT220 — only 8 standard colors supported
Bright bg colors (SGR 100-107)✗ noNot in VT100/VT220 — only 8 standard colors supported
Default bg color (SGR 49)✓ yes
Standard bg colors (SGR 40-47)✗ noStandard background colors (SGR 40–47) not implemented in vt100.js baseline emulator
24-bit bg (SGR 48;2)✗ noNot in VT100/VT220 — only 8 standard colors supported
Blink (SGR 5)✓ yes
Bold (SGR 1)✓ yes
Faint/dim (SGR 2)✗ noNot in VT100/VT220 — use vterm.js for modern SGR
256-color fg (SGR 38;5)✗ noNot in VT100/VT220 — only 8 standard colors supported
Bright fg colors (SGR 90-97)✗ noNot in VT100/VT220 — only 8 standard colors supported
Default fg color (SGR 39)✓ yes
Standard fg colors (SGR 30-37)✗ noStandard foreground colors (SGR 30–37) not implemented in vt100.js baseline emulator
24-bit fg (SGR 38;2)✗ noNot in VT100/VT220 — only 8 standard colors supported
Hidden/invisible (SGR 8)✗ noSGR 8 (hidden/invisible) not implemented in vt100.js baseline emulator
Inverse video (SGR 7)✓ yes
Italic (SGR 3)✗ noNot in VT100/VT220 — use vterm.js for modern SGR
Overline (SGR 53)✓ yes
Reset all (SGR 0)✓ yes
Reset bold/dim (SGR 22)✓ yes
Reset inverse (SGR 27)✓ yes
Reset italic (SGR 23)✓ yes
Reset underline (SGR 24)✓ yes
Strikethrough (SGR 9)✗ noNot in VT100/VT220 — use vterm.js for modern SGR
Underline color, indexed (SGR 58;5)✗ noColored underline (SGR 58) post-dates VT220 — not implemented in vt100.js baseline
Reset underline color (SGR 59)✗ noColored underline (SGR 59) post-dates VT220 — not implemented in vt100.js baseline
Underline color, truecolor (SGR 58;2)✗ noColored underline (SGR 58) post-dates VT220 — not implemented in vt100.js baseline
Underline color (SGR 58)✗ noNot implemented — pure TypeScript emulator
Curly underline (SGR 4:3)✗ noNot in VT100/VT220 — only single underline supported
Dashed underline (SGR 4:5)✗ noNot in VT100/VT220 — only single underline supported
Dotted underline (SGR 4:4)✗ noNot in VT100/VT220 — only single underline supported
Double underline (SGR 21)✗ noNot in VT100/VT220 — only single underline supported
Underline (SGR 4)✓ yes

Text

FeatureSupportNotes
Backspace (BS)✓ yes
Basic text rendering✓ yes
CBT backward tab (CSI Z)✗ noTab stop manipulation not implemented in vt100.js
CHT forward tab (CSI I)✗ noTab stop manipulation not implemented in vt100.js
Combining characters (0 cols)✗ noCombining characters not implemented — pure TypeScript emulator
Carriage return✓ yes
HTS set tab stop (ESC H)✗ noTab stop manipulation not implemented in vt100.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)✗ noTab stop manipulation not implemented in vt100.js
CJK wide chars (2 cols)✗ noNot in VT100/VT220 — ASCII only, no Unicode width
Emoji wide chars (2 cols)✗ noNot in VT100/VT220 — ASCII only, no Unicode width
Regional indicator flags (2 cols)✗ noEmoji flag sequences not rendered as wide characters
Variation selector 16 (emoji presentation)✗ noVS16 emoji variation selectors not handled
Emoji ZWJ sequences (2 cols)✓ yes
Text wraps at width✓ yes

Unicode

FeatureSupportNotes
East Asian Ambiguous Width✓ yes
Grapheme Cluster Cursor Movement✓ yes
Tab Stops (HT)✓ yes
Wide Char at Line Wrap✗ noNot in VT100/VT220 — ASCII only, no Unicode width