Terminals

More realistically, terminal emulators, because anyone who owns an actual working VT102 these days is not using it to do work

2018-10-10 — 2025-10-22

Wherein terminals are surveyed and graphics support via Sixels is noted, GPU‑acceleration and Python APIs are described, and platform targets—such as macOS‑only iTerm2—are catalogued.

computers are awful
faster pussycat
plain text
POSIX
Figure 1

1 Graphics in terminal

It’s kind of possible, but annoying. The mediocre de facto standard is Sixels. There’s a program called Chafa (see Introduction) that renders graphics to the various standards people created when they got fed up with mediocrity.

2 Which terminal?

2.1 iterm2

A terminal famous for its thoughtful UI. macOS only.

It has so many features — maybe dangerously many? Anyway, here are some of them: tmux integration. Little utilities that do useful things, like using scp to copy files from a remote host to our local folder. Python API (see the tutorial). 1

If we’re using systems other than macOS, read on.

2.2 Ghostty

Ghostty: “what if Alacritty but actually finished.” Ghostty is pitched as a terminal emulator that refuses the old trade-offs: we don’t have to choose between speed, features, native UI—it wants all three.

Claims

  • GPU-accelerated rendering via Metal on macOS / OpenGL on Linux.
  • Native UI toolkits: GTK4/libadwaita on Linux, SwiftUI/AppKit on macOS. No Electron-style web wrapper. Windows support is “planned for the future.”
  • All the features we expect: tabs, splits, windows, themes, ligatures, emoji clusters, and even the Kitty graphics protocol support.
  • A fairly recent arrival, started by Mitchell Hashimoto (the HashiCorp guy), so it comes with some cachet.

2.3 Hyper

If we’re worried our terminal doesn’t use enough RAM to make us feel like we’re getting value from our expensive new laptop, we can use hyper, which is a JavaScript app take on terminal emulation. It’s not too bad for one of these web technology desktop app things. It has lots of sexy features and nice graphics, to compensate for the obviously hefty RAM usage.

Weird quirk #1: It doesn’t support dragging files into the terminal, which pretty much every alternative does. qweasd1’s hyper-drop-file extension adds that support.

hyper install hyper-drop-file

Weird quirk 2: Anything that looks like a URL in the terminal becomes a link, and the terminal will aggressively open it if you click on it or even drag over it, which is annoying and slightly dangerous. Apparently this behaviour is now configurable and I can put webLinksActivationKey: ctrl in my config file to only do it on Ctrl-Click.

2.4 VS Code built-in terminal

VS Code has a built-in terminal. It’s pretty good, as long as we don’t need full-screen; it’s ubiquitous and therefore useful. There are a lot of things it doesn’t quite do right. If I run into weird terminal problems, it’s usually because I’m using the VS Code terminal.

On the other hand, it’ RIGHT THERE when I need it, and that’s often more important than perfection.

2.5 Zellij

Terminal multiplexer Zellij surprisingly includes a terminal emulator: The Zellij Web Client..

2.6 Cmder/ConEmu

Windows consoles that also speak the Linux terminal: Cmder seems to be a passable example. It seems to be a friendlified, packaged version of ConEmu.

Cmder can also work best with bash on Windows. Bash is the default shell found on *NIX systems such as Linux and macOS.

Apparently, it doesn’t even need ConEmu:

For the best experience, we suggest that you integrate your favourite IDEs with Cmder – it makes your editor terminal work as productive as Cmder shell itself. How does that work then?

2.7 Alacritty

Alacritty (Source) is a GPU-accelerated terminal emulator that aims to draw text really fast and be otherwise minimalistic. That wasn’t my main problem with terminals, so I hadn’t tried it. I recant. A fast, simple terminal that isn’t so strict about simplicity as st is useful. It’s written in Rust, which gives it some hip points. It has fewer features that can break than Hyper does. Runs on POSIX and Windows.

Project announcement

The project’s architecture and features are guided by a set of values:

  1. Correctness: Alacritty should be able to properly render modern terminal applications like tmux and vim. Glyphs should be rendered properly, and the proper glyphs should be displayed.
  2. Performance: Alacritty should be the fastest terminal emulator available anywhere.
  3. Appearance: Alacritty should have beautiful font rendering and look fantastic on all supported platforms.
  4. Simplicity: Alacritty should be conservative about which features it offers. As we’ve learned from past terminal emulators, it’s far too easy to become bloated. st taught us that it doesn’t need to be that way. Features like GUI-based configuration, tabs and scrollback are unnecessary. The latter features are better provided by a terminal multiplexer like tmux.
  5. Portability: Alacritty should support major operating systems including Linux, macOS, and Windows.

2.8 st

simple terminal aims to have fewer lines of code than anything else and as few features as are useful. It sticks to the essentials and is tiny.

2.9 Warp

Warp, the “blazingly fast, Rust-based terminal” has presumably even more Rust cred than Alacritty, because Rust is in the slogan. It has lots of hype-friendly features such as shared and networked connections, encryption, multiple cursors and inline manuals.

It’s USD 180/year for the Pro version, which includes AI assistance and networked doohickeys. The free version has usage caps, but still seems respectable.

2.10 kitty

Kovid Goyal made a terminal with C inner loops and Python UI extensibility called kitty. It’s not famous, but it’s probably worth checking, since Kovid is a powerhouse of feature-packed development. I suspect it may have too many features, because that’d be on-brand for Kovid. It runs on macOS and other Unices.

2.11 terminator

terminator seems to be an acceptable default option for a pure native GNOME app without many frills.

2.12 Tilix

Tilix is a terminal emulator that GNOME people tend to like. It has consistent keyboard shortcuts, tiling (but tiles terminals only), and integrates into the GNOME experience. The tiles don’t spark joy for me; if I wanted to tile things I’d tile more than only terminals.

2.13 xterm

It’s old and messy — let it go.

2.14 Terminus

terminus supports some HTML graphics, and appears to work-ish.

2.15 TermKit

This designerly, graphics-friendly terminal aims to reinvent terminal protocols! It has a fascinating vision statement! Sadly, it’s dead in the water.

3 Terminal multiplexers

See terminal session management

Footnotes

  1. I can’t help feeling superstitious that a Python API for a terminal invites security holes. This feels like adding a web server to your pacemaker. Anyway, it’s simple, easy, and it works.↩︎