Skip to main content
BUNDL
PublishedUpdated
WezTerm icon

WezTerm

GPU-accelerated terminal with multiplexer

Developer ToolsFreeOpen SourceReplaces Termius Pro ($10/month)

Install with Homebrew

brew install --cask wezterm
WezTerm screenshot

WezTermOfficial Website

Quick Take: WezTerm

4.5

WezTerm is the terminal for developers who believe configuration should be code. The Lua config gives you power that no other terminal matches: conditionals, functions, imports, computed values, dynamic behavior. The built-in multiplexer, SSH domains and cross-platform consistency make it a complete terminal environment. The tradeoff is complexity, you need to be comfortable writing Lua and the documentation (while excellent) is dense. If you enjoy the process of configuring your tools as much as using them, WezTerm rewards that investment. If you want to open a terminal and start typing without reading any docs, choose Ghostty or Kitty instead. In August 2026 the practical advice is: install Nightly on Apple Silicon, keep your Lua config in git and ignore AI-terminal marketing unless you explicitly want Warp's credit platform.

Best For

  • Developers who want programmable terminal configuration
  • Cross-platform users who want identical config on Mac, Linux and Windows
  • SSH power users who want remote tabs alongside local tabs
  • Tinkerers who enjoy customizing every aspect of their tools

What is WezTerm?

WezTerm remains a GPU-accelerated, Lua-configured terminal emulator maintained primarily by Wez Furlong with community contributors. The latest formal GitHub release tag is still 20240203-110809-5046fc22; most power users on macOS therefore run Nightly builds, which receive continual main-branch updates. Through mid-2026 the project kept shipping macOS-focused work in Nightly/PRs, including CoreText font rasteriser experiments and crash fixes around WindowView drawing, so Apple Silicon and macOS Tahoe users should prefer Nightly or Homebrew's wezterm package that tracks current artefacts rather than freezing the early-2024 stable zip forever. WezTerm is a terminal emulator configured entirely in Lua. That single fact defines it and separates it from every other terminal: your configuration isn't a static settings file, it's a program. You can write conditionals, define functions, compute values, import modules and generate configuration dynamically based on the current hostname, time of day, operating system, or anything else you can express in code. If you've ever wished your terminal config had 'if' statements, WezTerm is built for you. Created by Wez Furlong (a former Facebook/Meta engineer who also contributed to PHP and Mercurial), WezTerm is written in Rust and uses GPU rendering for fast text display. It runs on macOS, Linux and Windows with the same Lua config format across all platforms, write your config once and it works everywhere. The terminal ships with a built-in multiplexer (splits and tabs without tmux), font ligature support, the Kitty Graphics Protocol for inline images and SSH domain integration that lets you open remote tabs as naturally as local ones. On macOS with Apple Silicon, WezTerm runs as a native ARM64 binary. It uses Metal for GPU rendering (via wgpu, a cross-platform graphics abstraction). The app supports macOS features like system dark mode detection, native notifications and proper window management. Memory usage is typically 80-150MB depending on the number of tabs and panes open. WezTerm's Lua configuration is both its greatest strength and the reason it's not for everyone. If you enjoy writing config as code, the way you'd enjoy writing a build script or a CI pipeline, WezTerm gives you unmatched control. If you prefer a GUI preferences panel or a simple key-value config file, Kitty or Ghostty will serve you better. WezTerm is the terminal for people who think configuration should be programmable.

Closer Look: Why Lua Is the Right Config Language for a Terminal

Most terminals use YAML, TOML, or custom key-value formats for configuration. WezTerm uses Lua, a real programming language. This is a deliberate choice that reflects a specific philosophy about developer tools.

History & Background

WezTerm was first released in 2018. Wez Furlong created it partly as a Rust learning project and partly because no existing terminal satisfied his requirements: cross-platform consistency, programmable configuration and a built-in multiplexer. The choice of Lua for configuration was inspired by Neovim's migration from VimScript to Lua, both projects recognized that a real programming language gives users more power than a static format. WezTerm grew steadily through word-of-mouth in the Rust and Neovim communities.

How It Works

