Terminals¶
This section is the TDN analogue of a browser list. It names the emulators that compatibility tables refer to, records how each identifies itself, and explains which of them share an engine and therefore share behavior.
Column order in compatibility tables across TDN follows the conventions page. The table below lists more terminals than that fixed set; the extras appear in tables only when a page has something specific to say about them.
Landscape¶
| Terminal | Maintainer | Platforms | Engine | Default TERM |
TERM_PROGRAM |
Version | Docs | Source |
|---|---|---|---|---|---|---|---|---|
| xterm | Thomas Dickey | X11 | own | xterm-256color (build-dependent) |
— | xterm -v; XTVERSION |
ctlseqs | invisible-island.net/xterm |
| Revenant | Revenant project | X11 | libghostty-vt + Xt/Athena | xterm-256color (configurable) |
— | development revision | Revenant docs | Source |
| VTE: GNOME Terminal, Ptyxis, Tilix, xfce4-terminal, Terminator, Black Box | GNOME | Linux, BSD | libvte | xterm-256color |
— | host app; XTVERSION | VTE docs | gitlab.gnome.org/GNOME/vte |
| Konsole | KDE | Linux, BSD | own | xterm-256color |
— | konsole --version; XTVERSION ? |
docs.kde.org | invent.kde.org/utilities/konsole |
| kitty | Kovid Goyal | Linux, macOS, BSD | own | xterm-kitty |
— | kitty --version; XTVERSION |
sw.kovidgoyal.net/kitty | github.com/kovidgoyal/kitty |
| WezTerm | Wez Furlong | Linux, macOS, Windows, BSD | own (wezterm-term) | xterm-256color |
WezTerm |
wezterm --version; XTVERSION |
wezterm.org | github.com/wezterm/wezterm |
| Ghostty | Mitchell Hashimoto | Linux, macOS | libghostty | xterm-ghostty |
ghostty |
ghostty --version; XTVERSION |
ghostty.org/docs | github.com/ghostty-org/ghostty |
| foot | Daniel Eklöf | Wayland | own | foot |
— | foot --version; XTVERSION |
foot-ctlseqs(7) | codeberg.org/dnkl/foot |
| Alacritty | Alacritty project | Linux, macOS, Windows, BSD | own (alacritty_terminal) | alacritty |
— | alacritty --version; XTVERSION ? |
alacritty.org | github.com/alacritty/alacritty |
| Contour | Christian Parpart | Linux, macOS, Windows, BSD | libvtbackend | contour |
contour |
contour version; XTVERSION |
contour-terminal.org | github.com/contour-terminal/contour |
| rxvt-unicode | Marc Lehmann | X11 | own (rxvt lineage) | rxvt-unicode-256color |
— | urxvt -help header |
urxvt(7) | software.schmorp.de/pkg/rxvt-unicode |
| st | suckless | X11 | own | st-256color |
— | st -v |
st.suckless.org | git.suckless.org/st |
| mintty | Thomas Wolff | Windows (Cygwin, MSYS2, WSL) | own (PuTTY lineage) | xterm |
mintty |
mintty --version; XTVERSION |
mintty.github.io | github.com/mintty/mintty |
| PuTTY | Simon Tatham et al. | Windows, Unix | own | xterm (configurable) |
— | About dialog; putty --version ? |
PuTTY manual | git.tartarus.org/simon/putty.git |
| Windows Terminal (and conhost/ConPTY) | Microsoft | Windows | ConPTY + own renderer | none set by the terminal | — | wt -v; About |
learn.microsoft.com | github.com/microsoft/terminal |
| Apple Terminal | Apple | macOS | own | xterm-256color |
Apple_Terminal |
TERM_PROGRAM_VERSION |
Terminal User Guide | closed |
| iTerm2 | George Nachman | macOS | own | xterm-256color |
iTerm.app |
TERM_PROGRAM_VERSION; XTVERSION ? |
iterm2.com/documentation | github.com/gnachman/iTerm2 |
| xterm.js: VS Code, Hyper, Tabby, ttyd, JupyterLab, Theia | xterm.js project | browser, Electron | xterm.js core | host decides | host decides (vscode sets TERM_PROGRAM=vscode) |
package version | xtermjs.org | github.com/xtermjs/xterm.js |
| Rio | Raphael Amorim | Linux, macOS, Windows | own (Rust) | rio |
— | rio --version |
raphamorim.io/rio | github.com/raphamorim/rio |
| Warp | Warp | macOS, Linux, Windows | own | xterm-256color |
WarpTerminal |
About | docs.warp.dev | closed core |
| Terminology | Enlightenment | Linux, BSD | own (EFL) | xterm-256color |
— | terminology --version |
enlightenment.org | git.enlightenment.org |
| Termux | Termux | Android | own (Java) | xterm-256color |
— | app version | wiki.termux.com | github.com/termux/termux-app |
| mlterm | Araki Ken | X11, Wayland, others | own | xterm |
— | mlterm --version |
mlterm.sourceforge.net | github.com/arakiken/mlterm |
| Emacs vterm / eat | community | Emacs | libvterm / own (Elisp) | xterm-256color / eat-truecolor |
— | package version | emacs-libvterm, eat | same |
| tmux | Nicholas Marriott | Unix | own (multiplexer) | tmux-256color or screen-256color |
— | tmux -V |
tmux(1) | github.com/tmux/tmux |
| GNU screen | GNU | Unix | own (multiplexer) | screen / screen-256color |
— | screen -v |
gnu.org/software/screen | git.savannah.gnu.org/screen |
| zellij | zellij project | Unix | own (multiplexer) | inherits the outer TERM |
— | zellij --version |
zellij.dev | github.com/zellij-org/zellij |
"Default TERM" is what a fresh session sees before shell startup files run.
Distributions, hosts, and users change it; treat the column as a hint about
which terminfo entry the emulator's authors expect, not as a detection method.
Families and shared engines¶
VTE. GNOME Terminal, Ptyxis, Tilix, xfce4-terminal, Terminator, Black
Box, and many smaller programs embed libvte. The escape-sequence parser,
mode table, and reports all live in the library, so a compatibility claim
about "GNOME Terminal 3.52" is really a claim about the VTE version it links
against. Host applications differ in menus, profiles, and which security
knobs they expose, not in wire behavior. Use vte-2.91 package versions or
XTVERSION to identify the engine.
xterm.js. VS Code's integrated terminal, Hyper, Tabby, ttyd, JupyterLab,
and Theia render through xterm.js. The core parser and screen model are
shared; graphics, clipboard, and Unicode-width behavior arrive as addons that
each host chooses to load or not. A host also owns the PTY and therefore
TERM, COLORTERM, and TERM_PROGRAM. Two hosts on the same xterm.js
version can differ in every one of those.
ConPTY. On Windows every terminal that runs console programs talks to them through the console subsystem. ConPTY is a pseudo-console that sits between the terminal and the application: the application's console API calls and VT output are turned into a rendered screen state, and ConPTY re-emits that state as a new VT stream to the terminal. Sequences the console host does not model are dropped or rewritten, cursor and attribute state may be re-serialized differently from what the application wrote, and input is re-encoded on the way in. Windows Terminal, VS Code on Windows, mintty when hosting native programs, and WezTerm on Windows all inherit these transformations. See Windows Terminal.
PuTTY lineage. mintty began as a fork of PuTTY's terminal core and has since diverged extensively; the two should be treated as separate terminals.
Multiplexers. tmux, screen, and zellij are emulators toward the programs inside them and applications toward the terminal outside. Each keeps its own screen model, so a feature must be supported by the multiplexer to reach an inner program, and by the outer terminal for the multiplexer to render it. Passthrough mechanisms exist for opaque payloads but not for state the multiplexer must track, which is why graphics, keyboard protocols, and synchronized output are the usual casualties. See tmux.
Choosing baseline behavior¶
The practical lowest common denominator is the behavior implied by the
xterm-256color terminfo entry: 7-bit controls, ECMA-48 cursor and erase
commands, SGR with 16 and 256 colors, DEC private modes 1, 7, 25, 47/1049,
and the xterm mouse and bracketed-paste modes. Every terminal in the table
above implements that set, including Apple Terminal, PuTTY, and ConPTY-hosted
terminals, with the caveats noted on each page.
Beyond that baseline, ask rather than assume. These probes are safe on every listed terminal because every one of them either answers or ignores the query without visible side effects:
- DA1 (
CSI c): universally answered; the reply identifies a DEC model class and some feature flags. See CSI queries. - DECRQM (
CSI ? Ps $ p): the correct way to learn whether a mode is supported and its current value; unsupported queries are silently ignored by older terminals, so use a timeout. - XTVERSION (
CSI > 0 q): identifies emulator and version when answered; see XTVERSION. - XTGETTCAP (
DCS + q … ST): asks for terminfo capabilities from the terminal itself; see XTGETTCAP. - Kitty keyboard query (
CSI ? u): answered only by terminals that implement the protocol; see Keyboard.
Sequence a probe run so that a terminal answering only DA1 still yields a usable result: send the optional queries first and DA1 last, then read until the DA1 reply arrives or a timeout elapses. Everything before the DA1 reply is attributable to the earlier queries.
These are not safe to assume from TERM alone: truecolor, underline
styles, OSC 8, OSC 52, any graphics protocol, the Kitty keyboard protocol,
synchronized output, and grapheme clustering. Each has a page with the
detection method that works.
Compare feature support¶
Use the comparison page for support assessments, versions, limitations, and evidence. Every registered terminal can be selected there.