What Terminal Emulator Am I Using in 2024?

TL;DR: I chose the Kitty terminal emulator.

This post details my recent journey in selecting a new terminal emulator, settling on Kitty after extensive use of others.

What is a Terminal Emulator?

Before diving in, let’s clarify what we’re discussing. Most readers likely know what a terminal is, but for completeness:

A terminal emulator, or terminal application, is a computer program that emulates a video terminal within some other display architecture.

Source: Wikipedia

Essentially, it’s the software window we use to interact with command-line interfaces and shells (like Bash or Zsh). Hardware terminals are mostly history, so we generally just call these emulators “terminals.”

My Terminal History and iTerm2 Experience

Over the years, I’ve used several terminals, including Konsole, Alacritty, and Kitty. However, since I spent most of my time on macOS, iTerm2 was my long-term daily driver.

While often criticized for performance, iTerm2 served me well, especially on standard 60Hz monitors where speed differences aren’t always obvious. It met most of my needs, but a couple of persistent issues kept it from feeling perfect:

  • No simultaneous ligatures and GPU rendering: Enabling font ligatures (which merge characters like != into ) forces iTerm2 to use Apple’s Core Text framework instead of the GPU for rendering, potentially impacting performance or visual consistency (iTerm2 docs).
  • No plain text configuration: iTerm2 configurations can only be exported as a .plist or .json file. For developers managing their environment via dotfiles in Git, this means an extra manual export step after every change, which is cumbersome compared to simple text config files.

These were minor annoyances, but they represented limitations I wished weren’t there.

The Catalyst for Change: Going Cross-Platform

The real push to find an alternative came when I decided to adopt NixOS on my PC. As a long-time Arch Linux user who moved to macOS primarily for the M-series ARM efficiency, the appeal of NixOS’s declarative philosophy drew me back towards Linux for my desktop.

This move highlighted iTerm2’s main drawback for my new workflow: it’s macOS-only. I needed a terminal that worked seamlessly across both macOS and Linux. This led me to seriously evaluate modern, cross-platform, GPU-accelerated options, primarily Kitty and Alacritty.

Evaluating Alternatives: Kitty vs. Alacritty

Both Kitty and Alacritty are popular, performant terminals leveraging GPU acceleration. They also share reputations for having opinionated lead developers (Kovid Goyal for Kitty, known for Calibre; and the Alacritty team’s focus on minimalism sometimes perceived as stubbornness).

  • Alacritty: Known for its focus on simplicity and speed. However, this focus means it deliberately lacks features like font ligatures and built-in support for terminal graphics protocols (like the Kitty graphics protocol or Sixel).
  • Kitty: Also very performant, but includes more built-in features, such as multiplexing (like tmux), various “kittens” (helper scripts), ligature support, and its own graphics protocol for displaying images directly in the terminal.

Why I Chose Kitty

Ultimately, Kitty emerged as the better fit for my needs:

  1. Cross-Platform: Works natively on macOS and Linux.
  2. GPU Accelerated: Provides a smooth, fast experience.
  3. Ligature Support: Renders programming ligatures correctly without sacrificing GPU rendering.
  4. Image Protocol Support: Crucial for tools like yazi (a TUI file manager I use heavily) that display image previews directly in the terminal. Alacritty’s lack of this was a significant drawback for me.
  5. Text-Based Configuration: Uses a simple kitty.conf file, perfect for managing via dotfiles.
  6. Extensibility: Offers features like tabs, windows (multiplexing), and scriptable “kittens.”

While Alacritty’s minimalism is appealing in theory, Kitty’s richer feature set provided more practical benefits for my development workflow without any noticeable performance penalty in my daily use.

Conclusion and Configuration

Switching to Kitty has been a positive experience. It meets my technical requirements for a cross-platform, feature-rich, and performant terminal. The migration wasn’t entirely without bumps – for instance, I had to adjust my powerlevel10k Zsh theme settings due to how Kitty handles certain block elements. I will write a post about this in the future.

My complete Kitty configuration is also available in my dotfiles repository (not available yet) for anyone interested.

And finally, as the developer is known for Calibre and his fondness for felines is reflected in the project’s name: Kitty is indeed a good cat.

Kitty