GNOME Terminal — ANSI escape code support
GNOME Terminal is the flagship terminal emulator of the GNOME desktop, built on libvte (the VT engine GNOME has maintained since 2002 and shared with xfce4-terminal, lxterminal, terminator, tilix, guake, and a long tail of other emulators). When libvte ships a new escape-sequence feature, every downstream consumer inherits it on next rebuild — making libvte's roadmap a de-facto floor for the entire GTK terminal ecosystem.
For ANSI escape compatibility, GNOME Terminal is broadly xterm-compatible: full SGR (24-bit color, bold, italic, strikethrough), full cursor + erase + scroll, mouse modes, bracketed paste, alt-screen pair, full styled underlines (SGR 4:1–4:5) including underline color (SGR 58). OSC 8 hyperlinks landed in libvte 0.50 (2017) — Gnome was actually first to ship them. Notable absence: no Sixel, no kitty graphics, no iTerm2 OSC 1337 inline images (libvte issue #253 tracks the long-standing Sixel request, with patches landing for libvte 0.78 in 2024).
Last updated
Feature support
How this terminal scores against the 15 features tracked in the site-wide support matrix. Click any feature name to see the full row across every terminal.
- 8 basic colors (30–37 / 40–47)SGR 30–37 foreground, 40–47 background.yes
- Bright (aixterm) colors (90–97 / 100–107)aixterm SGR extension.yes
- 256-color palette (38;5;n / 48;5;n)xterm 256-color extension.yes
- 24-bit truecolor (38;2;r;g;b)16.7M direct RGB. Set $COLORTERM=truecolor.yes
- Italic (SGR 3)Italic text attribute.yes
- Styled underlines (4:1–4:5)Curly/dotted/dashed underline styles.yes
- Strikethrough (SGR 9)Horizontal line through text.yes
- OSC 8 hyperlinksInline clickable URIs.yes
- Alt screen (?1049h)Full-screen app buffer.yes
- Mouse tracking (SGR ?1006)Mouse click/drag events.yes
- Bracketed paste (?2004)Pasted text wrapped in ESC[200~/ESC[201~.yes
- Focus events (?1004)ESC[I on focus in, ESC[O on focus out.yes
- Sixel graphicsDEC sixel inline raster images.no
- Kitty graphics protocolPNG/RGB inline images, animations.no
- Synchronized output (?2026)Atomic frame updates to avoid tearing.yes
Sequences that work here
Canonical reference pages for the escape sequences this terminal handles cleanly. Each links to a full page with byte forms, citations, and per-language examples.
- SGR 38;2;R;G;B — 24-bit truecolor foreground
\x1b[38;2;R;G;BmPick any of 16,777,216 foreground RGB colors directly.
- OSC 8 — Inline hyperlink
\x1b]8;;URI\x07TEXT\x1b]8;;\x07Render clickable hyperlinks in terminal output (gnome-terminal 3.26+, iTerm2, Windows Terminal, kitty, ...).
- SGR 3 — Italic
\x1b[3mRender following text in italic; not universally supported.
- DECSET ?2004 — Bracketed paste mode
\x1b[?2004h (enable) \x1b[?2004l (disable)Wrap pasted text in distinct escape markers so apps can tell paste from typing.
- DECSET 1049 — Alternate screen buffer
\x1b[?1049h (enter) \x1b[?1049l (leave)Switch to a separate screen buffer (like vim/less do on launch).
Quirks & version notes
Per-terminal caveats you'll want to know before relying on a sequence in production.
- libvte-shared engine — many siblings ship the same support set
- GNOME Terminal, xfce4-terminal, terminator, tilix, guake, lxterminal, and the Pantheon Terminal all link the same libvte. A feature lookup like "does xfce4-terminal support OSC 8?" is really a libvte version lookup. Detect via DA3 (`CSI = c` reply) or `$TERM_PROGRAM` for the GNOME-specific app, but the actual capability bar is set by the libvte version on the system — `gnome-terminal --version` is misleading.
- $TERM defaults to xterm-256color, not gnome-256color
- Despite shipping libvte-specific extensions (full Smulx styled-underline support, OSC 8 hyperlinks since libvte 0.50), `$TERM=xterm-256color` is the out-of-the-box default. The `vte` and `vte-256color` terminfo entries exist (ncurses 6.0+) and advertise Smulx; opt in by setting `$TERM=xte-256color` in the profile or by editing `Preferences › Profile › Compatibility`. Most users never switch — software that wants the extra capabilities should DA1-probe rather than read $TERM.
- No Sixel / kitty graphics / OSC 1337 inline images
- libvte has been the longest holdout on inline-image rendering — Sixel patches landed in libvte 0.78 (2024) but only as an opt-in build flag, and GNOME Terminal hasn't enabled it by default on any major distro yet. Apps that emit Sixel (chafa, timg, neofetch-image, IPython matplotlib display) see the raw escape bytes printed as garbage. Workaround: feature-detect via DA1 (`CSI c` reply contains `4` for sixel) before emitting; tools like `chafa` already check this. For kitty graphics + OSC 1337, there's no roadmap.
- OSC 8 hyperlinks: first major terminal to ship them
- libvte 0.50 (Sep 2017) was the first widely-deployed terminal to render OSC 8 hyperlinks — a year before iTerm2 (2018) and three years before xterm 359 (2020). Most distro shells ship `ls --hyperlink=auto` aliases targeting this support. The `id=foo` segment of the OSC 8 syntax is honored — hovering anywhere in a multi-line link with the same `id` highlights the whole link as a single unit. No config flag needed; it's always on.