After tinkering in the terminal long enough, it’s inevitable that you will eventually look for a terminal emulator with more features. First step is to extend the functionality within the terminal with an improved shell and some eye candy. But now you want more features, more terminal windows; or maybe you want to do the opposite and go minimalistic. Now you need a new terminal application. I’ve evaluated a whole bunch of *nix terminals in search of the best *nix terminal emulator for me. I try to be comprehensive enough in my evaluations so this article can also help you find the best *nix terminal for you.
With only one exception, I don’t look at any default terminals for the major desktop environments. I assume that if you’re looking at this article it’s because you’re looking for a replacement.
Rules for *nix Terminals
I did quite a bit of digging around to put this list together. Honestly, a whole bunch of similar ones exist but most are written by content writers just trying to knock out an article real fast. Even when it’s apparent that the author has actually used the software in question, there is nothing even approaching a consensus when it comes to determining the best virtual terminals. This appears to be a highly subjective space and that makes sense since different users will search for different features.
Instead of trying to remain objective, this list is ordered specifically in accordance with my own biases. However, I’ll try to detail the pros and cons of each terminal application to help you find the best one for you. Here are the things that matter most to me (in order):
- Always visible tab bar
- Smooth Typing
- Aside from the tab bar, very minimalist
- Looks good
- SSH management
- Adheres to system theme
- Easy configuration
- Properly label tabs
- Available in FreeBSD pkgs/ports
- Available as AppImage (on Linux)
I should note that after all my searching, I still haven’t found a terminal I consider perfect. Nothing checks all those boxes.
Note: List is not in any particular order except wezterm is #1.
Wez’s Terminal Emulator
Wez’s Terminal Emulator, also known as wezterm, comes very close to checking all my boxes. It’s minimalistic but includes an ever-present tab bar. Notice how the “add tab” button is next to the tabs, not above it taking up space *cough*Konsole*cough*. Wez’s terminal is great looking and highly customizable. It’s also driven by your graphics card, which frees up CPU power. For me that doesn’t matter, but if you compile a lot of software it might help.
On the negative side, Wez’s terminal requires you to make a lua file to make any of those many configurations. It makes you work for it. You can find some configurations floating about on the internet, but you can’t always just repurpose them. I noticed that several of these were running on Windows Subsystem for Linux and I had to hack quite a bit out to make them work. In some cases they had some neat customizations but didn’t work at all.
I was really intrigued by its ability to store SSH configurations, but at first it through me for a loop. While wezterm can make normal SSH connections no problem, for the saved configurations to work you have to have the same version of wezterm installed on both the client and the server. I later figured out that I could disable multiplex with SSH and it would work, but like much of the configuration for wezterm, it wasn’t obvious.
The next major problem I ran into was that wezterm would dump a bunch of extra special characters when I tried to copy and paste anything other than plain text. That included copy and pasting from wezterm to wezterm. Again I almost through in the towel. Honestly, I would have if not for the fact that I was even more dissatisfied with all the other terminal emulators I tried. Eventually I stumbled across a tidbit in the FAQ part of wezterm’s documentation that clued me into the fact that it was a problem with how wezterm interacts with zsh.
Wezterm does everything I want aside from making configuration easy.
Overall, I would recommend wezterm to an enthusiast who wants a high level of customization and has a willingness to tinker. It ended up being my new daily driver. If you would like to get started with wezterm, I have a tutorial.
- Persistent tab bar that doesn’t get in the way
- Highly customizable
- Respects system theme
- Looks great
- Available on FreeBSD
- Available as AppImage
- Runs on GPU
- Window Titling Options
- Written in Rust
- Requires (somewhat) complicated lua configuration file
- Can’t make ctl+c copy without breaking escape function
- Despite extensive documentation, some things aren’t obvious and wezterm requires a real commitment to get working properly
BlackBox touts itself as “beautiful” and it certainly looks nice. If you want simplicity combined with good looks, BlackBox is the terminal for you. It uses Tilix themes to allow for a wide variety of color schemes, but the interface itself can be tweaked only so much. For me, this isn’t really a bad thing because for the most part I like the developer’s design decisions. Although the settings are somewhat limited, they are easy and that counts for a lot.
On the downsides, Black Box does not have a way to save SSH logins, nor does it have many other advanced features. The most disappointing part is that BlackBox’s GTK4 window did not respect my system theme (running on KDE). I like to flip my window buttons to the left side like on macOS, and it’s annoying when an application doesn’t comply.
Overall, I would recommend BlackBox if you use Gnome or XFCE on Linux and you want a fairly simple program.
- Persistent tab bar—defaults aren’t perfect but the proper options exist
- Looks nice
- Easy to change settings
- No option to save SSH logins
- Somewhat limited settings options
- No AppImage or FreeBSD port
- Doesn’t respect system theme
Alacritty is supposedly the fastest terminal emulator but that’s probably splitting hairs. It uses OpenGL acceleration and is written Rust. In many ways, Alacritty is similar to Wez’s Terminal Emulator. The user is presented a spartan program with no menus or buttons and no help. All configurations are made in a not-included YAML file. Unlike wezterm, which has fairly extensive documentation, the Alacritty team apparently believes that documentation is beneath them. They’re nice enough to tell you where to place your YAML file, but finding documentation is a pain.
If you dig around on their GitHub page you’ll come across this YAML file which contains all the settings you can take advantage of (I think, how am I to really know?). I quickly found out that Alacritty does not support tabs unless you bootstrap some other program onto it. That’s all it took for me to veto Alacritty. It also has the same copy/paste problem’s as wezterm.
Overall, I would recommend Alacritty if your time is not valuable and you want to tinker for the sake of tinkering.
- Available on FreeBSD
- GPU accelerated
- Written in Rust if you get excited about that sort of thing
- Documentation nonexistent
- The type of program that could really use that nonexistent documentation
- No tabs
- No SSH management (that I can tell)
- Did I complain about documentation yet?
- Copy/Paste issues
I grouped these two together because they pretty much do the same thing: they give you a “Quake style” terminal that will drop down from the top of your screen when you hit a selected key combination. This type of terminal be particularly useful on a laptop or if you only have a single monitor. Use Guake with GTK desktops (Gnome, Cinnamon, XFCE, MATE) and Yakuake with QT desktops (KDE, LXQT).
These terminals need to run persistently so you can pop them open at any time (usually they’re set as startup applications) but they don’t suck up resources. They don’t have much in the way of features, but it’s convenient to have. I use them to supplement my primary terminal, not as a replacement.
Overall, I recommend Guake/Yakuake for laptop users or single-monitor users. On my desktop, where I have multiple monitors and one is usually dedicated my terminal application, I don’t really use it. But it’s really helpful to be able to drop down the terminal with a hotkey on my laptop.
- Convenient/useful: allows quick access to the terminal
- Tabbed interface
- Available on FreeBSD
- You have to keep opening/shutting if you only have a single monitor
- Not practical for a full-time terminal
Since tabs are a must-have feature for me, Tabby immediately sounded appealing. It also checks the most boxes from my list. It can manage SSH connections, it sports a tabbed yet minimalist interface, it looks good. There are even some nifty features I never thought about, like an ability to turn an SSH connection into an SFTP file browsing experience. That’s pretty cool.
Tabby has it all and that may be its only major problem. Of all the terminal emulators I’ve ever used, it’s the first to have a load screen when first opening the application. It only takes a couple seconds but that feels like forever when in the middle of a workflow. The issue could be mitigated by just leaving the application open, but if it’s a resource hog that’s not something I want to do. It turns out that Tabby is mostly written in Typescript. This is probably the primary culprit for its slow performance,
Although on the surface Tabby appears very minimalistic, once you look in the settings you’ll find all sorts of options and customizations. It even supports plugins to extend the functionality even further. Tabby has the SSH features I wanted and much much more. In fact, I think it takes the features to a bit of an extreme. Tabby allows for plugins to further extend the functionality but the default application comes with enough settings and it’s too slow as it is.
Overall, I recommend Tabby to anyone who thinks a long list of clickable features is more important than performance.
- Somehow checks all the boxes on my initial list
- Didn’t respect my system settings.
- Despite checking the most boxes, I rejected it for being a slow electron app that tries to do too much.
Kitty shares much in common with wezterm and Alacritty. You open it up to find a plain terminal powered by the GPU and you have to use a configuration file or custom commands to add features. My favorite part about this is that Kitty uses a plain text configuration file. This makes it much easier to configure, but it also means its less customizable than the Lua files of wezterm.
If storing multiple ssh configurations aren’t important to you and you just want a basic terminal, Kitty might be a better choice than wezterm. It’s much easier for a layperson and it’s easy to make it look good. The only thing I found annoying about Kitty is that it didn’t have a “new tab” button and I didn’t find a way to add one using the config file. Yeah, I know, the idea is that your hands never leave the keyboard, but I like my button.
Kitty is mostly written in Python, which, technically should make it slower than the Typescript-based Tabby. In practice, Kitty ran smoothly and, unlike Tabby, didn’t require a loading screen.
Overall, I recommend Kitty for someone who doesn’t care about persistent ssh connections but wants a fast, minimalistic terminal that can be easily customized.
- Plain text configuration file is easy to set up
- Looks good
- Available on FreeBSD
- Respects system window settings
- GPU driven
- Not as extensible as wezterm
- Doesn’t store ssh configurations
- I couldn’t figure out how to make a “new tab” button
- Nothing, really
I started writing this article as I searched for an improvement to Konsole and wezterm fit the bill. Honestly, I would have kept going, but wezterm just worked out so well for me that I didn’t really need to look at more terminal emulators. From time to time I’ll come back to this article and add more to the list. If there’s a terminal emulator you would recommend I try out next, shoot me an e-mail at [email protected].