Ghostty on a Mac: what the terminal does well and where it stops

Ghostty arrived with more attention than terminal emulators usually get, and the reaction split the way these things always do. Some people switched the day they installed it. Others asked what it does that their current terminal does not. Both reactions are reasonable, because Ghostty's design goal is unusual: not to add features nobody else has, but to be fast, feature-rich and native at the same time, where other terminals have tended to pick two.

This is a look at what that means in daily use on a Mac, what the current release includes, and the places where Ghostty's scope stops and you need something else.

What it is, in concrete terms

Ghostty is a terminal emulator by Mitchell Hashimoto, released under the MIT license. The download page lists version 1.3.1 as the current release, shipped as a universal binary for Apple Silicon and Intel, requiring macOS 13 Ventura or later. Linux builds exist; Windows support is described in the documentation as planned for the future.

The architecture explains a lot of the experience. The project documentation states that on macOS the GUI is written in Swift using AppKit and SwiftUI, on Linux in Zig using the GTK4 C API, and that both talk to a shared core written in Zig called libghostty. Rendering is GPU-accelerated, using Metal on macOS.

The practical consequence is that tabs, splits and other interface elements are real macOS components rather than drawn inside the terminal grid. Window behaviour, keyboard shortcuts and system integrations follow the conventions you already expect, which is exactly the part that is hard to notice until it is missing.

The macOS features worth knowing about

Ghostty's documentation lists a set of platform-specific features that do not exist on its Linux build.

Quick Terminal. A lightweight terminal that animates down below the menu bar for instant access without interrupting what you are doing. If you have used a drop-down terminal before, this is the built-in version, with no extra tooling.

AppleScript automation. Ghostty ships an AppleScript dictionary for scripting windows, tabs, terminals, layouts and input events. That matters for anyone who builds their working setup with a script rather than by hand.

Quick Look. Tapping text with three fingers or using force touch hands the selection to macOS Quick Look for definitions and lookups.

Secure Keyboard Entry. Ghostty can detect password prompts and enable secure keyboard entry, with an animated lock icon showing when it is active, which protects what you type from other processes.

Proxy icon. The title bar proxy icon can be dragged to move or reach the session's files, the same way a document window behaves elsewhere in macOS.

Beyond the platform list, the feature set covers what most people want day to day: multiple windows each with their own tabs and splits, hundreds of bundled themes that can follow the system light and dark setting, ligature support with per-font feature control, correct rendering of multi-codepoint emoji and grapheme clusters, and support for the Kitty graphics protocol so programs can draw images inline.

Configuration: a text file, and the zero-config stance

Ghostty is configured with a text file. The documentation names it config.ghostty, notes that it was called config before version 1.2.3, and lists the load order: the XDG path, $XDG_CONFIG_HOME/ghostty/, which defaults to ~/.config/ghostty/, and on macOS also ~/Library/Application Support/com.mitchellh.ghostty/. If both exist, the macOS-specific files load after the XDG ones, and later values win.

The syntax is deliberately plain, key = value, one per line, with # comments. A few details make it pleasant in practice:

  • Every configuration key is also a command-line flag, so ghostty --font-family="JetBrains Mono" tests a setting without editing anything.
  • An empty value resets a key to its default.
  • config-file splits a long configuration into several files.
  • Keybindings are just more keys: keybind = ctrl+d=new_split:right.

The project states a zero-configuration philosophy: sensible defaults, an embedded default font (JetBrains Mono), built-in nerd fonts, and an explicit invitation to try it without configuring anything first. There is currently no graphical settings window; the documentation says native configuration GUIs are planned in addition to the text file, but that presently the text file is the only way to configure it.

Whether that is a drawback depends entirely on you. People coming from a terminal with a settings window will notice. People who keep their dotfiles in a repository will consider it the correct answer.

Installing it and moving a setup across

The macOS build comes from the project's download page as a universal binary, and Homebrew carries it as a cask named ghostty, currently at the same 1.3.1 version. The documentation notes that the project only officially distributes prebuilt binaries for macOS, with Linux packaging handled by distribution maintainers and community members.

Moving an existing setup across is mostly about three things.

The shell stays the same. Your shell, prompt, aliases and shell integration live in your shell's configuration, not in the terminal app, so nothing there needs to change.

Keybindings do not carry over. Ghostty uses different default bindings on macOS and Linux to match each platform's conventions, and anything custom you had elsewhere has to be restated as keybind lines. This is usually a short list: splits, tab movement, and whatever your editor workflow depends on.

The font and theme are one line each. font-family and theme cover what most people change first, and because every key doubles as a command-line flag you can try a theme in a throwaway window before committing it to the file.

One habit worth adopting early: keep the config file in the same repository as your dotfiles. Because the format is plain text with an include mechanism, the whole setup moves to a new Mac in one step.

Where Ghostty stops

Every tool has an edge, and knowing Ghostty's saves time.

