WezTerm

A GPU-accelerated cross-platform terminal emulator and multiplexer with Lua scripting and rich customisation.

Screenshot of WezTerm

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.lua file, 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 wezterm

Configuration

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 config

Multiplexer Quick Reference

ActionDefault Key
New tabCtrl+Shift+T
Close tabCtrl+Shift+W
Split pane horizontallyconfigurable
Split pane verticallyconfigurable
Move between panesCtrl+Shift+Arrow
Open command paletteCtrl+Shift+P