I’m guessing that if you are reading this post you already know what Wayland is. If not, this is a quick overview.
Wayland is a protocol that was created to replace the older display server X.Org or X11. Wayland however, is not a display server in itself, but just a protocol and a reference compositor(the new name for display server) called Weston. Since Wayland is just a protocol in itself, it is up to the compositor to implement it. The most popular compositors are; Mutter which is used by Gnome, Plasma’s Compositor, and Sway, which is a window manager based on the wlroots library.
Terminal emulators are pretty simple. They allow you to access the terminal from a non terminal display server. Most of the time when you are using the command line you are using a terminal emulator.
There are many different options for terminal emulators for Wayland. There are a handful of popular terminals for Wayland. The ones that this article will focus on are Kitty, Wezterm, Alacritty, and Foot. There are other good options like Gnome Terminal and Konsole but I only would recommend them if you use Gnome or KDE respectively, and even then urge you to give one of these other options a shot too. This is just an overview and I encourage you to try each terminal emulator yourself.
Kitty is a terminal emulator created by kovidgoyal that supports both X11 and Wayland. It has some features that other terminal emulators may not support. One of those features is GPU Acceleration. Unlike many other terminal emulators, Kitty hands off rendering to the GPU rather than the CPU. This can improve the speed while working in the terminal.
Another feature that Kitty has is ligatures. Ligatures are when multiple characters are combined into a single character for increased readability, such as !=. Kitty also supports tabs, though at least for me, movement between them was a bit clunky compared to other terminal emulators. Kitty also has support for tiling within the terminal window, but I prefer using my Window Manager’s tiling features instead. Kitty also implements a protocol to render images in the terminal.
Kitty also has a framework called Kittens, which allows extending Kitty. Some of those kittens are already built into Kitty. If you want to learn more about kittens I advise you to look at: https://sw.kovidgoyal.net/kitty/#kittens.
Kitty is configured in a plain text file, using very simple syntax that is extremely easy to learn. Configuring it to your liking takes mere minutes and has one of the simplest config files I’ve used. The config file is located at ~/.config/kitty/kitty.conf. This has all the info you need to configure kitty: https://sw.kovidgoyal.net/kitty/index.html#configuring-kitty.
It depends on your platform. If you are on Linux your distro’s package manager probably has it available. If it isn’t available you can follow the binary instructions here: https://sw.kovidgoyal.net/kitty/binary.html#manually-installing or you can build it from source using these instructions here: https://sw.kovidgoyal.net/kitty/build.html. On MacOS kitty is available using the brew package manager. Kitty is sadly not available for Windows.
WezTerm, like Kitty is a terminal emulator for Wayland and X11, created by Wez Furlong. WezTerm however is written in Rust. It, like Kitty, also supports GPU Acceleration. WezTerm has many other features that are expected of more advanced terminal emulators such as ligatures support.
WezTerm also has extremely strong tools for window management. It supports many features that other terminal emulators don’t, such as a dedicated ssh client, splits, windows, and tabs. WezTerm also has extremely strong mouse supports compared to other terminal emulators on this list with the ability to easily switch and create new tabs with the mouse.
Another important feature that WezTerm provides is that only one other terminal emulator on the list does server mode. If you start WezTerm server mode on startup or when starting your DE or WM then it runs in the background unless stopped. Then if WezTerm is launched it appears as another window of the same process as the server along with any other windows. This has the advantage of increased startup times and less resource usage with the terminal. However, this approach is not perfect; if the terminal crashes all windows crash along with it. This also has performance impacts as all the windows are sharing resources. It is however possible to launch a WezTerm window independent of the parent server process if necessary.
WezTerm is configured using a text file, written in Lua. This file is located at ~/.config/wezterm/wezterm.lua. Since it does use a Lua configuration file rather than plaintext like other terminal emulators it is a bit more challenging to configure, but does make it more extensible than other terminal emulators. To learn how to configure WezTerm I would use this: https://wezfurlong.org/wezterm/config/files.html.
Like Kitty, how you get WezTerm depends on the platform. You can check to see if your package manager has, but unlike Kitty it is much less certain that it will be available. You can try to package WezTerm for your distro or you can follow the instructions here: https://wezfurlong.org/wezterm/install/linux.html. You can also build it from source using these instructions here: https://wezfurlong.org/wezterm/install/source.html. If you are a on MacOS you can follow the instructions here: https://wezfurlong.org/wezterm/install/macos.html, or install using brew. Unlike Kitty, WezTerm supports Windows, and is available to download using an exe from here: https://wezfurlong.org/wezterm/install/windows.html.
Alacritty is a terminal emulator written in Rust for X11 and Wayland. It is written by a group of people who are under the @alacritty organization on GitHuh. Like both Kitty and WezTerm, Alacritty is also GPU Accelerated, which can increase performance on modern devices, but may not work well on older devices.
It supports many of the same features that WezTerm and Kitty support, such as Ligatures. Alacritty is more minimal than both Kitty and WezTerm however. It doesn’t support many of the niceties that the others have, such as image rendering support.
It also doesn’t support any form of window management that is built into the Terminal itself. The Alacritty team believes that it is best left to the Window Manager to support those features. This comes with drawbacks however, as you must open multiple windows, thus forcing you to have multiple processes to have multiple terminals open at the same time which contributes to increased resource use due to the lack of server mode.
Alacritty is configured using a YAML configuration file. An example configuration file is sometimes available in /usr/share/doc/alacritty. If it is copy it to ~/.config/alacritty/config to be able to use it. If not check the Alacritty GitHub to configure from scratch. Since the configuration file is YAML a certain configuration syntax is required, though the syntax is simple, if not a little more complicated then Kitty but much less so than WezTerm.
Alacritty is available on Windows, Linux and MacOS. If you are on Linux chances are that it’s already in your distro’s packages. If it isn’t, you can build it by cloning the repo at https://github.com/alacritty/alacritty and running cargo build –release in the directory. It is available as a .dmg on MacOS through the GitHub release page on the repo. It is also available on Windows through a portable.exe and a .msi installer, also both available at the GitHub release page.
Foot is a terminal emulator created by dnkl for Linux supporting the Wayland display protocol. The name originates from the generic name Foo, combined with terminal, creating Foot. Unlike the other terminal emulators on the list, Foot is extremely minimal in comparison. It doesn’t support many of the features that other terminal emulators support, such as GPU Acceleration or Tabs. One area where Foot lacks compared to the alternatives is in Ligature support. Foot doesn’t support Ligatures, unlike all the other terminal emulators on the list, though the lead developer is not opposed to adding it if performance doesn’t suffer.
One of foot’s major features is a server mode. Like WezTerm this allows all the terminal windows to be one process. This has the same advantages and drawbacks as described above with WezTerm but makes startup almost instantaneous. It is also been made the default terminal emulator for the Sway WM, replacing Alacritty. Foot also supports image rendering in the terminal using sixel.
Foot is configured through a simple foot.ini config file located at ~/.config/foot/foot.ini. This file can be copied from /usr/share/foot/foot.ini. All of the configuration is already in this example file and commented out. To make a change simply change the value associated with a variable and uncomment it out. Foot has one of the most simple configuration files of all the terminal emulators, which is in line with its approach.
Foot is only available for Linux unlike other terminal emulators on the list. To install it, first see if your package manager has it available and if it does, install it using your package manager. If Foot isn’t available for your distro it is pretty simple to install, just follow these instructions here: https://codeberg.org/dnkl/foot/src/branch/master/INSTALL.md.
Disclaimer: This is purely anecdotal and based on my experience with each of these terminal emulators
Kitty was one of the fastest terminal emulators that I have tried. Startup times were a bit slow, but during use it never slowed down and was virtually instantaneous in most cases.
WezTerm was one of the slowest terminal emulators on the list. During startup it was slower than the alternatives, and during runtime was much slower than the others. Even when using server mode, starting a window was still slower than everything besides Kitty, and was slower than in normal mode during runtime. That is not to say WezTerm is slow, it’s plenty fast for most people, just that it’s slower than the other terminal emulators available on this list.
Alacritty was the second fastest terminal emulator to start, with the speed just edging out Kitty and quite a bit faster than WezTerm in normal mode or server. During usage it was the one of the fastest terminal emulators, again just edging out Kitty.
Foot was the fastest terminal emulator to start, both in normal and server mode. It starts up near instantly in normal mode and virtually instantaneously when in server mode. During runtime it was faster than Kitty and WezTerm in both modes, but was just edged out by Alacritty.
All of these different terminal emulators serve a different purpose or niche. For most people I would personally recommend either Foot or Alacritty. Both of these are fast terminal emulators with a good amount of features. If Alacritty or Foot aren’t powerful enough to suit your needs I would personally recommend Kitty as it is both fast while still being abundant in features. If you are looking for something with extremely advanced configuration support, as well as strong GUI support I would recommend WezTerm. Again, I recommend taking a look at the terminal emulators that do interest you and try them for yourself rather than just blindly taking my opinions.
PS: This is my first time blogging. If you find any errors or problems, you can report them by contacting me at firstname.lastname@example.org
THE CONTENTS OF THIS WEBSITE ARE LISENCED UNDER CREATIVE COMMONS AND THE SOURCE CODE IS LISENCED UNDER MIT X11