WezTerm
A GPU-accelerated cross-platform terminal emulator and multiplexer with Lua scripting and rich customisation.
WezTerm is a powerful, GPU-accelerated terminal emulator written in Rust and configured entirely in Lua. It combines the performance of a native terminal with the flexibility of a scriptable environment, offering a built-in multiplexer, ligature support, image rendering, and a rich API — all in a single cross-platform binary.
Features
- Lua configuration — every aspect of the terminal is configurable via a
wezterm.luafile, from keybindings to colour schemes to dynamic tab titles - Built-in multiplexer — split panes, tabs, and windows without needing tmux or zellij; multiplexer sessions can even run over SSH
- GPU acceleration — renders via WebGPU/OpenGL for smooth scrolling and low latency
- Ligature & font fallback support — native ligature rendering with automatic fallback across multiple fonts for full Unicode coverage
- Image protocol — display inline images in the terminal via the iTerm2 or Kitty image protocols
- SSH client — connect to remote hosts and run a full WezTerm multiplexer session over the connection
- Hyperlinks — URLs and custom patterns are automatically detected and made clickable
- Cross-platform — runs on Linux, macOS, and Windows with a consistent feature set
Installation
cargo install wezterm
Or download a pre-built binary from the official releases page:
# macOS (Homebrew)
brew install --cask wezterm
# Arch Linux
pacman -S wezterm
# Ubuntu/Debian (via official apt repo)
curl -fsSL https://apt.fury.io/wez/gpg.key | sudo gpg --yes --dearmor -o /usr/share/keyrings/wezterm-fury.gpg
echo 'deb [signed-by=/usr/share/keyrings/wezterm-fury.gpg] https://apt.fury.io/wez/ * *' | sudo tee /etc/apt/sources.list.d/wezterm.list
sudo apt update && sudo apt install weztermConfiguration
WezTerm is configured via ~/.config/wezterm/wezterm.lua (or ~/.wezterm.lua):
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
-- Appearance
config.color_scheme = 'Tokyo Night'
config.font = wezterm.font('JetBrains Mono', { weight = 'Regular' })
config.font_size = 14.0
config.window_background_opacity = 0.95
-- Behaviour
config.scrollback_lines = 10000
config.enable_tab_bar = true
config.hide_tab_bar_if_only_one_tab = true
-- Keybindings
config.keys = {
{ key = 'd', mods = 'SUPER', action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' } },
{ key = 'D', mods = 'SUPER', action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' } },
}
return configMultiplexer Quick Reference
| Action | Default Key |
|---|---|
| New tab | Ctrl+Shift+T |
| Close tab | Ctrl+Shift+W |
| Split pane horizontally | configurable |
| Split pane vertically | configurable |
| Move between panes | Ctrl+Shift+Arrow |
| Open command palette | Ctrl+Shift+P |