Choosing a Terminal Emulator

16 Aug 2022

I’ll admit it. I’ve been terminal hopping again.

I use 3 computers: a MacBook for work, a Windows desktop PC, and a Linux personal laptop running Pop!_OS. For the past year or so, I’ve been using Alacritty on Linux and MacOS and it works great. But my Linux laptop is aging and I’ve begun to do more and more development on WSL with my Windows desktop. I’ve been using Windows Terminal but it’s slow and there are much better options out there.

On my search for a terminal emulator, I’ve set 3 requirements:

  1. Fast: this one speaks for itself
  2. Cross platform: I don’t want to have to spend time re-configuring different terminals for different operating systems.
  3. Doesn’t need tabs or splits: I use tmux for that.

And I have a few bonuses:

  1. Ligatures: not a necessity but it’s nice to have
  2. Undercurl: I use Neovim as my editor and undercurl looks real nice.

Alacritty

I’ve been using Alacritty on Linux and MacOS for the past year and it’s great. Alacritty claims to be the fastest terminal emulator and in my experience I’ve found that to be true. That being said, they sacrifice certain niceties such as tabs, panes, and ligatures for performance. Undercurl is coming sometime soon but isn’t in the stable release yet.

All that is fine for my usage but the one thing that bugs me is mouse support for WSL. There’s been issues with mouse support in WSL for some time now with no clear path to it getting fixed.

Kitty

Kitty is cool. It was the first terminal to support undercurl. Kitty also includes ligatures, tabs, and splits. It’s GPU accelerated and it feels fast. Unfortunately, it only supports MacOS and Linux and I’m not willing to keep a separate terminal config just for WSL.

Hyper

I’ve tried Hyper once. That’s about it. It’s written in TypeScript with Electron which is an immediate ‘no’ for me. Electron apps are notorious for using lots of memory. I enjoy writing TypeScript as a language but I know first hand: JavaScript is not fast.

WezTerm

WezTerm is a terminal emulator written in Rust and it’s cross platform. It supports ligatures, undercurl, splits, and tabs. From my usage, it doesn’t feel as fast as Kitty or Alacritty but its still pretty fast. The best thing is that it works on all my target Operating Systems. There’s even built in support for WSL.

That pretty much checks all my boxes.

Other

I also looked into using st and urxvt. Both are classic minimalist terminals for Linux. I’ve mostly seen them being used with Arch and tiling window managers. I would have given them a shot but unfortunately, my cross platform needs restricts me somewhat in this regard.

Conclusion

Well, I’m picking WezTerm. On WSL, it feels faster than Windows Terminal which is already a huge plus. The configs are written in Lua which is always a fun language to write. I could even use Lisp to configure it if I wanted.

Maybe I’ll consider hopping again once Alacritty fixes mouse events in WSL and gets undercurl in stable. Who knows, maybe the speed difference between WezTerm and Alacirtty will convince me to have separate setups for WSL and MacOS/Linux.

For now, I’m content. Until next times terminal hopping.