The short answer: Ghostty is the better choice if you work exclusively on macOS and want a terminal that feels indistinguishable from a native Apple app. WezTerm is the better choice if you work across multiple operating systems, want scriptable configuration with Lua, or need built-in multiplexing without tmux.
Both are actively developed, GPU-accelerated, and genuinely fast. The decision comes down to where you work and how much configuration flexibility you want. If you’re still exploring your options, our full terminal emulator guide covers eight terminals side by side.
Side-by-Side Comparison
| Feature | Ghostty | WezTerm |
|---|---|---|
| Primary platform | macOS + Linux | macOS, Linux, Windows |
| Config language | Simple key=value | Lua |
| GPU rendering | ✅ (Metal on Mac) | ✅ (Metal, Vulkan, OpenGL) |
| Built-in splits/tabs | ✅ | ✅ |
| Built-in multiplexer | ❌ (use tmux) | ✅ (Mux domains) |
| Image protocol | ✅ | ✅ |
| Open source | ✅ | ✅ |
| Native macOS feel | ✅ (excellent) | ⚠️ (functional, not native) |
| Configuration depth | Moderate | Very high |
| Learning curve | Low | Medium–High |
| Active development | ✅ | ✅ |
Ghostty — macOS-First, Native Feel
Ghostty was created by Mitchell Hashimoto (founder of HashiCorp) and released publicly in late 2024. It was built specifically to feel native on macOS while maintaining the performance characteristics of GPU-accelerated terminals.
What Ghostty does exceptionally well
Native macOS integration. Ghostty uses Metal for rendering on macOS and respects system preferences for things like font smoothing, key repeat rates, and accessibility. The window chrome, menu bar integration, and behavior under Mission Control all feel like a first-party Apple application. No other terminal on this list achieves the same level of macOS integration.
Simple, approachable configuration. Ghostty uses a plain ~/.config/ghostty/config file with a straightforward key = value format. There are no new scripting languages to learn. For full details on customizing Ghostty, including themes and font config, see our Ghostty configuration guide.
Performance. Ghostty uses a fast Zig-based renderer with Metal on macOS. For typical developer workloads — running builds, viewing logs, using vim — it feels instantaneous.
Where Ghostty falls short
macOS and Linux only. If you work on Windows at all, Ghostty is not an option.
No built-in multiplexer. Ghostty doesn’t include session management like WezTerm’s mux domains. You’ll need tmux or Zellij if you want named sessions or detachable workspaces.
Configuration is simpler — which means less powerful. The plain key=value format is easy to start with, but it lacks the programmability of WezTerm’s Lua approach. Dynamic behavior based on environment or hostname requires workarounds.
WezTerm — Cross-Platform and Fully Programmable
WezTerm is maintained by Wez Furlong and has been in active development since 2019. It runs identically on macOS, Linux, and Windows, making it the go-to choice for developers who move between operating systems.
What WezTerm does exceptionally well
True cross-platform consistency. Your WezTerm configuration is a single Lua file (~/.config/wezterm/wezterm.lua) that works identically on every platform. For developers who use both a Mac and a Linux server, or who pair-program with Windows teammates, this single-config consistency is hard to give up.
Lua-powered configuration. WezTerm’s configuration is a Lua program that runs at startup. This means you can write logic: change color schemes based on the time of day, automatically set different environments on different machines, or build entirely custom keybindings that query system state. The tradeoff is that Lua configuration has a steeper learning curve than Ghostty’s key=value format.
Built-in multiplexer. WezTerm includes its own multiplexer with named workspaces (“domains”) and the ability to attach/detach from sessions — functionality that Ghostty requires tmux or Zellij to replicate. If you’re not already invested in tmux, this is a genuine convenience.
Broad GPU renderer support. WezTerm supports Metal (macOS), Vulkan (Linux/Windows), OpenGL, and a software fallback. This makes it deployable in environments where hardware acceleration is limited, such as remote development VMs.
Where WezTerm falls short
Less native on macOS. WezTerm functions correctly on macOS, but it doesn’t have the deep system integration that Ghostty achieves. The window behavior, font rendering, and system menu integration feel slightly foreign compared to a native macOS app.
Lua can be overkill. For simple configuration needs — change the font, set a color scheme, adjust padding — WezTerm’s Lua approach adds unnecessary complexity compared to Ghostty’s or Alacritty’s simpler formats.
Occasional macOS-specific issues. Community reports suggest WezTerm occasionally has edge cases with macOS features like Stage Manager or certain IME configurations. These are typically fixed promptly but can be jarring when they occur.
Performance: How Do They Compare?
Both Ghostty and WezTerm use GPU acceleration and are fast in real-world use. The relevant distinction is not raw throughput — both handle typical developer workloads without perceptible lag — but rather the quality of that rendering on each platform.
On macOS, Ghostty’s Metal renderer is tightly integrated with the display stack. The result is consistently smooth 120Hz rendering on ProMotion displays and zero visual tearing that some users occasionally notice in WezTerm. For terminal users who spend hours in the editor, this smoothness is perceptible even if latency numbers are similar.
On Linux, WezTerm’s Vulkan renderer matches or exceeds most alternatives. Ghostty also supports Linux via X11 and Wayland, but its Linux release is less mature than its macOS version.
The latency debate (which terminal is “fastest”) is complicated by hardware and measurement methodology. Community benchmarks show variation based on compositor, display server, and hardware. Both terminals are well within the range where differences are imperceptible during normal use.
Configuration Style Comparison
Ghostty config example:
font-family = "JetBrains Mono"
font-size = 14
theme = "catppuccin-mocha"
window-padding-x = 16
keybind = ctrl+shift+t=new_tab
WezTerm config example (wezterm.lua):
local wezterm = require 'wezterm'
local config = {}
config.font = wezterm.font('JetBrains Mono')
config.font_size = 14
config.color_scheme = 'Catppuccin Mocha'
config.window_padding = { left = 16, right = 16, top = 8, bottom = 8 }
-- Dynamic: change theme based on system dark mode
if wezterm.gui.get_appearance():find 'Dark' then
config.color_scheme = 'Catppuccin Mocha'
else
config.color_scheme = 'Catppuccin Latte'
end
return config
Ghostty’s config is immediately readable for anyone familiar with INI-style configs. WezTerm’s Lua is more powerful but requires understanding Lua’s data structures.
Who Should Use Ghostty?
Ghostty is the right choice if:
- You’re macOS-only. Ghostty is optimized for macOS in a way no cross-platform terminal can match.
- You want a simple config format. The key=value format is approachable and well-documented.
- You value native macOS behavior. Window animations, system fonts, accessibility features — all work as expected.
- You’re already using tmux or Zellij. Ghostty pairs well with external multiplexers.
Who Should Use WezTerm?
WezTerm is the right choice if:
- You work on multiple operating systems. A single Lua config that works identically everywhere is a significant quality-of-life improvement.
- You want a built-in multiplexer. WezTerm’s domains and workspace features replace tmux for many workflows.
- You want programmable configuration. Lua lets you express logic that simple key=value formats cannot.
- You’re on Windows. Ghostty is not available for Windows; WezTerm is an excellent option.
Frequently Asked Questions
Is Ghostty faster than WezTerm?
Both use GPU acceleration and are fast in real-world use. On macOS, Ghostty’s Metal renderer is tightly optimized and produces consistently smooth rendering, particularly on ProMotion displays. On Linux, performance is comparable. For typical developer workflows, neither will be a bottleneck.
Can I switch between Ghostty and WezTerm easily?
Yes. Both store config files in ~/.config/ghostty/ and ~/.config/wezterm/ respectively. Migrating keybindings and colors requires manual translation between the config formats, but neither uses proprietary session formats that create lock-in.
Does WezTerm work well on macOS?
WezTerm works correctly on macOS and most developers use it without issues. However, it doesn’t have the native macOS feel of Ghostty — the window behavior and font rendering are slightly different from native Apple applications. For developers who care about this, Ghostty is preferable on macOS.
Which has better community support?
Both have active communities. Ghostty has a Discord server and GitHub discussions. WezTerm has GitHub discussions, a Discord, and years of community-developed Lua configurations available online. WezTerm’s longer history means there are more community configs and plugins available.
Should I use Ghostty or WezTerm with tmux?
Both work well with tmux. If you’re already invested in tmux, either terminal is a good choice — use Ghostty on macOS for the best integration, or WezTerm if you need cross-platform consistency. If you’re not using tmux and want built-in session management, WezTerm’s multiplexer is convenient.