(This entry is now on its third revision. Not much has changed.)
This is going to be a big one. Here follows a [hopefully factual] comparison and [hopefully useful] subjective review of N terminal emulators. The following three constraints will be in effect:
They have to run on one of the systems that I have easy access to. That means Debian Stable (Trixie, currently) or MacOS Sequoia (15.something). It also means that while I will note the availability of Wayland, fbdev, or stranger runtime platforms, I will only be doing evaluations on X11 and MacOS. I don’t see the point of running fbterm since all the situation in which I would do so, I already have the Linux console at hand. Nor am I going to review terminals that operate inside editors, IDEs, or whatever – you aren’t going to change IDEs because it has a great terminal, or if you are, the other features of the IDE need to be acceptable to you.
I have to know about them. Obviously.
I have to reasonably easily find a project page for each item.
Here’s the initial list:
Runs on MacOS:
- Mac terminal
- iterm
- alacritty
- wezterm
- kitty
Runs on X11:
- alacritty
- blackbox
- cool-retro-term
- deepin-terminal
- kitty
- ghostty
- gnome-terminal
- guake
- konsole
- lomiri-terminal-app
- lxterminal
- mate-terminal
- pterm
- ptyxis
- qmlkonsole
- qterminal
- rxvt (urxvt/rxvt-unicode)
- sakura
- stterm
- sugar-terminal-activity
- terminal.app (OpenStep)
- terminator
- terminology
- termit
- tilda
- tilix
- wezterm
- xfce4-terminal
- xterm (the original!)
- yakuake
- zutty
What do I want to note about each of them?
Who is writing this, and if they win a lottery and retire, is there an organization to keep it going? Alternatively, is this going to sprout ads and spyware next year?
What is the project’s point of view? Are they making a tool that makes them happy, a work of technical art, or trying to be all things to everyone?
Licensing?
What’s the configuration method? In particular, how hard is it to make it pop up with a particular color choice and font choice?
Can it play nsnake? This is a functionality test. It’s not exhaustive. And it turns out to be semi-useless in distinguishing terminals: only cool-retro-term had terrible problems, and qterminal had a very strange drawing bug.
If I ask it to show me 256 colors, is it hard? This turns out to be a no-brainer these days… except on cool-retro-term and terminal.app. Those just don’t support modern color. Some of the term-ems let you pick exactly which RGB colors will be assigned to the 16 standard slots, some of them require you to organize them into themes or palettes, and at least one doesn’t care about your opinion.
And then some subjective stuff.
On configuration methods:
All of these are configured with some combination of:
- command line options
- GUI menus, usually Edit -> Preferences or File -> Settings
- config files, written in YAML or TOML or key=value or JSON or Lua or something really wacky.
- the X resource database, Xrdb
- and one of them has no configuration and requires you to re-compile it each time you want to change an option.
On performance:
My contention is that there are only two relevant performance factors in these term-ems, and one is much more interesting than the other. First, of less concern, is startup time. Unless this is egregiously bad, you don’t care. Second, of more concern, is the latency from touching a key on your keyboard to displaying it on screen. Assuming a 60Hz display, any value consistently under 16ms (one frame) is fine. There’s a nice write up at https://beuke.org/terminal-latency/ comparing many of these term-ems. The projects with low latency are, in order:
- xterm
- alacritty
- kitty
- zutty
- sl
and, just above the 16ms cutoff:
- rxvt (urxvt)
- konsole
People have suggested that scrolling ability is somehow a
differentiating factor. Here’s a few terminals running
time find /usr, all on the same system, without needing to
do any disk work because I pre-ran the command and the metadata is all
loaded up in memory:
xterm: real 0m2.210s user 0m0.526s sys 0m1.645s
alacritty: real 0m2.240s user 0m0.581s sys 0m1.647s
konsole: real 0m2.767s user 0m0.507s sys 0m1.676s
zutty: real 0m2.283s user 0m0.552s sys 0m1.708s
wezterm: real 0m2.770s user 0m0.517s sys 0m1.746s
I don’t think any of these are meaningfully different to a human. Yes, they were all rendering the same OpenType font at the same size.
On subjectivity:
Everyone is entitled to their own opinion, not to their own facts. If I have misstated anything factual herein, please let me know via email - dsr-blog at this domain - and I will confirm it and get it corrected.
Let’s start the reviews.
alacritty: a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration.
Dev team: one main dev and several people who seem to be familiar with the code base and are making contributions.
Maturity: Alacritty is technically in beta; it has been around since 2017. Github issues are discussed actively.
License: Apache and MIT, I think.
Config method: TOML; earlier versions used YAML and there is a conversion command built-in.
Config colors: 18 named colors (foreground, background, and 16 slots)
Config fonts: separate choices for each of regular, bold, italic, and bold-italic.
Obviously alacritty is the best of all possible terminal emulators, partially because it is written in Rust. It uses a fair amount of memory, though still about 30% less than wezterm. Alacritty works just the same way on MacOS, with a few extra config commands available to integrate with weird Macish things. There is a Windows version, too.
blackbox: An elegant and customizable terminal for GNOME
Dev team: one main dev, several people have contributed patches.
Maturity: Gitlab.gnome.org has at least been touched recently.
License: GPL3
Config method: GUI
Config colors: you will have to write a theme
Config fonts: one place to set one font
I don’t think anyone will argue that blackbox is the best of all possible terminal emulators, even if it does have the distinction of being written in Vala, a language I had not previously encountered. It feels mostly-working, but rough in a few places. If this sounds vaguely attractive, consider GNOME Terminal instead.
cool-retro-term: mimics the look and feel of the old cathode tube screens. It has been designed to be eye-candy, customizable, and reasonably lightweight.
Dev team: one dev
Maturity: no updates since 2022. Some folks are helping each other out with config and compile issues. License: GPL2 or 3
Config method: GUI
Config colors: foreground and background.
Config fonts: some terminal styles have a limited choice of fonts
There is a particular sense in which cool-retro-term is obviously the best of all possible terminal emulators, but you have to be committed. Specifically, C-R-T emulates the look of classic (1980-1995) CRT-based computers. All the visual distortion, low resolution, bizarre flickering… This is a special effect, not a daily driver for sane people.
deepin-terminal: an advanced terminal emulator with workspaces, multiple windows, remote management, quake mode
Dev team: Deepin Technology
Maturity: incomplete, buggy, and probably abandoned.
License: GPL 3
Config method: GUI
Config colors: No.
Config fonts: No, but you can change the size.
Don’t use this.
ghostty: fast, feature-rich and native
Dev team: one main dev who has recently opened the code, but a lot of contributors.
Maturity: Extremely active. However, the idea appears to be that there will be a control for every possible pixel/action combination, and they are busy assigning defaults. Things like “can it be installed in Debian Stable” are left to non-core volunteers
License: MIT
Config method: custom key=value file
Config colors: there are a lot of color-related keys scattered around the docs
Config fonts: I assume so, but…
I could not compile Ghostty, which is the best term-em in the world because it is written in Zig.
gnome-terminal: highly customizable GNOME terminal emulator
Dev team: GNOME.org
Maturity: “You are using a version which is too old and we won’t support it. Feel free to re-open the bug once you are up to date.”
License: GPL 3
Config method: GUI
Config colors: 16 boxes plus available themes
Config fonts: one font, one size
Part of the GNOME juggernaut. But it probably works, and if your bug is universal and repeatable, maybe it will get attention! Or not. The underlying term-em is VTE; you will see a bunch of term-ems which are basically wrappers around VTE. The good thing is that fixing a bug in VTE fixes it in all the others, soon enough. The bad thing is that any feature which requires changes to VTE might not get implemented. You probably have this installed already.
guake: a python based dropdown terminal made for the GNOME desktop environment. Guake’s style of window is based on an FPS game, and one of its goals is to be easy to reach.
Dev team: 247 contributors, no release in 2 years
Maturity: The official website is borken, and github issues haven’t been responded to by a dev in months.
License: GPL2
Config method: GUI
Config colors: Same as GNOME Terminal
Config fonts: Same as GNOME Terminal
Guake can’t run nsnake because the default size is less than 24 lines high, and I couldn’t figure out how to change that. There is a certain cool factor in the one thing that this term-em is named for, but other term-ems can do it better.
iTerm 2: brings the terminal into the modern age with features you never knew you always wanted.
Dev team: one dev
Maturity: active development, considered production-ready
License: GPL 2
Config method: GUI
Config colors: all of them
Config fonts: two: one for Western European languages, and one for all others
Like WezTerm, iTerm has never seen a feature in another term-em that it didn’t want to incorporate. MacOS-only. Aggressively hegemonizing swarm objects start like this, don’t say I didn’t warn you.
kitty: The fast, feature-rich, GPU-based terminal emulator
Dev team: one main dev with a strong opinion that everyone else is wrong.
Maturity: Extremely active, but that doesn’t mean they will fix the bug that annoys you.
License: GPL 3
Config method: a config file in an idiosyncratic key=variable dialect
Config colors: almost certainly, but not without the man pages
Config fonts: four font descriptors.
kitty demands that you adopt it as a way of life. You will learn kitty’s way of doing things; compatibility is other projects’ problem. They should do it kitty’s way, or maybe the dev will write a replacement for that project, too. It likes to log errors in the form “the application is trying to do something that Xterm does. Our way is better and the application should change.” Read the FAQ at https://sw.kovidgoyal.net/kitty/faq/ to set the mood.
konsole: a powerful and customizable term-em
Dev team: KDE
Maturity: Competent
License: GPL 2
Config method: GUI, a little odd
Config colors: via themes
Config fonts: one font, one size
There might not be anything distinctive here, but there doesn’t seem to be anything wrong, either.
lomiri-terminal-app: a core app for Ubuntu Touch’s Lomiri shell
Dev team: UBports Foundation
Maturity: last release is six years old, but there are recent commits
License: GPL 3
Config method: menu, but weird
Config colors: 16 plus themes
Config fonts: looks weird, but yes. One font, one size.
Apparently designed for a touch screen environment with a tiny physical or on-screen keyboard. Not notably well-designed; Android’s Terminal does better.
lxterminal: a VTE-based tabbed terminal with few dependencies
Dev team: LXDE
Maturity: Another competent VTE term-em
License: GPL 2
Config method: GUI
Config colors: Same as GNOME Terminal
Config fonts: Same as GNOME Terminal
If you are using LXDE because you need to save RAM, may I introduce you to xterm?
mate-terminal: a fork of GNOME Terminal
Dev team: MATE
Maturity: Some commits in the last year; working on Wayland compatibility
License: GPL 3
Config method: Menu
Config colors: Same as GNOME Terminal
Config fonts: Same as GNOME Terminal
It’s a fork of GNOME Terminal, but I don’t know why.
pterm: the X11 fork of putty
Dev team: a small group, same as putty
Maturity: pretty active
License: MIT
Config method: command line or Xrdb
Config colors: much like rxvt
Config fonts: much like xterm
It may be a different back end, but it looks a lot like xterm or rxvt.
Dev team: A large group? the README has been authored by a lot of people
Maturity: active development
License: GPL 3
Config method: Menu, GNOME-ish, weird.
Config colors: You must choose from unnamed, badly underspecified “palettes”.
Config fonts: One font, one size.
“engineered from the ground up for modern development workflows within the GNOME desktop, where local containers are first-class citizens. It simplifies and enhances your interaction with tools like Podman, Toolbox, and Distrobox, making them a natural extension of your terminal experience. Ptyxis is the default terminal in Fedora Workstation, Red Hat Enterprise Linux, and Ubuntu.” Smells like corporate bullshit to me.
qmlkonsole: offering additional buttons useful on touch devices
Dev team: KDE
Maturity: Released once a month since 2021, but is anyone using it?
License: GPL2
Config method: I can’t figure it out.
Config colors: Could be?
Config fonts: Mayhaps?
Not a good partner for Konsole.
qterminal
Dev team: LXDE
Maturity: Minor changes released recently, but the general attitude seems to be “patches welcome”
License: GPL 2
Config method: GUI
Config colors: Has themes
Config fonts: One font, one size.
First time I’ve seen a bug in nsnake. Not a good sign.
rxvt (urxvt/rxvt-unicode): a fork of a slimmed-down alternative to xterm with features added back in.
Dev team: At least one person at schmorp.de
Maturity: There are probably bugs, but by now other programs have worked around them.
License: GPL 2
Config method: command line or Xrdb
Config colors: sure
Config fonts: yup
xterm had too many features, so rxvt was born. People wanted more features and especially Unicode (and transparent/translucent backgrounds before compositors were a thing) so urxvt. xterm has Unicode these days, guys.
I have used xterm and rxvt more than any other term-ems.
sakura: simple GTK/VTE term-em
Dev team: a dozen contributors, but mostly one dev
Maturity: not really active. Clearly still has some bugs.
License: GPL 2
Config method: menu
Config colors: yes
Config fonts: yes
There are a bunch of simple gtk/vte terminal emulators, and this is one of them.
st: a simple terminal emulator
Dev team: a bunch of revisionist nazis
Maturity: Nope.
License: MIT
Config method: recompile it
Config colors: recompile it
Config fonts: recompile it
Nazi punks fuck off.
sugar-terminal-activity: a full screen text mode program that provides a CLI
Dev team: SugarLabs (defunct?)
Maturity: Something got fixed a few months ago.
License: GPL 2 or 3
Config method: first you have to figure out how to run it
Config colors:
Config fonts:
This is apparently a fork of Guake. If you aren’t using a Sugar Desktop, I don’t think this will work for you. It did not work for me.
terminal.app (GNUStep): A terminal
Dev team: abandoned? but installable in Debian stable
Maturity: retired
License: MIT
Config method: special GNUStep menus
Config colors: no
Config fonts: main and bold.
When people talk about how cool OpenStep was, I assume this is not what they had in mind. Debian has no bugs listed for this… ever. Perhaps it is perfected.
terminal.app (MacOS): A terminal
Dev team: Apple Computer
Maturity: adult
License: proprietary, included with MacOS
Config method: menus
Config colors: no
Config fonts: one font, one size
Technically this is the successor to the NeXTstep Terminal.app that the GNUstep one wants to copy. It’s much more usable, but it seems to get new features based on some problem that an Apple employee was having ten years ago, more than anything else.
terminator: The Robot Future of Terminals. Originally inspired by projects like quadkonsole and gnome-multi-term and more recently by projects like Iterm2, and Tilix, It lets you combine and recombine terminals to suit the style you like.
Dev team: one dev who is not backed up by GNOME.org
Maturity: has bugs; bugs are reported; people respond
License: GPL 2
Config method: GUI
Config colors: via themes and palettes
Config fonts: one font, one size.
They found a cool name so they had to come up with a project, I guess. Does this offer anything that other GTK/VTE term-ems don’t? Plugins. Did you want plugins? The dev wrote in and says the unique feature is terminal broadcasting, in which a sending terminal can have input sent to multiple receiver terminals, which treat it as input themselves. (Why do this? Think about handling several nearly identical machines at once.) This is actually a cool feature for small-shop sysadmins; I used to do it similarly with a wrapper called cssh (cluster ssh).
terminology: it has a whole bunch of bells and whistles
Dev team: Enlightenment Foundation
Maturity: Feels like an advanced beta
License: Maybe BSD. Hard to tell.
Config method: GUI, in ways you’ve never seen before
Config colors: many
Config fonts: at least one
When you have a few spare hours, you should visit the land of Enlightenment. It’s dedicated to the proposition that everything should move, glide, twinkle, effervesce, and generally be much cooler than you deserve. I don’t think you want to live there, though. I don’t. Has moments of extreme cleverness: the first time you run it, it will immediately ask you to adjust a slider until the text is a size that you like!
termit: a simple GTL/VTE term-em, extensible via Lua
Dev team: 12 contributors
Maturity: Had a release recently
License: GPL 3
Config method: GUI
Config colors: … no?
Config fonts: yes.
Yet another GTK/VTE.
tilda: it’s like guake?
Dev team: 59 contribs
Maturity: but no release in the year since 2.0. Nobody is reading the bug reports.
License: GPL 2
Config method: GUI
Config colors: 16 colors and themes
Config fonts: one font, one size
It’s another GTK/VTE, but only as a pull-down from the top of your screen.
tilix: an advanced GTK3 tiling terminal emulator that follows the Gnome Human Interface Guidelines
Dev team: One dev, unsupported by GNOME
Maturity: Not a whole lot of work visibly happening right now.
License: MPL 2
Config method: GUI - GTK3
Config colors: themes
Config fonts: one font, one size
There are people who love tiling, and want to see it in their term-em. There are others who love tabs, or want their window manager to tile, or hate all multitasking. It would be a boring software world if everyone liked the same things.
wezterm: A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
Dev team: Wez
Maturity: Active development but generally usable
License: MIT
Config method: Lua
Config colors: ships with over 700 themes
Config fonts: can be done with a minimum of one line of config… possibly no maximum
Obviously wezterm is the best of all possible terminal emulators, because it is written in Rust. If you can imagine a feature short of embedding emacs and a web browser, wezterm probably has it or will next version. The price for this is rather a lot of memory use. On MacOS, wezterm uses about twice as much memory as alacritty. On X11, about 30% more.
xfce4-terminal: a lightweight and easy to use terminal emulator application with many advanced features
Dev team: XFCE
Maturity: devs pay attention, users make suggestions
License: GPL 2
Config method: GUI
Config colors: 16 colors
Config fonts: one font, one size
I may be biased because I like XFCE4, but I have never used this terminal and of the VTE wrappers, it seems the least offensive.
xterm: a terminal emulator for the X Window System
Dev team: one dev
Maturity: The Standard
License: MIT
Config method: command line and Xrdb
Config colors: I don’t think so.
Config fonts: Yes, either on command line (fn for bitmap fonts, fa for adjustable TrueType/OpenType fonts). It will figure out italics and bolds by itself, assuming versions are available.
Obviously xterm is the best of all possible terminal emulators. It is the oldest. If it has an error that has not been fixed, it is the standard to which others aspire. It barely uses memory. It handles 256 color-mode just fine, by default. Why do you want 24-bit color anyway? Doesn’t matter: xterm handles 24-bit color now. It handles fixed fonts, it handles TrueType/OpenType fonts, and it supports Unicode, including weird little cartoons of pizza. It doesn’t mess with OpenGL, so maybe it isn’t quite as fast at something… but it has top scores for key-to-screen latency.
yakuake: a drop-down terminal for KDE
Dev team: KDE
Maturity: nah
License: GPL 2
Config method: didn’t bother, but I assume it’s GUI
Config colors: nope
Config fonts: uh-uh
Segfaulted on start.
zutty:
Dev team: one dev
Maturity: one dev is responsive
License: GPL 3
Config method: command line or Xrdb
Config colors: it knows about 256 colors which are the same as xterm’s. The first 16 can be overwritten
Config fonts: regular/bold/italic/bold-italic
Obviously zutty is the best of all possible terminal emulators, partially because it is written in C++. It uses a little less memory than alacritty, is fast like all the GL term-ems, and has just one small flaw, which might not be a flaw: if somebody sends you mail with one of those bizarre Unicode glyphs like [:pizza:] or [:ice cream indistinguishable from dog feces:], it just shows a nice square. Most other Unicode things are expected to work, though.
Let’s make some recommendations.
If you’re on both MacOS and an X11 box regularly and you would like complete consistency, your choice is between alacritty (if you want it to be relatively simple) and wezterm (if you don’t). And, three people who are not the author of kitty have written in to tell me that kitty runs on both, so it’s quite likely that at least three people use kitty besides the author.
What’s best on MacOS? alacritty and iTerm2 and wezterm and Terminal are all fine. I assume you are at least vaguely dissatisfied or else you wouldn’t be reading this. Start with alacritty if you were feeling short on speed. wezterm and iTerm2 are both competing for title of Most Shiny Bells and Shrill Whistles, so those might be attractive to you. If you want kitty, I assume you have a good reason.
What’s best on X11 boxes? Here are the good choices, as I see them:
xterm - don’t laugh. If your work happens through screen or tmux, you don’t need the term-em to provide tabs. It renders Unicode via OpenType fonts, in all the colors you can stand, sips memory through a straw, and is still obnoxiously fast at just about everything. Oh, and everything is compatible with xterm.
zutty - a modern take on xterm. You need a few more features and you have an OpenGLes-capable video card? Here you are.
alacritty - a big step up in features without giving up much speed. I suppose you want ligatures, too? OK.
xfce4-terminal - if you just want a term-em you can configure through a menu. You probably don’t want this one, actually – but it should be the one you recommend to people who are just starting out.
wezterm - because you want the Shiny and you are willing to search the docs until you find the prize. Eats the most memory. You can afford it.
-30-