What is Ghostty?
Ghostty is a fast, feature-rich, cross-platform terminal emulator written in Zig by Mitchell Hashimoto (creator of Vagrant, Packer, Terraform, and HashiCorp). It went open-source in late 2024 and quickly became one of the most talked-about terminals due to its combination of native platform integration, GPU-accelerated rendering, and deep configurability.
Fast
GPU-accelerated rendering via Metal (macOS) and OpenGL/Vulkan (Linux)
Native
Swift/AppKit on macOS, GTK4 on Linux — feels like a first-class OS citizen
Configurable
Single plain-text config file with hundreds of options, no YAML bloat
Compatible
Full xterm compatibility + modern protocols (Kitty keyboard, graphics, sixel)
Shell-aware
Deep shell integration for bash, zsh, fish — semantic zones, CWD tracking
Open Source
MIT licensed, written in Zig for predictable performance and memory safety
Why choose Ghostty over alternatives?
Beautiful & Native
Real OS integrationUses the actual macOS window system (not Electron), so you get proper transparency, window shadows, and system font rendering — not a web app pretending to be a terminal.
Startup Speed
Near-instant launchGhostty starts in under 50ms on modern hardware. No JVM warmup, no Electron bootstrap, no Objective-C runtime overhead — compiled Zig binary.
Simple Config
Key = value, no TOML/YAML hellOne config file, plain key = value format. No nested structures, no arrays of tables — just readable, human-friendly settings.
Protocol-first
Kitty, Sixel, OSC52Implements modern terminal protocols: Kitty keyboard protocol, Kitty graphics protocol (images in terminal), Sixel graphics, and OSC 52 clipboard.
Installation
macOS
Homebrew (recommended)
Direct Download
Linux
Package Managers
Build from Source
Configuration
Config File Location
ghostty +list-themes and ghostty +list-fonts to explore built-in options.
Font Configuration
Appearance & Window
Custom Keybindings
ghostty +list-actions to see all bindable actions. Use ghostty +show-config to see the full resolved config including defaults.
Complete Config Reference (Key Options)
| Option | Default | Description |
|---|---|---|
| font-family | monospace | Primary font family name |
| font-size | 12 | Font size in points |
| theme | (none) | Built-in theme name or path to custom theme |
| background | #282c34 | Background color (hex) |
| foreground | #ffffff | Default foreground (text) color |
| background-opacity | 1.0 | Window opacity (0.0–1.0) |
| background-blur-radius | 0 | macOS blur radius for vibrancy effect |
| cursor-style | block | block | bar | underline |
| cursor-style-blink | true | Whether the cursor blinks |
| shell-integration | detect | detect | none | bash | zsh | fish |
| shell-integration-features | cursor,sudo,title | Which integration features to enable |
| scrollback-limit | 10000 | Number of scrollback lines (0 = unlimited) |
| clipboard-read | ask | allow | ask | deny — OSC 52 clipboard reads |
| clipboard-write | allow | allow | ask | deny — OSC 52 clipboard writes |
| mouse-hide-while-typing | false | Hide cursor while typing |
| link-url | true | Make URLs clickable |
| confirm-close-surface | true | Confirm before closing split/tab with running process |
| macos-option-as-alt | false | Use Option key as Alt (useful for CLI tools) |
| window-vsync | true | Sync rendering to display refresh rate |
| gtk-single-instance | desktop | Linux: reuse existing instance |
Keyboard Shortcuts
Default shortcuts — many are configurable via keybind in config.
Windows & Tabs
Splits (Panes)
Font & Display
Scrollback & Clipboard
Other
Linux (GTK)
Shell Integration
Ghostty provides deep shell integration that enables semantic features — the terminal understands prompt boundaries, working directories, and command status.
shell-integration = detect (default) in config. You can also set it explicitly: shell-integration = zsh.
How It Works
Features Enabled by Shell Integration
Semantic Navigation
- Jump to previous/next prompt with ⌘↑/↓
- Select output of previous command
- Visual distinction between prompts and output
CWD Tracking
- New tabs/splits open in current directory
- Window title shows current path
- Works across
cd,z,autojump
Exit Code Marking
- Failed commands visually marked in scrollback
- Jump to last failed command
- Useful for long build outputs
sudo Integration
- Ghostty injects itself into sudo sessions
- Shell integration continues to work inside sudo
- CWD tracking preserved across privilege escalation
Manual Setup (if auto-detect fails)
zsh — add to ~/.zshrc
bash — add to ~/.bashrc
Shell Integration Config Options
Themes
Ghostty ships with 200+ built-in themes. You can also create custom themes or use community themes.
Popular Built-in Themes
Catppuccin Mocha
Tokyo Night
Dracula
Nord
Gruvbox Dark
One Dark
Custom Theme File
Place in ~/.config/ghostty/themes/my-theme
Splits & Tabs
Tabs
Each tab runs an independent shell session. Tabs appear in the title bar (macOS) or a tab bar (Linux).
- New tab: ⌘T
- Close tab: ⌘W
- Switch tabs: ⌘1–9
Splits (Panes)
Split the current tab into multiple panes, each running independently. Panes can be nested arbitrarily.
- Split right: ⌘D
- Split down: ⌘⇧D
- Navigate: ⌘⌥↑↓←→
Zoom
Zoom a split to fill the entire tab temporarily — great for focusing on one pane without closing others.
- Toggle zoom: ⌘⇧↵
- Zoomed pane still receives input
- Un-zoom restores split layout
Resize Splits
Resize splits by dragging the divider or via keybindings.
- Resize in config:
resize_split:right:10 - Bind to keys via
keybindconfig - Equal split:
equalize_splitsaction
Config for Splits Behavior
Terminal Protocols
Ghostty implements modern terminal protocols that enable richer features beyond what traditional xterm supports.
Kitty Keyboard Protocol
Enhanced key inputDisambiguates key events that xterm conflates — separate keydown/keyup events, modifier-only keys, key repeats. Enables tools like Neovim to bind Ctrl+Shift+F, Alt+Enter, etc.
vim.o.kitty_keyboard = true (via terminfo). Ghostty ships with correct terminfo.Kitty Graphics Protocol
Images in terminalDisplay full raster images (PNG, JPEG, WebP, GIF, AVIF) directly in the terminal at pixel resolution. Used by tools like ranger, yazi, wezterm img, and inline image viewers.
kitten icat image.png or viu image.jpgSixel Graphics
Legacy image protocolOlder pixel graphics standard supported for compatibility with tools like gnuplot, chafa, and timg.
OSC 52 Clipboard
Clipboard over SSHApplications inside SSH sessions can copy to your local clipboard via OSC 52 sequences. Works across tmux, nested SSH sessions, etc.
Hyperlinks (OSC 8)
Clickable URLsTerminals can mark text as hyperlinks with custom URLs. Ghostty renders them as clickable links that open in your browser. Tools like ls --hyperlink, GitHub CLI, and modern compilers emit these.
True Color (24-bit)
16M colorsFull 24-bit RGB color support. Required by modern color schemes in Neovim, tmux, and other TUI applications.
Ghostty vs Other Terminals
| Feature | Ghostty | iTerm2 | WezTerm | Kitty | Alacritty |
|---|---|---|---|---|---|
| Language | Zig | ObjC/Swift | Rust/Lua | C/Python | Rust |
| GPU Rendering | Metal / OpenGL | Metal | OpenGL/Metal | OpenGL | OpenGL/Metal |
| Platform UI | Native (Swift/GTK4) | Native macOS only | Custom (WGPU) | Custom | Custom (winit) |
| Config format | Simple key=value | GUI prefs | Lua | Python/conf | TOML |
| Splits/Tabs | Yes | Yes | Yes | Yes | No |
| Kitty Graphics | Yes | No | Yes | Yes (invented it) | No |
| Kitty Keyboard | Yes | No | Yes | Yes (invented it) | No |
| Shell Integration | Deep (auto) | Deep | Yes | Yes | None |
| Sixel Graphics | Yes | Yes | Yes | Partial | No |
| macOS support | First-class | First-class | Yes | Community port | Yes |
| Linux support | First-class (GTK4) | No | Yes | First-class | Yes |
| Startup time | ~50ms | ~500ms+ | ~100ms | ~100ms | ~30ms |
| Background opacity | Yes + blur | Yes + blur | Yes | Platform-dependent | Yes |
| Scrollback search | Yes | Yes | Yes | Yes | vi-mode only |
Tips & Tricks
Use Option as Alt for CLI tools
On macOS, Option generates special characters by default. Set macos-option-as-alt = true to make Option act as Alt — essential for Emacs (Alt+x), tmux (Alt+arrows), and other tools.
Enable background blur for vibrancy
Set background-opacity = 0.9 and background-blur-radius = 20 for a macOS-native blurred background effect. Looks beautiful with dark themes.
Jump between prompts with Cmd+Up/Down
With shell integration enabled, ⌘↑ and ⌘↓ jump directly to previous/next command prompts in the scrollback. Much faster than scrolling manually.
Use ghostty +show-config to debug
Run ghostty +show-config in your terminal to see the full resolved configuration including all defaults. Helpful for troubleshooting why a setting isn't taking effect.
Set up a minimal Neovim-friendly config
Ghostty ships with correct terminfo and the Kitty keyboard protocol enabled. Set term = xterm-ghostty in your environment (auto-set) and Neovim will automatically detect advanced capabilities.
Config inheritance with config-file
Use config-file = ~/dotfiles/ghostty/base to import a shared base config. Layer multiple files — useful for maintaining a shared dotfiles config with machine-specific overrides.
Use the terminal inspector
Open the debug inspector with ⌘⌥I to see raw bytes sent/received, terminfo capabilities, and rendering details. Invaluable for debugging escape sequence issues.
Ghostty as default terminal in macOS
Set Ghostty as the default terminal app via System Settings → Default Apps → Terminal. Then open -a Ghostty, clicking terminal links, and mate/code terminal integrations all open in Ghostty.