I have been a terminal-app monogamist for a long time. iTerm2 from 2014 to 2024. Before that, Terminal.app and a brief unhappy period with iTerm 1.0. I would try Alacritty every couple of years, decide it was too spartan, and go back. Tried Warp, hated the cloud login. Tried Wezterm, found the Lua config exhausting.
Then Ghostty hit 1.0 in December 2024 and I switched. It has been a year and a half. This is the honest review.
What Ghostty Is
Ghostty is a GPU-accelerated, cross-platform terminal emulator written in Zig by Mitchell Hashimoto. The pitch is the same one every modern terminal makes: fast rendering, native platform feel, modern terminal protocols. What makes it different from the rest is the execution.
Three things to know up front:
- It is open source. MIT license, code on GitHub, real community.
- It is fast. Not “fast for what it does” — actually fast. GPU rendering, low-latency input, 60fps scrolling on log files that make other terminals stutter.
- It has zero-config sensible defaults. You install it, open a window, you have a terminal. The config file is optional and stays small.
That last point is the differentiator. Wezterm wants you to write Lua. Alacritty wants you to write YAML. iTerm2 wants you to click through fourteen settings panels. Ghostty wants you to open it and start typing.
Speed: Is It Actually Faster?
Yes. I measured.
Tools: typometer for keystroke latency, a 1.5GB log file for scroll-render performance, the same Macbook Pro M2 Max with 32GB RAM for all three terminals tested.
Keystroke latency (median, milliseconds):
- Ghostty 1.1.2 — 4.1ms
- iTerm2 3.5.10 — 9.3ms
- Warp 0.2025.x — 12.7ms
Scrolling a 1.5GB log file with cat:
- Ghostty — 60fps held, no drops
- iTerm2 — drops to 28-35fps
- Warp — visible stutter, drops to 18-22fps and the window starts to feel heavy
These numbers match what other reviewers have measured. The Ghostty rendering pipeline is built on Metal on macOS and OpenGL on Linux, and it renders the whole screen on the GPU every frame. iTerm2’s renderer is older and uses a mix of approaches that show their age on dense output.
For interactive work, the 4ms vs 9ms difference is at the edge of perceptible. You notice it most when you switch back to iTerm2 after months on Ghostty — it feels mushy in a way you did not realize iTerm2 felt mushy before.
The Config Experience
Ghostty’s config is one of its best decisions.
# ~/.config/ghostty/config
font-family = JetBrains Mono
font-size = 14
theme = catppuccin-mocha
window-padding-x = 12
window-padding-y = 8
macos-titlebar-style = tabs
copy-on-select = clipboard
That is most of my config. Plain keyvalue, one option per line, comments with #. No nesting, no DSL, no scripting. To see every option, run ghostty +list-themes or ghostty +show-config --default. The CLI introspects the binary directly; you cannot get out of sync.
Compare to Wezterm where the same config is a Lua function returning a table, with require statements and conditional logic. Wezterm’s approach is more powerful and I respect it. I do not want it for a terminal emulator. The terminal should be a small, comprehensible appliance.
The one thing missing on macOS is a GUI preferences pane. iTerm2’s preferences window is sprawling but it does let you click through options without leaving the app. Ghostty wants you to edit the file. For me this is a feature; for newcomers it can be friction.
Native macOS Feel
This is where Ghostty quietly beats most cross-platform terminals.
- Real native tabs using NSWindow tabbing, which means cmd+T behaves like every other Mac app, tab spillover into a tab bar happens at the OS level, and Mission Control treats them correctly.
- Real splits with proper focus management, configurable keybindings, and animations that match the rest of macOS.
- Real chrome. The title bar respects the system appearance, traffic lights are where you expect them, fullscreen is actual macOS fullscreen and not a janky window-maximize hack.
- Quick terminal — a global hotkey to drop down a terminal from the top of the screen, iTerm-style. Configurable, fast, useful.
On Linux, you get a GTK4 app with libadwaita styling. It is fine. It is not the polished experience of the Mac app. If you live primarily on Linux, Wezterm is still the better daily driver.
Where Ghostty Falls Short
I went into this review trying to be honest about where iTerm2 still wins. The list is shorter than I expected, but it exists.
1. The Linux app is a generation behind the Mac app. This is being actively worked on, but as of the most recent builds, things like input methods, drag-and-drop into the window, and HiDPI scaling on multi-monitor setups all need more polish on Linux than on macOS.
2. No Windows version. None. If you work on Windows, this is a non-starter. WSL is the workaround (you run Ghostty inside a Linux VM or on the Linux side of WSL), but no native Windows build is planned in the near term.
3. Some terminal-app integrations need config tweaks. Two specifically tripped me up:
- tmux pane navigation. I had
ctrl+h/j/k/lbound to navigate panes in tmux, with smart-splits plugin to also navigate vim panes. Ghostty steals those by default for its own split navigation. Fixed by settingkeybind = ctrl+h=unbind(and j/k/l) in the Ghostty config, but it took me 20 minutes to figure out why my muscle memory broke. - Neovim floating windows. Some plugins (telescope, snacks) render their popup borders slightly differently in Ghostty than iTerm2 because of how the two terminals handle BCE (background color erase) with transparency. Fixed by setting
background-opacity = 1.0andbackground-blur-radius = 0if you do not need transparency.
4. No GUI preferences pane on macOS. Already mentioned. For me this is fine. For onboarding new developers to a setup, it is a friction point.
5. The 1.x release line is still moving fast. Every minor version brings useful changes but also occasionally tweaks default behavior. I would not call it unstable, but I have had to update my config twice in a year to match a renamed option. iTerm2 by contrast is glacially stable, which has its own virtues.
Ghostty vs the Field
Quick takes from a year of using each of these.
vs iTerm2: Ghostty is faster, simpler, and has a saner config experience. iTerm2 has more raw features (Python scripting, dozens of obscure profile options, an arrange-by-time feature) that I never used. If you use iTerm2’s Python API or its session-restoration features heavily, stay on iTerm2. Otherwise, switch.
vs Warp: Warp has a better-looking command palette and built-in AI command generation, both of which are real differentiators if you want them. Warp also requires a cloud account by default, which I find disqualifying for a terminal. If you want AI in your terminal, run an LLM CLI inside Ghostty. Better separation of concerns.
vs Wezterm: Wezterm is the closest competitor. On Linux it wins. On macOS Ghostty wins because the native feel is genuinely better. If you want Lua scripting for your terminal config, use Wezterm. If you do not, use Ghostty.
vs Alacritty: Alacritty is the spiritual predecessor — GPU terminal, minimal config, no scrollback by default in v1 (added later). Ghostty is what Alacritty would be if Alacritty had cared about being a daily-driver terminal instead of a benchmark winner. Alacritty is still a fine choice for tmux-everything purists. For everyone else, Ghostty is the upgrade.
My Current Ghostty Config
Worth sharing because it is short.
# ~/.config/ghostty/config
font-family = JetBrains Mono
font-size = 14
theme = catppuccin-mocha
window-padding-x = 12
window-padding-y = 8
window-padding-balance = true
# macOS native
macos-titlebar-style = tabs
macos-option-as-alt = true
# Behavior
copy-on-select = clipboard
shell-integration = zsh
shell-integration-features = no-cursor,sudo
cursor-style = block
cursor-style-blink = false
# tmux navigation passes through
keybind = ctrl+h=unbind
keybind = ctrl+j=unbind
keybind = ctrl+k=unbind
keybind = ctrl+l=unbind
# Quick terminal (drop-down from top of screen)
keybind = global:cmd+grave_accent=toggle_quick_terminal
That is it. Twenty lines. Compare to my old iTerm2 dynamic profile JSON which was 400+ lines and which I had honestly forgotten what half of it did.
Should You Switch?
The question I get asked most often: “Is it worth switching off iTerm2?”
The answer is yes if:
- You spend more than 4 hours a day in a terminal
- You are on macOS
- You have ever thought “this scroll feels janky” or “this rendering looks chunky”
- You are willing to spend an hour migrating your keybindings and tweaking a few defaults
The answer is no (yet) if:
- You are on Windows (use Windows Terminal)
- You live on Linux and Wezterm already works for you
- You depend on iTerm2’s Python API or its more exotic features
- You hate change
The Bottom Line
Ghostty is the macOS terminal to beat in 2026. It is the first terminal in years that has made me forget about my terminal — no quirks to work around, no config bankruptcy, no waiting for renders. It just gets out of the way.
If you have been hearing the hype and putting off the switch, this is your sign. Install it, copy three lines into a config file, open it tomorrow morning, and tell me you do not feel the latency difference. The whole experience is what a terminal should be: fast, native, boring in the best way.
Wezterm users on macOS, you should try it too. It is not the same project as Wezterm and the priorities are different. Both are excellent. On macOS specifically, Ghostty wins on polish.
iTerm2 had a great decade. It is okay to move on.