Session persistence across a disconnect. Ghostty recovers window state when it restarts on macOS, which is a native integration, not a session manager. If you need a shell session that survives losing a connection, or that you can reattach to from another machine, that is still tmux, screen or Mosh. This is not a gap unique to Ghostty; kitty, Alacritty and Terminal all leave it to a multiplexer too, while WezTerm and iTerm2 build in more on this front.

The terminfo problem over SSH. Ghostty sets TERM to xterm-ghostty, and most remote hosts do not ship that terminfo entry, which produces odd behaviour on the remote side until it is installed. The documentation covers a +ssh wrapper that installs the entry on first connection and falls back to xterm-256color if it cannot, but it also states plainly that +ssh requires the development version that will become 1.4.0 and is not present in 1.3.x. On the current release, SSH shell integration features are available, and installing the terminfo entry on hosts you use often is the usual fix.

Windows. Not yet. The documentation lists it as planned.

AI and agent features. Ghostty is a terminal emulator, not a workspace. It runs whatever you run inside it, including coding agents, but it does not add its own command suggestions, cloud sessions or agent management the way some newer terminals do.

Files. This is the broadest limit, and it is shared by every terminal in this category. A terminal shows a shell. The moment your work involves both commands and a folder of material, you are switching between the terminal and a file manager, and that switch is on you.

How it compares with the usual alternatives

Terminal License and price Configuration Notable
Ghostty 1.3.1 MIT, free Text file, key = value Native macOS UI, Quick Terminal, AppleScript dictionary, Metal rendering
Apple Terminal Included with macOS Settings window with profiles Always present, window groups, no external install
iTerm2 3.7.2 GPL v2, free Extensive settings window Split panes, hotkey window, triggers, shell integration, tmux integration
kitty GPL-3.0, free Text file GPU based, scriptable with Python kittens, its own graphics protocol
WezTerm Free, open source Lua Built-in multiplexing and SSH domains
Alacritty Free, open source TOML Deliberately minimal; its README says you will not find tabs or splits, which it leaves to a multiplexer
Warp Free tier, paid plans from $20 per month on its pricing page Settings UI and account Agent-focused terminal with cloud features

The table makes the decision simpler than the forum threads do. If you want native macOS behaviour with no configuration required to get a good default, Ghostty is the obvious pick. If you want a settings window with every option exposed, iTerm2 has had one for years. If you want the terminal itself to manage remote sessions, WezTerm and iTerm2 go further. If you want as little as possible in the way, Alacritty is explicit about that.

Who it suits, and who it does not

Ghostty suits you if you want a terminal that feels like a macOS app, you are comfortable editing a text file for settings, and you value startup speed and rendering quality over having every option exposed in a window.

It suits you less if your workflow depends on features that live outside the terminal grid. People who rely on iTerm2's triggers, instant replay or its tmux integration will find those specific things missing. People who want a graphical settings panel will be waiting for a planned feature. People who work primarily on Windows machines are out of scope entirely for now.

The honest summary is that Ghostty is not trying to beat the others on feature count. It is trying to remove the compromise between speed, features and native behaviour, and on macOS it largely succeeds. Whether that is worth switching for depends on whether the compromise was bothering you.

Three practical notes for anyone weighing it against a current setup. Ghostty's speed advantage shows up most in the first second after launch and when a command dumps a large amount of output, not in everyday typing, where every modern terminal is fast enough. Its theme handling is the easiest of the group to live with, because themes can follow the system appearance without a restart. And because the configuration is plain text with an include mechanism, trying it costs very little: nothing about your shell setup changes, so going back is uninstalling an app.

What to change first

Install Ghostty and use it unconfigured for a week before touching a config file, because its defaults are the point of the project. Then add only what you miss: a theme, a font size, and a keybinding or two. If the thing you keep reaching for is not a terminal feature at all, but the folder you are working in, a file manager with a terminal built into the same window removes that switch entirely; the features page shows how per-folder terminals work, and the comparison page places it next to the tools above.

Frequently asked questions

Is Ghostty free?

Yes. It is open source under the MIT license, and the macOS build is a universal binary downloaded from the project site. The current release listed there is 1.3.1.

What version of macOS does Ghostty need?

The download page states macOS 13 Ventura or later, with a universal binary that runs on both Apple Silicon and Intel Macs.

Does Ghostty have a settings window?

Not currently. Configuration is a text file, config.ghostty, loaded from ~/.config/ghostty/ or ~/Library/Application Support/com.mitchellh.ghostty/. The documentation says native configuration GUIs are planned in addition to the text file.

Why does the remote shell look wrong after connecting with SSH?

Ghostty uses xterm-ghostty as its TERM value, and most hosts do not have that terminfo entry. The ghostty +ssh wrapper installs it automatically, but the documentation notes that +ssh requires the version that will become 1.4.0 and is not in 1.3.x.

Does Ghostty keep sessions running if the connection drops?

No. It restores window state when the app restarts on macOS, but a shell session that survives a dropped connection needs tmux, screen or Mosh, as with most terminal emulators.

Back to all posts