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.
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.
- ghostty-org/ghostty: 👻 Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.
- About Ghostty
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.
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
bashon 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.
The project’s architecture and features are guided by a set of values:
- Correctness: Alacritty should be able to properly render modern terminal applications like
tmuxandvim. Glyphs should be rendered properly, and the proper glyphs should be displayed.- Performance: Alacritty should be the fastest terminal emulator available anywhere.
- Appearance: Alacritty should have beautiful font rendering and look fantastic on all supported platforms.
- 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.
sttaught 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 liketmux.- 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
Footnotes
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.↩︎
