Eigenigma

本徵矢無解

What Terminal Emulator Am I Using in 2024?

Posted at Edited at # Terminal # Tools # CLI # Kitty

TL;DR: I chose the Kitty terminal

Introduction

I believe most people reading this article already know what a “terminal” is. Therefore, I won’t explain the relationships between terms like terminal, shell, console, tty, and pty in detail here.

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

According to Wikipedia, a terminal emulator is a simulation of a hardware terminal. Since hardware terminals are relics of the past, we will refer to these terminal emulators simply as “terminals” below.

Terminals I’ve Used

I have used many terminals, but the ones I have used long-term are Konsole, iTerm2, Kitty, and Alacritty. (Apologies to users of other terminals like WezTerm and Warp.)

Since I spend most of my time on macOS, the terminal I have used the longest is naturally iTerm2.

Experience with iTerm2

Although many people criticize iTerm2 for being slow, it has actually met almost all my needs. Especially on my 60Hz monitor, the speed issue is not noticeable. However, it does have a few minor issues that always make me feel like something is missing:

  • It does not support enabling both ligatures and GPU rendering simultaneously.
  • It does not support configuration using plain text files.

For those unfamiliar with ligatures, you can read Ligature (writing). In programming, the important role of ligatures is to display characters like != as . When ligatures are enabled in iTerm2, it uses Apple’s Core Text framework for text rendering instead of the GPU (see iTerm2 documentation).

iTerm2’s configuration only supports exporting as a JSON file. This is not a big problem, but for users who manage their development environment with dotfiles, manually exporting to a JSON file and then adding it to the git repo every time the configuration is changed is an extra step.

While these issues are minor, as a user of Arch Linux for over ten years who switched to macOS due to the energy efficiency advantages of the M-series ARM platform, I still miss Linux. Especially after delving into NixOS’s design philosophy, I decided to switch my PC’s operating system to NixOS. At this point, iTerm2’s biggest drawback—lack of multi-platform support—became apparent. So, I tried the Kitty and Alacritty terminals.

Reasons for Choosing Kitty

Kitty and Alacritty are both modern terminals that use GPU acceleration by default. Their main developers are both distinctive and steadfast in their views.

The developer of Kitty is Kovid Goyal, known for the e-book management software Calibre. He has caused quite a stir while developing Calibre, such as with Calibre and setuid and calibre not online - https proxy fault. His views on tmux during the development of Kitty have also sparked controversy kitty tmux like daemon.

The developer of Alacritty is equally stubborn, with a focus on performance that has led to many features still not being merged. Fredrick Brennan, the founder of 8chan, made an interesting comment on this Rust maintainer perfectionism.

Ultimately, I chose Kitty as my regular terminal because Alacritty is still too basic, lacking support for image protocols and ligatures. After using it for a while, I did not notice any significant performance advantage (perhaps I am not very sensitive to performance).

Considering the development experience with Vim and support for yazi (a very promising TUI document manager, which I will write a separate article about when I have time), I chose Kitty.

Conclusion

Finally, and importantly, cats are good people.

My Kitty configuration documentation can be found in my dotfiles git repo. Due to some of the developer’s steadfastness, my migration was not smooth, such as issues caused by powerlevel10k using block elements. You can check my [migration log] for details.

#TODO