The built-in Windows Terminal is a solid improvement over the options that came before it, and it becomes even more impressive once you know these hidden Windows Terminal features.
However, recently I’ve been working across multiple platforms for development work, so I needed a terminal that worked the same way across every ecosystem. Another requirement was a fully scriptable Lua-based configuration, and preferably a built-in multiplexer. After looking at a few alternatives, WezTerm turned out to be just the terminal I needed, and I don’t think I am going back to Windows Terminal anytime soon.
A cross-platform terminal
The same setup on Windows, Linux, and macOS
My primary reason for switching was cross-platform support, and WezTerm was an obvious choice. It runs on Windows 10 and later, Linux, macOS, FreeBSD, and NetBSD. I keep the same config file in my home folder on every machine I use, and the terminal behaves the same way on each one.
WezTerm is written in Rust. While Rust by itself does not make a terminal fast, what it buys you is memory safety and a single self-contained binary with nothing extra to install. The speed comes from the GPU-accelerated renderer, which hands text drawing to your graphics card instead of your CPU.
Image support too is another highlight. WezTerm understands the iTerm2 image protocol, Kitty graphics, and Sixel, so a command like wezterm imgcat prints a real picture in the terminal instead of a blocky approximation made of text characters. Configuration happens in Lua, which is where things get more interesting.
WezTerm has more of the features I need
Lua config, native multiplexing, and SSH shortcuts
Windows Terminal has more features than I need, but more importantly, everything I needed. You get tabs, split panes, profiles for every shell on your system, Quake mode, GPU rendering, and a settings UI so you never have to open a config file.
Compared to Windows Terminal, which stores its settings in JSON, which is a data format rather than a language, WezTerm can hold values, but it cannot hold logic. WezTerm reads a .wezterm.lua file from your home folder, and Lua is a full scripting language. I use a conditional to set a smaller font on my laptop and a larger one on my desktop, from the same file. Save it, and the change applies instantly, because WezTerm reloads its config while running.
Multiplexing was the other thing I wanted. I used tmux for years and never got used to it, mostly because it meant a second config language and a second set of key bindings. WezTerm builds panes, tabs, and workspaces into the terminal itself, and every pane keeps its own scrollback, so searching output in one pane does not disturb the others.
Another feature that I come to use more often is SSH domains. You can point WezTerm at your existing SSH config with one line of Lua, and you can open every host listed there as a domain. Press Ctrl+Shift+P to bring up the Command Palette, type the server name, hit Enter, and you land in a remote shell in a new tab. Windows Terminal can approximate this with a profile that auto-runs an SSH command, but you have to build each one by hand.
It’s highly customizable
One Lua file controls the whole look
Everything I have changed in WezTerm lives in that same .wezterm.lua file. There is no settings window, which sounds like a drawback, but the entire configuration is one text file you can put in version control and copy to a new machine in no time.
On the appearance side, I set window opacity to 0.90 for slight transparency, picked a built-in color scheme, and chose a different font for the tab bar than for the terminal text. Cursor style and blink rate are configurable down to the millisecond, and the tab colors can be matched to whatever theme the rest of your desktop uses. WezTerm ships with hundreds of color schemes and reads iTerm2-compatible scheme files, so most themes you find online drop straight in.
Key and mouse bindings are fully remappable, too. I rebound tab management to match my browser, so Alt+T opens a tab, and Alt+W closes one, then set Alt+V and Alt+H for vertical and horizontal splits, with Alt+arrow keys to move between panes.
Now to a quirk that can get annoying real fast. WezTerm reports itself as a terminal type that many remote systems do not have in their terminfo database, which can break tools like nano or stop Ctrl+L from clearing the screen once you SSH somewhere. However, setting term to xterm-256color in the config sorted it out for me.
WezTerm is now my default terminal across devices
WezTerm is not the fastest terminal available (Alacritty and foot area are ahead and are lighter), and it also asks more of you up front. If you want a settings window with checkboxes, Windows Terminal is still the better answer, and it is what I recommend to anyone who mostly lives in the PowerShell commands they use every day.
What keeps me on WezTerm is cross-platform support, Lua-based configuration, and a multiplexer I do not have to bolt on afterward. Windows Terminal is still installed on my PC, sitting next to the old-school bundle I have never quite deleted. I just have not had a reason to open either one in months.