When a developer with years of muscle memory built around Windows Terminal decides to switch terminals and writes a public declaration that they won’t be switching back, it’s worth paying attention. That’s exactly what happened in a recent MakeUseOf story, where a contributor detailed their move to WezTerm—a GPU-accelerated terminal emulator that runs identically on Windows, Linux, and macOS—and cited a single Lua-based configuration file as the reason they’ll never go back. The piece sparked a wider conversation about what a terminal should be for developers who move between operating systems daily, and why Windows Terminal, for all its polish, might not be the final answer for everyone.

The Terminal That Follows You Everywhere

WezTerm’s headline feature is cross-platform consistency. It installs as a single binary on Windows 10 build 17763 and later, Linux, macOS, FreeBSD, and NetBSD, offering the exact same rendering, keybindings, and behavior on every machine. Windows Terminal, by contrast, is a Windows-only application. While it integrates beautifully with PowerShell, WSL, and Azure Cloud Shell, it cannot travel with a developer who also works on a macOS laptop or a Linux workstation.

The MakeUseOf author underscored this advantage: they keep the same .wezterm.lua file in their home folder across every machine, and the terminal behaves identically. That file is portable, version-controllable, and capable of holding conditional logic—a far cry from the static JSON settings or graphical interface of Windows Terminal. For anyone whose dotfiles are an extension of their development environment, WezTerm turns the terminal into something that lives alongside their shell config, rather than an isolated GUI tool.

Lua Configuration: Programmability Over Customization

Windows Terminal offers a polished graphical settings interface and a settings.json file for manual tweaks. Both are straightforward and often exactly what a user needs. But JSON is a data format, not a programming language. A Lua file, on the other hand, can include variables, functions, conditional statements, and event handlers.

WezTerm’s Lua API allows configurations that adapt to the machine they run on. For example, a user can write a simple conditional to use a smaller font on a laptop with a 13-inch screen and a larger font on a desktop monitor. WezTerm can also detect the system’s dark or light mode and automatically switch themes, reloading the configuration without a restart. The author of the MakeUseOf piece used such a trick to keep their setup comfortable across devices. You can even generate entire keybinding tables programmatically, define pane-opening rules, and control the tab bar’s appearance based on the number of open tabs.

The trade-off is complexity. A malformed JSON file is easy to spot; a logic error in a Lua script can be more opaque. For users who want dropdown menus and checkboxes, Windows Terminal remains the more forgiving choice. But for developers who treat their terminal as part of their coding toolkit, WezTerm’s approach is a clear differentiator. And because the config file reloads automatically when saved, iterative tuning is almost frictionless.

Multiplexing Without the tmux Layer

A terminal multiplexer like tmux is essential for many power users. It lets you split windows, manage panes, disconnect and reconnect to sessions, and keep work alive when your SSH connection drops. But it also introduces a second configuration language and a second set of keybindings, and can sometimes misbehave with mouse support, clipboard sharing, or color rendering.

WezTerm integrates multiplexing directly into the terminal itself. Tabs, panes, workspaces, and domains are all native concepts, controlled with the same Lua configuration and keyboard shortcuts you already use. The developer who wrote about their switch said they’d never gotten comfortable with tmux partly because of that cognitive double-bookkeeping; WezTerm’s unified model finally made sense to them.

There are important caveats. WezTerm’s own documentation labels its multiplexing feature “young” and notes that it continues to develop. Remote multiplexing requires WezTerm to be installed on the remote host, and version compatibility must be maintained. For servers where you can’t install additional software, tmux remains the reliable fallback. But for local development and environments you fully control, WezTerm can replace the tmux layer entirely, giving each pane its own scrollback, copy mode, and native mouse support.

SSH Domains That Feel Built-In

SSH integration is where WezTerm further reduces the tool juggling. Windows Terminal can open an SSH connection by assigning a profile a command line, but you must create each profile manually. WezTerm can read your ~/.ssh/config file and automatically populate a list of hosts as “domains.” Pressing Ctrl+Shift+P opens the Command Palette, where you type a server name and land in a remote shell in a new tab.

For ad-hoc sessions, WezTerm even includes its own embedded SSH client, and additional panes can reuse the existing connection without re-authenticating. However, those ad-hoc connections are not persistent—if the network drops, they end. For persistent remote sessions, you need the full SSH domain model, which connects to a WezTerm multiplexer on the remote machine. Again, this requires WezTerm on the server, so it’s not a drop-in replacement for all use cases. But for developers who manage their own remote servers or workstations, it can make remote terminal work feel almost local.

The Terminfo Trap and Other Practical Snags

A recurring gotcha with modern terminals is terminfo compatibility. WezTerm’s default terminal type is wezterm, which can advertise features that older or minimal remote systems don’t understand. The result can be broken text editors, misbehaving clearing commands, or garbled colors when you SSH into a server that lacks the corresponding terminfo entry.

The MakeUseOf article’s author encountered this and fixed it by setting term = "xterm-256color" in their configuration. WezTerm’s documentation now officially recommends xterm-256color as the default for maximum compatibility, while allowing wezterm only on hosts where the terminfo has been deliberately installed. That’s a sensible policy: treat terminal type as infrastructure, not a cosmetic tune-up.

Similarly, WezTerm’s inline image support—via the iTerm2 image protocol—is a neat trick, but it doesn’t work reliably through the multiplexer. If you’re building a workflow around CLI-based image previews, test it thoroughly against your exact combination of local terminal, remote server, and multiplexing mode.

Should You Switch? A Practical Decision Framework

For most Windows-only users, Windows Terminal remains the best default. It’s fully modern, GPU-accelerated, deeply integrated with the OS, and requires zero scripting to get started. If your terminal usage lives primarily in PowerShell and WSL, you’re already well served.

WezTerm becomes compelling when any of these apply:
- You work across Windows, Linux, and macOS and want one terminal with identical behavior.
- You want your terminal configuration to be as programmable as the rest of your development environment.
- You’re tired of maintaining a separate tmux configuration and would prefer a single, native multiplexer.
- You manage remote machines and value a domain-oriented, auto-populated SSH experience.

If you decide to try WezTerm, installation is straightforward with winget:

winget install wez.wezterm

Alternatively, a ZIP installer, Scoop, and Chocolatey packages are available. Start with a minimal ~/.wezterm.lua:

local wezterm = require 'wezterm'
local config = {}
config.font = wezterm.font 'JetBrains Mono'
config.font_size = 13.0
config.color_scheme = 'Builtin Solarized Dark'
config.keys = {
  { key = 't', mods = 'ALT', action = wezterm.action.SpawnTab 'CurrentPaneDomain' },
  { key = 'w', mods = 'ALT', action = wezterm.action.CloseCurrentTab { confirm = true } },
}
return config

Save the file, and WezTerm will reload it instantly. From there, you can gradually add conditional logic, domain definitions, and appearance tweaks as described in the official documentation. And to avoid remote breakage, explicitly set config.term = 'xterm-256color' unless you control the remote system.

What Comes Next

WezTerm’s multiplexer is still maturing, and its SSH domain model will likely become more robust with each release. The project’s momentum—driven by an active maintainer and a growing community—suggests it won’t stand still. Meanwhile, Windows Terminal continues to receive regular updates from Microsoft, with features like tear-out tabs and expanded command palette support narrowing the gap in its own way. The competition can only benefit users, who now have two excellent, actively developed terminals to choose from—each optimized for a different philosophy. For anyone whose work spans multiple operating systems, WezTerm has proven it’s more than a curiosity. It’s a legitimate daily driver.