Linux Terminal Feature Support Matrix
Linux has more terminal emulators than it has opinions about init systems, and every one of them claims to be modern. This page is what nine of them actually do with the escape codes your editor, prompt and image viewer send, on the settings they ship with. It is the Linux half of the macOS feature matrix, tested the same way.
Ghostty and WezTerm handle nearly everything here, exactly as they do on a Mac. kitty misses only overline and sixel. Konsole is the surprise: both image protocols, every underline style and the clipboard, though its hyperlinks are switched off and it ignores most questions about itself. foot draws sixel and every emoji but not kitty graphics. GNOME Terminal and Ptyxis, both built on VTE, are solid on text but draw no images, won’t touch the clipboard and come apart on combined emoji. Alacritty is as it is on macOS: fine on text, no images at all. xterm, on factory settings, manages 24-bit colour and very little else from this century, though much of what it lacks is switched off rather than missing.
Feature support by terminal
Section titled “Feature support by terminal”| Feature | Alacritty | foot | Ghostty | GNOME Terminal | kitty | Konsole | Ptyxis | WezTerm | xterm |
|---|---|---|---|---|---|---|---|---|---|
| Colour | |||||||||
| 24-bit colour (truecolor) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Text styles | |||||||||
| Italic | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Bold and italic together | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 1No |
| Dim | Yes | Yes | Yes | 2No | Yes | 3Partly | Yes | Yes | No |
| Strikethrough | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Overline | No | No | Yes | Yes | No | Yes | Yes | Yes | No |
| Underlines | |||||||||
| Single | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 4No |
| Double | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 5No |
| Curly (undercurl) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 5No |
| Dotted | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 5No |
| Dashed | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 5No |
| Coloured underline | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 5No |
| Characters | |||||||||
| Emoji | 6Partly | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
| Emoji skin tones | 7No | Yes | Yes | 7No | Yes | Yes | 7No | Yes | No |
| Flag emoji | 8No | Yes | Yes | 8No | Yes | Yes | 8No | Yes | No |
| Combined emoji (family) | 9No | Yes | Yes | 9No | Yes | Yes | 9No | Yes | No |
| Double-width CJK | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Box drawing and blocks | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Ligatures, default font10 | No | No | Yes | No | No | No | No | Yes | No |
| Nerd Font icons, default font10 | 11Partly | 12Partly | Yes | 12Partly | Yes | 12Partly | 12Partly | Yes | No |
| Images | |||||||||
| Sixel | No | Yes | No | No | No | Yes | No | Yes | 13No |
| kitty graphics protocol | No | No | Yes | No | Yes | Yes | No | Yes | No |
| Hyperlinks and clipboard | |||||||||
| Hyperlinks (OSC 8) | Yes | 14Yes | 15Yes | Yes | Yes | 16No | Yes | Yes | No |
| Copy to clipboard (OSC 52) | Yes | Yes | Yes | No | Yes | Yes | No | Yes | 17No |
| Protocols (the terminal's own answer) | |||||||||
| kitty keyboard protocol | Yes | Yes | Yes | No reply | Yes | No reply | No reply | 18No reply | No reply |
| Synchronised output (mode 2026) | Yes | Yes | Yes | No | Yes | No reply | No | Yes | No |
| Bracketed paste (mode 2004) | Yes | Yes | Yes | Yes | Yes | No reply | Yes | Yes | Yes |
| Focus events (mode 1004) | Yes | Yes | Yes | Yes | Yes | No reply | Yes | Yes | Yes |
| SGR mouse reporting (mode 1006) | Yes | Yes | Yes | Yes | Yes | No reply | Yes | Yes | Yes |
| Grapheme clustering (mode 2027) | No | Yes | Yes | No | No | No reply | No | Yes | No |
| Light/dark mode query | No reply | No reply | Yes | No reply | Yes | No reply | No reply | No reply | No reply |
| Light/dark change notices (mode 2031) | No | No | Yes | No | Yes | No reply | No | No | No |
| In-band resize (mode 2048) | No | Yes | Yes | No | Yes | No reply | No | No | No |
| Colour queries (OSC 10/11) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Reports its name and version (XTVERSION) | No reply | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Answers terminfo queries (XTGETTCAP) | No reply | Yes | Yes | Yes | Yes | No reply | Yes | Yes | No reply |
- Slanted, but not bold.
- Drawn exactly like plain text on the default black-on-white theme. Ptyxis, with the same VTE and a dark theme, dims visibly.
- Fainter, but only just: #EFF0F1 against the plain text's #FCFCFC.
- Ignores the colon form of the code used here (4:1); the ordinary ESC[4m does underline.
- Ignores the colon form of the underline codes used here (4:2, 58:2 and so on), so nothing is underlined.
- Drawn as a black-and-white outline from a text font, not as a colour emoji.
- Draws the thumb and the skin-tone swatch separately.
- Shows the two regional-indicator letters instead of a flag.
- Draws the three people separately, three times the width.
- Depends on the font the terminal ships with as much as on the terminal: any terminal here can be given a font that has them.
- Draws powerline arrows itself, and finds the GitHub and Apple logos in an installed font; the other icons are boxes.
- Finds the GitHub and Apple logos in an installed font; the other icons are boxes.
- Built in, but off unless xterm is told to emulate a VT340: xterm -ti 340.
- Not on hover: links are highlighted only in URL mode, Ctrl+Shift+O.
- Shown only while Ctrl is held.
- Off by default: the profile setting Allow escape sequences for links turns it on.
- Off by default: the allowWindowOps resource turns it on.
- Off by default; enable_kitty_keyboard = true turns it on.
Reading the matrix
Section titled “Reading the matrix”- ✓ works, ✗ doesn’t, and ◐ sort of works: the footnote says how.
- – means the terminal ignored the question. That usually means it lacks the feature, but not always: a terminal can support something and still not answer when asked about it.
- Every feature name is a link to its own row, for pointing someone at the one result that settles the argument.
Most rows record what turned up on screen. Hyperlinks and the clipboard record what happened when they were used, and the protocol rows at the bottom record the terminal’s own reply when asked whether it supports them.
How the results were gathered
Section titled “How the results were gathered”The method is the macOS one: the same test pattern, screenshotted for every row from colour to images (all nine are below); the same link-hovering for OSC 8; the same clipboard round trip for OSC 52; the same standard queries for the protocol rows. The results are available as JSON, replies included, under CC BY 4.0: use them for anything, as long as you credit terminal.ninja.
What changes on Linux is where the terminals ran. Each one got a headless sway of its own on Ubuntu 25.10: a Wayland desktop with no screen, started for that terminal and thrown away afterwards, with its own D-Bus session and empty configuration directories. That keeps every terminal on factory settings (no config file, no dconf database, no fonts installed by hand), while the system’s own defaults stay as Ubuntu ships them. A terminal that doesn’t bundle a font therefore gets DejaVu Sans Mono, which is why the font rows mostly measure fonts. A few details differ from the Mac run, each for a reason:
- The display is scaled 2x, like a HiDPI laptop. xterm, an X11 program, ran at 1x instead, because sway would otherwise draw it small and blow it up.
- Every terminal that can draw its own title bar did, as on GNOME. Three can’t be talked into it under sway (xterm, GNOME Terminal and Ghostty), and theirs is a plain grey bar from the window manager.
- kitty’s default window here is 71 columns wide, and the pattern needs 80, so kitty alone was given a wider window. Nothing else about it changed.
- Hovering over links was tried with and without Ctrl, the Linux counterpart of Cmd. foot documents a key that shows links, and that was tried too.
- Each window got the focus and a key press before testing started. Wayland only lets a program write to the clipboard in response to input, so without one, two terminals that support OSC 52 failed for reasons that had nothing to do with them.
The screenshots
Section titled “The screenshots”Row B is row A forced into 256 colours, so a terminal that rounds 24-bit colour down draws A with B’s bands. The rulers mark where each emoji and CJK character should end.

0.17.0
1.21.0
1.3.1
3.56.2, VTE 0.80.3
0.49.2
25.08.1
49.1, VTE 0.80.3
20260929-043349-cab25161
402What the gaps cost you
Section titled “What the gaps cost you”The macOS page explains what each of these features is for. On Linux, the picture is this.
Which Linux terminals support truecolor?
Section titled “Which Linux terminals support truecolor?”All nine draw it, xterm included. If colours look wrong, the cause is almost certainly
$TERM or tmux, not the terminal.
Which Linux terminals support undercurl?
Section titled “Which Linux terminals support undercurl?”Eight of the nine draw every underline style in colour, so an editor’s red squiggle under a
spelling mistake shows up as intended. Konsole’s squiggle is a stepped zigzag rather than a wave,
but nobody will mistake it for anything else. xterm draws none of them: it ignores the
colon-separated form of the codes (4:3 for curly) that editors use, though the ordinary
single underline works.
Which Linux terminals support sixel and kitty graphics?
Section titled “Which Linux terminals support sixel and kitty graphics?”Sixel comes from foot, Konsole and WezTerm; kitty graphics from Ghostty, kitty, Konsole and
WezTerm. Konsole and WezTerm are the only two that do both. Alacritty, GNOME Terminal and Ptyxis
do neither, and xterm has sixel built in but switched off until it is told to emulate a VT340
(xterm -ti 340).
Which Linux terminals get emoji width right?
Section titled “Which Linux terminals get emoji width right?”foot, Ghostty, kitty, Konsole and WezTerm draw skin tones, flags and families as single emoji and keep the rest of the line in place. Alacritty, GNOME Terminal and Ptyxis draw the pieces separately, and xterm’s default bitmap font has no emoji at all. Alacritty doesn’t even get the plain thumbs up right: it borrows the outline version from a text font instead of the colour one.
Which Linux terminals support OSC 8 hyperlinks?
Section titled “Which Linux terminals support OSC 8 hyperlinks?”Alacritty, GNOME Terminal, kitty, Ptyxis and WezTerm underline a link as soon as the pointer is over it; Ghostty only while Ctrl is held. foot shows links only in its URL mode (Ctrl+Shift+O), where it labels each one with a key to open it. Konsole supports them but ships with them off, and xterm doesn’t support them.
Which Linux terminals support OSC 52 copying?
Section titled “Which Linux terminals support OSC 52 copying?”Alacritty, foot, Ghostty, kitty, Konsole and WezTerm accept it as they come, which is what makes
a yank in Neovim over SSH land on your own clipboard. GNOME Terminal and Ptyxis don’t support it,
which is a real gap for anyone who works on remote machines. xterm supports it but blocks it
until its allowWindowOps resource is set.
Which Linux terminals support the kitty keyboard protocol?
Section titled “Which Linux terminals support the kitty keyboard protocol?”Alacritty, foot, Ghostty and kitty offer it out of the box. WezTerm leaves it off until you set
enable_kitty_keyboard = true, as on macOS. GNOME Terminal, Konsole, Ptyxis and xterm don’t
answer the question.
Which Linux terminals support synchronised output?
Section titled “Which Linux terminals support synchronised output?”Alacritty, foot, Ghostty, kitty and WezTerm support it. GNOME Terminal, Ptyxis and xterm say they don’t recognise it, and Konsole doesn’t answer. Without it, a full-screen redraw can flicker.
The other protocols
Section titled “The other protocols”The macOS page explains what each of these is for. Konsole answers only the colour queries and XTVERSION, so the rest of its cells are dashes, not crosses: silence rather than a confirmed no.
- Bracketed paste (mode 2004), focus events (mode 1004) and SGR mouse reporting (mode 1006): the other eight support all three.
- Grapheme clustering (mode 2027): foot, Ghostty and WezTerm. Alacritty, GNOME Terminal, kitty, Ptyxis and xterm decline.
- The light/dark mode query, and change notices (mode 2031): only Ghostty and kitty, for both. Everything else ignores the query and declines the notices.
- In-band resize (mode 2048): foot, Ghostty and kitty. Alacritty, GNOME Terminal, Ptyxis, WezTerm and xterm decline.
- Colour queries (OSC 10/11): all nine answer.
- XTVERSION: everything except Alacritty reports its name and version. XTGETTCAP: foot, Ghostty, GNOME Terminal, kitty, Ptyxis and WezTerm answer; Alacritty, Konsole and xterm don’t.
Same terminal, different OS
Section titled “Same terminal, different OS”Alacritty, Ghostty, kitty and WezTerm were tested on both systems at the same or near-identical versions. Ghostty, kitty and WezTerm gave the same answer to every question on both, screenshots and protocol replies alike; the only difference is Ghostty’s link key, which follows each system’s convention: Cmd on a Mac, Ctrl on Linux.
Alacritty matched on everything except two rows that are about fonts. It ships none of its own, so it draws emoji and icons with whatever the system has. On a Mac that means Apple’s colour emoji; on Ubuntu, it picks up a black-and-white thumbs up from a text font first, while finding a couple more icons than macOS gave it. Every protocol answer was identical. Pick one of these four and it behaves the same on both machines, give or take the fonts underneath.
Which terminal to pick
Section titled “Which terminal to pick”The matrix says what each terminal does, not which one to live in. For that, see the terminal emulator roundup and the Alacritty vs kitty head-to-head. The ligature and icon rows are really about fonts, which the fonts guide covers properly.