WezTerm is written in Rust with an embedded Lua runtime (mlua). The rendering pipeline uses wgpu, which abstracts Metal, Vulkan and DirectX 12 behind a single API. Text shaping uses HarfBuzz, font rendering uses FreeType and the multiplexer is a custom Rust implementation. The Lua config is evaluated at startup and on every config reload. The architecture separates rendering (Rust, performance-critical) from configuration (Lua, user-programmable), similar to how game engines separate the engine (C++) from game logic (Lua or C#).

Ecosystem & Integrations

WezTerm's ecosystem is growing around shared Lua configs. Developers share config snippets on GitHub, Reddit and the WezTerm Discussions board. The documentation includes a detailed Lua API reference with examples for every feature. Community contributions include themes, keybinding presets and tab formatting functions. The project's GitHub repository is active with regular releases and responsive issue handling. WezTerm integrates with the broader terminal ecosystem through its support for the Kitty Graphics Protocol, iTerm2 image protocol and standard terminal escape sequences.

Future Development

WezTerm development is driven by the maintainer's vision and community feedback. Recent development has focused on performance improvements, better macOS integration and expanding the Lua API surface. The multiplexer protocol is evolving to support more sophisticated session management. The project doesn't publish a formal roadmap but maintains a GitHub milestone system for tracking planned features. The developer has expressed interest in improving the SSH domain experience and adding more built-in Lua helpers for common configuration patterns.

Key Features

Lua Configuration

WezTerm's config is a Lua script (`~/.config/wezterm/wezterm.lua`) that returns a configuration table. Since it's a real programming language, you can do things impossible in static config files: compute font sizes based on screen DPI, switch color schemes based on time of day, define different keybindings per hostname, generate tab titles from the running process and import shared config from a separate module. Lua is lightweight (the entire runtime is embedded in WezTerm), fast to evaluate and has a gentle learning curve if you've used any scripting language. WezTerm hot-reloads the config when the file changes, so you see updates immediately.

Built-in Multiplexer

WezTerm includes a full multiplexer, splits (horizontal and vertical), tabs and the ability to detach and reattach to sessions. You can split panes with keyboard shortcuts, drag pane borders to resize and navigate between panes with configurable keys. The multiplexer works locally and over SSH connections. For many developers, this eliminates the need for tmux for local work. The multiplexer protocol is WezTerm's own, so it won't interfere with tmux if you use both.

Font Ligatures and Advanced Typography

WezTerm supports OpenType font ligatures, color emoji, font fallback chains and variable fonts. Coding fonts like Fira Code, JetBrains Mono and Cascadia Code display their ligatures correctly. You can configure font rules in Lua to apply different fonts to different character ranges, for example, use one font for ASCII and another for CJK characters or Nerd Font icons. Font rendering uses FreeType and HarfBuzz for consistent cross-platform results.

Image Protocol Support

WezTerm supports the Kitty Graphics Protocol and the iTerm2 image protocol, allowing programs to display inline images, charts and plots. CLI tools like `wezterm imgcat`, `timg`, `viu` and matplotlib can render images directly in your terminal. WezTerm also supports the Sixel protocol. This multi-protocol approach means most image-aware terminal tools work with WezTerm without additional configuration.

SSH Domains

WezTerm's SSH domains let you define remote hosts in your Lua config and open remote tabs alongside local tabs in the same window. When you open a tab in an SSH domain, WezTerm establishes the SSH connection, runs a remote WezTerm multiplexer server and presents the remote shell as if it were local. You can split a window with a local pane and a remote pane side by side. This is different from simply running `ssh` in a terminal, the remote shell gets WezTerm's multiplexer integration, including tab titles and pane management.

GPU Rendering via wgpu

WezTerm renders text using wgpu, a Rust-based cross-platform graphics library that targets Metal on macOS, Vulkan on Linux and DirectX 12 on Windows. This gives smooth scrolling and consistent frame pacing, especially noticeable when scrolling through large amounts of output. The GPU rendering handles 120Hz ProMotion displays on modern MacBooks. Performance is comparable to Kitty and Alacritty for text-heavy workloads.

Customizable Status Bar and Tab Bar

WezTerm's tab bar and right-status area are fully programmable in Lua. You can display the current working directory, git branch, battery level, hostname, or any computed value in the tab title or status bar. Since the formatting code is Lua, you can add conditional logic, show the git branch only when you're in a repo, change the tab color when a command fails, or display the current Kubernetes context when kubectl is in the PATH. This level of tab customization is unique to WezTerm.

Cross-Platform with Identical Config

Your wezterm.lua works on macOS, Linux and Windows without modification (unless you want platform-specific behavior, which you can add with Lua conditionals). This is valuable for developers who use multiple operating systems, your terminal looks and behaves the same everywhere. Settings, keybindings, colors, fonts and even multiplexer behavior carry over. Few other terminals achieve this level of cross-platform consistency.

Nightly-first macOS improvements

Because stable tags lag, Nightly builds carry newer macOS fixes such as bundled terminfo updates, notification centre changes and ongoing font-rendering work (including CoreText rasteriser efforts discussed in 2026 PRs).

Who Should Use WezTerm?

1The Config-as-Code Developer

Your dotfiles are a carefully maintained git repo. Your tools are configured in code: Neovim in Lua, Nix for system packages, Terraform for infrastructure. WezTerm fits naturally, your terminal config is Lua, version-controlled and shareable. You define functions for common config patterns, import shared modules for color schemes and use conditionals to adjust behavior per machine. When a colleague asks about your setup, you send them your wezterm.lua and they can reproduce it exactly.

2The Cross-Platform Developer

You use macOS on your laptop and Linux on your workstation. You want the same terminal experience on both. WezTerm's Lua config works identically on both platforms. Your font configuration, keybindings and color scheme are the same everywhere. You add a platform check in Lua (`wezterm.target_triple:find('apple')`) to adjust a few macOS-specific settings (like window decorations) and everything else is shared.

3The SSH Power User

You manage servers across three environments and SSH into them constantly. With WezTerm's SSH domains, you define each server in your Lua config with connection parameters. You open remote tabs in the same window as your local tabs, no separate terminal windows for each server. The remote tabs show the hostname in their title. When you split a pane, you can put a local shell next to a remote shell for comparing outputs.

4The Tab Customizer

You want your terminal tabs to show useful information: the current directory (shortened), the running process and the git branch. In most terminals, you'd need a separate tool or a complex shell configuration. In WezTerm, you write a Lua function in your config that formats the tab title from process info, environment variables and file system checks. The tab updates in real time as you navigate directories and switch between programs.

How to Install WezTerm on Mac

WezTerm is available via Homebrew with native Apple Silicon support.

1

Install via Homebrew

Run brew install --cask wezterm in your current terminal. WezTerm installs to /Applications.

2

Create Your Lua Config

Create the config directory and file: mkdir -p ~/.config/wezterm && touch ~/.config/wezterm/wezterm.lua. Open the file in any editor. Start with the minimal config: ``lua local wezterm = require 'wezterm' local config = wezterm.config_builder() config.font = wezterm.font('JetBrains Mono') config.font_size = 14 return config ``

3

Choose a Color Scheme

WezTerm ships with hundreds of built-in color schemes. Add config.color_scheme = 'Catppuccin Mocha' to your config. Run wezterm ls-color-schemes in the terminal to see all available schemes.

4

Test Multiplexer and Splits

Press Cmd+Shift+Enter to split horizontally. Press Cmd+Shift+| to split vertically. Press Cmd+T to open a new tab. Navigate between panes with Ctrl+Shift+Arrow keys. All shortcuts are configurable in your Lua config.

Pro Tips

  • Use wezterm.config_builder() in your config (available since version 20230326) for better error messages when you mistype a config key.
  • WezTerm hot-reloads your config on save. You'll see changes immediately without restarting, just save wezterm.lua.
  • Check WezTerm's built-in documentation with wezterm --help and the detailed online docs at wezterm.org.

Configuration Tips

Use config_builder() for Type Safety

Start your config with local config = wezterm.config_builder(). This enables runtime validation of config keys, if you misspell a key name, WezTerm will show an error instead of silently ignoring it. This saves debugging time when you can't figure out why a setting isn't taking effect.

Dynamic Color Scheme Based on Time of Day

Since your config is Lua, you can switch themes automatically: ``lua local hour = tonumber(os.date('%H')) if hour >= 7 and hour < 19 then config.color_scheme = 'Catppuccin Latte' else config.color_scheme = 'Catppuccin Mocha' end `` This switches to a light theme during the day and dark at night, no manual toggling needed.

Define SSH Domains for Remote Servers

Add SSH domains to your config for one-click remote tabs: ``lua config.ssh_domains = { { name = 'prod', remote_address = 'prod.example.com', username = 'deploy' }, { name = 'staging', remote_address = 'staging.example.com', username = 'deploy' }, } `` Then open a remote tab from the launcher (Cmd+Shift+L → select the domain). The remote shell appears as a tab alongside your local tabs.

Custom Tab Titles with Lua Functions

Override tab titles to show useful information: ``lua wezterm.on('format-tab-title', function(tab, tabs, panes, config, hover, max_width) local pane = tab.active_pane local title = pane.title if pane.current_working_dir then title = pane.current_working_dir.file_path:gsub('.*/', '') end return ' ' .. title .. ' ' end) `` This shows the current directory name in each tab title instead of the process name.

Import Shared Config Modules

Split your config into modules for organization: ``lua local keybindings = require('keybindings') -- ~/.config/wezterm/keybindings.lua config.keys = keybindings.keys config.key_tables = keybindings.key_tables `` This keeps your main wezterm.lua clean and lets you share specific config modules across machines.

Alternatives to WezTerm

WezTerm competes with other modern, configurable terminal emulators:

K

Kitty

Kitty uses a simple key-value config file (kitty.conf) instead of Lua. Its graphics protocol is more widely adopted by CLI tools. Kitty's kittens (Python scripts) provide extensibility but can't modify the config itself. Choose Kitty for simpler config and better graphics protocol support; choose WezTerm for programmable configuration and cross-platform consistency.

G

Ghostty

Ghostty is a native macOS terminal with Metal rendering and AppKit UI. It has the best macOS integration of any modern terminal. Its config is a simple key-value file. Ghostty is faster at startup and feels more like a Mac app. Choose Ghostty for the native Mac experience; choose WezTerm for Lua config and cross-platform use.

A

Alacritty

Alacritty is the minimalist option, GPU-rendered, YAML config, no splits, no tabs. It's the fastest at raw text rendering and the most resource-efficient. WezTerm is more feature-rich (multiplexer, images, SSH domains, Lua) at the cost of slightly higher resource usage. Choose Alacritty if you use tmux and want the absolute minimum terminal.

i

iTerm2

iTerm2 has a GUI preferences panel with extensive options, profiles, triggers and deep macOS integration. It's CPU-rendered and slower than WezTerm for heavy output. WezTerm is faster, more configurable (via Lua) and cross-platform. iTerm2 is easier to set up and has more macOS-specific features.

W

Warp

AI agent terminal with credits and accounts. Choose Warp for agents; WezTerm for local programmable control without SaaS.

Pricing

Free / Open Source

WezTerm is free and open-source under the MIT license. No paid tiers, no AI credit meters, no accounts. Development is funded by the maintainer and community contributions. Download stable or Nightly builds from wezterm.org, Homebrew, or MacPorts.

Pros

  • Lua configuration gives you a full programming language for terminal settings
  • Built-in multiplexer eliminates tmux for most local workflows
  • Cross-platform with identical config (macOS, Linux, Windows)
  • SSH domains let you open remote tabs alongside local tabs
  • Supports Kitty Graphics Protocol, iTerm2 protocol and Sixel for inline images
  • Font ligatures and advanced typography work correctly
  • GPU rendering via wgpu for smooth scrolling
  • Programmable tab bar and status line
  • Free and open-source (MIT license)
  • Active development with frequent releases

Cons

  • Lua config has a steeper learning curve than key-value config files
  • Startup time is slightly slower than Kitty or Alacritty (200-300ms vs 100ms)
  • The documentation is detailed but can be overwhelming for new users
  • Some macOS-specific features (like native tabs) feel less polished than Ghostty or iTerm2
  • The community is smaller than Kitty or iTerm2
  • Occasional rendering glitches with complex Unicode (rare but reported)

Community & Development

WezTerm has an active community on GitHub with over 20,000 stars and a responsive issue tracker. The developer, Wez Furlong, is actively involved in issue discussions and development. The project has a GitHub Discussions board where users share configs, ask questions and request features. There's a growing collection of community-contributed Lua config snippets and themes. The documentation at wezterm.org is detailed and well-organized, with examples for common configuration patterns. WezTerm is frequently discussed alongside Kitty, Ghostty and Alacritty in terminal comparison threads on Reddit, Hacker News and various developer forums.

Video Tutorials

Getting Started with WezTerm

Josean Martinez202.8K views

More Tutorials

Why I am switching from Kitty to WezTerm? (How to setup WezTerm)

Lazar Nikolov43.7K views

Make Your Mac Terminal Awesome: Easy WezTerm & Starship Setup

Henry Misc64.8K views

WezTerm Terminal Setup for Nushell on macOS

Learning Nushell: My Journey216 views

Frequently Asked Questions about WezTerm

You need basic Lua to get started (it's similar to JavaScript or Python in structure). A minimal config is 5 lines of Lua. Advanced features like dynamic tab titles and SSH domains require more Lua, but the learning curve is gentle. WezTerm's documentation includes Lua examples for every feature.

About the Author

Alex Chen

Senior Developer Tools Specialist

Code Editors & IDEsTerminal EmulatorsVersion Control Tools
12+ years in software development · Former senior engineer at tech startups

Expert Tips for WezTerm

1

Mac users on X repeatedly say 'just use Nightly' when newcomers hit bugs fixed months after the 20240203 stable tag.

CommunityHigh Confidence
2

Lua config shares well across Linux/macOS fleets, teams standardising WezTerm often treat wezterm.lua as the source of truth in dotfiles repos.

CommunityHigh Confidence

Related Technologies & Concepts

WezTermWez FurlongLuaRustwgpuHomebrewKittyGhosttyAlacritty
WezTerm (Subject), Wez Furlong (Creator and maintainer), Lua (Configuration language), Rust (Implementation language), wgpu (GPU rendering abstraction library), Homebrew (Installation method), Kitty (Key-value config alternative), Ghostty (Native macOS alternative), Alacritty (Minimalist GPU-accelerated alternative)

Related Topics

Terminal Emulators

Modern terminal emulators for macOS development.

Developer CLI Tools

Command-line tools for development workflows.

Cross-Platform Developer Tools

Tools that work consistently across macOS, Linux and Windows.

Sources & References

Key Verified Facts

  • Formal GitHub releases still list 20240203-110809-5046fc22 as a primary stable tag.[cite-1]
  • Official docs emphasise continuous/Nightly builds as the bleeding-edge macOS path.[cite-wz1, cite-wz2]
  • 2026 pull requests continue to land macOS-specific font and crash fixes.[cite-wz4, cite-wz5]
  1. 1
    WezTerm - Wez's Terminal Emulator

    Accessed Aug 9, 2026

    "WezTerm is a GPU-accelerated cross-platform terminal emulator and multiplexer written in Rust."

  2. 2
    Configuration - WezTerm

    Accessed Aug 9, 2026

    "Configuration is implemented entirely via a Lua script, allowing users to write dynamic conditionals, define functions and import modules."

  3. 3
    Multiplexing - WezTerm

    Accessed Aug 9, 2026

    "WezTerm features built-in terminal multiplexing, allowing users to detach and reattach sessions natively without relying on external tools like tmux or screen."

  4. 4
    Fonts - WezTerm

    Accessed Aug 9, 2026

    "The terminal includes solid built-in support for font ligatures, color emojis and complex font fallback rules."

  5. 5
    wezterm/wezterm: A GPU-accelerated cross-platform terminal emulator

    Accessed Aug 9, 2026

    "The official GitHub repository confirms WezTerm is an open-source project primarily developed in the Rust programming language."

  6. 6
    Releases · wezterm/wezterm

    Accessed Aug 9, 2026

    "Release notes demonstrate active, ongoing cross-platform support, providing compiled binaries for macOS, Linux and Windows environments."

  7. 7
    Top Rust terminal emulators - LogRocket Blog

    Accessed Aug 9, 2026

    "WezTerm is highlighted in the Rust ecosystem as a highly customizable alternative to Alacritty, specifically praised for its dynamic Lua scripting capabilities."

  8. 8
    WezTerm Terminal Setup and Configuration - DEV Community

    Accessed Aug 9, 2026

    "Developers use WezTerm's dynamic Lua configuration to automatically compute values and switch themes based on the operating system's time of day or light/dark mode settings."

  9. 9
    WezTerm: A GPU-accelerated cross-platform terminal emulator | Hacker News

    Accessed Aug 9, 2026

    "Community discussions highlight WezTerm's ability to replace multiple separate tools, such as Alacritty and tmux, with a single, unified Rust binary."

  10. 10
    Typing Latency Benchmark · Issue #224 · wezterm/wezterm

    Accessed Aug 9, 2026

    "Performance benchmarks and latency tracking indicate that WezTerm's GPU-accelerated rendering significantly reduces input lag and CPU overhead compared to standard software-rendered terminals."

  11. 11
    WezTerm changelog

    Accessed Aug 9, 2026

    "Date-stamped releases; Nightly continuous builds recommended."

  12. 12
    WezTerm macOS install

    Accessed Aug 9, 2026

    "Universal binary guidance and Nightly download."

  13. 13
    CoreText font rasteriser PR

    Accessed Aug 9, 2026

    "2026 macOS font rendering work for Nightly users."

  14. 14
    macOS crash fix PR

    Accessed Aug 9, 2026

    "July 2026 SIGABRT fix discussion for macOS draws."

Compare WezTerm

WezTerm is a Free Alternative

WezTerm can replace these paid apps:

Browse all free alternatives

More Developer Tools

View all

Featured in Collections

Explore More on Bundl

Related Reading

Compare WezTerm

Free Alternatives

Similar Apps

Similar Apps

Read our complete guide to the best developer tools for Mac