How to Use Ghostty Efficiently: A Power User's Guide

Ghostty — the GPU-accelerated terminal emulator built in Zig

Published March 28, 2026
10 min read

How to Use Ghostty Efficiently: A Power User's Guide

Ghostty is the fastest, most feature-rich native terminal emulator I've used. Here's everything you need to know to get the most out of it — from configuration to splits, Quake mode, and advanced keybindings.

GhosttyTerminalDeveloper ToolsProductivityZig

Why Ghostty

I've used iTerm2 for years. It was fine. Then I tried Alacritty — blazing fast, but stripped down to the point where you need tmux for basic split panes. WezTerm was powerful but felt like configuring a Lua application rather than a terminal. Kitty was close, but the UI never felt native on macOS.

Then Ghostty came along. Built by Mitchell Hashimoto (the HashiCorp founder) in Zig, it hits a sweet spot I didn't think was possible: GPU-accelerated rendering on par with Alacritty, a rich feature set rivaling iTerm2, and a genuinely native UI on both macOS (Swift/AppKit) and Linux (GTK4). No Electron. No compromises.

The killer combination:

  • Metal/OpenGL GPU rendering — roughly 100x faster than Terminal.app
  • Native UI — proper macOS and Linux integration, not a web wrapper
  • Built-in splits and tabs — no tmux dependency for basic workflows
  • Zero-config defaults — works beautifully out of the box, customizable when you need it
  • Quake-style dropdown terminal — a global hotkey that summons a terminal from the top of your screen

Currently supports macOS and Linux. Windows is on the roadmap. The core library libghostty already compiles for macOS, Linux, Windows, and WebAssembly.

Installation

macOS

# Homebrew (recommended)
brew install --cask ghostty

# Or download the DMG directly from ghostty.org/download

Linux

# Arch Linux (official repos)
sudo pacman -S ghostty

# NixOS
nix-env -iA nixpkgs.ghostty

# Ubuntu/Debian
sudo add-apt-repository ppa:ghostty/ppa
sudo apt update && sudo apt install ghostty

# Fedora/RHEL
sudo dnf install ghostty

# From source (requires Zig 0.13+)
git clone https://github.com/ghostty-org/ghostty
cd ghostty
zig build -p ~/.local -Doptimize=ReleaseFast

Verify It Works

ghostty --version
ghostty +list-themes     # see all built-in themes
ghostty +list-keybinds   # see all default keybindings

Configuration

Ghostty uses a plain-text key = value config file at ~/.config/ghostty/config. No JSON, no YAML, no Lua — just simple key-value pairs. Many options support hot-reload, so you don't even need to restart.

Open it with Cmd+, on macOS, or Ctrl+Shift+, on Linux.

Here's the config I actually use:

############################
# Font
############################
font-family = JetBrains Mono
font-size = 14
font-thicken = true          # bolder glyphs on Retina displays

############################
# Appearance
############################
theme = catppuccin-mocha
background-opacity = 0.92
background-blur-radius = 20  # frosted glass effect (macOS)
window-padding-x = 12
window-padding-y = 10
cursor-style = block
cursor-style-blink = false

############################
# Behavior
############################
shell-integration = zsh
mouse-hide-while-typing = true
copy-on-select = clipboard    # select text = copy to clipboard
confirm-close-surface = false # no confirmation dialog on close
scrollback-limit = 10000

############################
# Window
############################
window-decoration = false
macos-titlebar-style = hidden
resize-overlay = never

############################
# SSH compatibility
############################
term = xterm-256color         # prevents terminfo errors on remote

############################
# Custom keybindings
############################
keybind = global:cmd+grave_accent=toggle_quick_terminal
keybind = opt+h=goto_split:left
keybind = opt+j=goto_split:bottom
keybind = opt+k=goto_split:top
keybind = opt+l=goto_split:right

Quick Reference

KeyWhat it does
font-familyAny installed font name
font-sizeFont size in pt (default: 12)
themeTheme name — run ghostty +list-themes to browse
background-opacity0.0 to 1.0 transparency
background-blur-radiusBlur intensity (macOS only)
cursor-styleblock, underline, or bar
shell-integrationbash, fish, zsh, or none
scrollback-limitLines of scrollback (0 = unlimited)
copy-on-selecttrue, clipboard, or false
termTERM env var — default xterm-ghostty
macos-titlebar-stylenative, transparent, hidden, tabs

Appearance Customization

Themes

Ghostty ships with hundreds of built-in themes:

ghostty +list-themes

# Popular ones worth trying:
# catppuccin-mocha / catppuccin-latte
# tokyo-night / tokyonight-storm
# gruvbox-dark / gruvbox-light
# dracula / nord / one-dark
# rose-pine / kanagawa

You can even auto-switch between light and dark themes based on your system appearance:

theme = dark:catppuccin-mocha,light:catppuccin-latte

Custom Colors

If you want full control over your palette:

background = #1e1e2e
foreground = #cdd6f4
selection-background = #585b70
cursor-color = #f5e0dc

# ANSI colors
palette = 0=#45475a
palette = 1=#f38ba8
palette = 2=#a6e3a1
palette = 3=#f9e2af

Font Setup with Nerd Fonts

For icon support in tools like Starship, Neovim, and lsd:

brew install --cask font-jetbrains-mono-nerd-font
brew install --cask font-meslo-lg-nerd-font
brew install --cask font-fira-code-nerd-font
font-family = JetBrainsMono Nerd Font
font-size = 13
font-thicken = true

# Enable ligatures
font-feature = calt
font-feature = liga

Custom Shaders

Ghostty supports GLSL shaders for visual effects like CRT scanlines or glow:

custom-shader = ~/.config/ghostty/shaders/crt.glsl
custom-shader-animation = true

Keybindings Cheat Sheet

Window & Tabs (macOS)

ShortcutAction
Cmd+NNew window
Cmd+TNew tab
Cmd+WClose current tab
Cmd+1-9Switch to tab N
Cmd+Shift+{ / }Previous / next tab
Cmd+ReturnToggle fullscreen
Cmd+Shift+PCommand palette

Split Panes (macOS)

ShortcutAction
Cmd+DSplit right (horizontal)
Cmd+Shift+DSplit down (vertical)
Cmd+Shift+ReturnToggle split zoom
Cmd+Option+ArrowNavigate to split in direction
Cmd+Shift+[ / ]Cycle through splits

Edit & Copy

ShortcutAction
Cmd+C / Cmd+VCopy / paste (macOS)
Ctrl+Shift+C / VCopy / paste (Linux)
Cmd+FSearch (v1.3.0+)
Cmd++ / Cmd+-Zoom in / out
Cmd+0Reset font size
Cmd+,Open config file
Ctrl+Shift+,Reload config
Cmd+Shift+ITerminal inspector

Splits & Tabs — Replacing tmux

This is where Ghostty shines. Built-in splits mean you can skip tmux entirely for local work.

Vim-Style Navigation (My Recommended Config)

# Navigate splits with Opt+hjkl
keybind = opt+h=goto_split:left
keybind = opt+j=goto_split:bottom
keybind = opt+k=goto_split:top
keybind = opt+l=goto_split:right

# Create splits with Opt+Shift+hjkl
keybind = opt+shift+h=new_split:left
keybind = opt+shift+j=new_split:down
keybind = opt+shift+k=new_split:up
keybind = opt+shift+l=new_split:right

# Resize splits (10px increments)
keybind = ctrl+shift+h=resize_split:left,10
keybind = ctrl+shift+j=resize_split:down,10
keybind = ctrl+shift+k=resize_split:up,10
keybind = ctrl+shift+l=resize_split:right,10

# Equalize all splits
keybind = opt+shift+equal=equalize_splits

tmux-Style Prefix Keys

If you're coming from tmux and want similar ergonomics:

keybind = ctrl+a>o=toggle_tab_overview
keybind = ctrl+a>n=new_window
keybind = ctrl+a>t=new_tab

The > syntax creates sequence bindings — press Ctrl+A, release, then press the next key. Feels identical to tmux prefix mode.

Undo Closed Splits

Accidentally closed a split? Ghostty has undo:

keybind = cmd+z=undo
keybind = cmd+shift+z=redo
undo-timeout = 10s

The Tab Overview supports search and shows the last command each tab ran — very useful for finding the right tab in a busy session.

Quick Terminal (Quake Mode)

This is my favorite Ghostty feature. A single global hotkey summons a terminal that slides in from the top of your screen — like the console in Quake. It persists in the background, keeping your session alive.

# Global hotkey — works even when Ghostty is in the background
keybind = global:cmd+grave_accent=toggle_quick_terminal

# Configure position and size
quick-terminal-position = top       # top | bottom | left | right | center
quick-terminal-screen = main        # main | mouse | screen number
quick-terminal-size-height = 0.4    # 40% of screen height
quick-terminal-animation-duration = 0.2

The global: prefix means this keybinding works system-wide — even when another app is in focus. I use Cmd+` to toggle it, and it's become muscle memory for quick commands.

Advanced Features

Shell Integration

With shell integration enabled, Ghostty becomes context-aware:

shell-integration = zsh
shell-integration-features = cursor,sudo,title

What you get:

  • Cursor shape changes automatically in vi mode
  • Title bar shows the currently running command
  • sudo temporarily disables password echo protection
  • Command-block navigation — jump between command outputs

Image Display

Ghostty supports the Kitty graphics protocol, so you can display images directly in the terminal:

pip install timg
timg image.png

# Or use viu (Rust-based)
cargo install viu
viu image.png

Performable Keybindings (v1.2.0+)

Smart keybindings that only fire when the action makes sense:

# Ctrl+C copies when text is selected, sends interrupt otherwise
keybind = performable:ctrl+c=copy_to_clipboard

This eliminates the classic terminal conflict between "copy" and "interrupt signal."

Key Tables (Modal Keybindings)

Create Vim-style modal keybinding layers:

# Enter "copy mode" with Ctrl+Shift+Space
keybind = ctrl+shift+space=push_key_table:copy-mode
keybind = copy-mode/escape=pop_key_table
keybind = copy-mode/y=copy_to_clipboard

Clickable Links

link-url = true

URLs in terminal output become clickable. Combined with shell integration, file paths from ls, grep, and compiler errors are all navigable.

macOS-Specific Features

  • Quick Look — preview files directly in the terminal
  • Force Touch — force-press the trackpad to look up words
  • Secure Input — password fields are protected from keyloggers
  • Window restoration — all tabs and splits are restored after a restart
  • Non-native fullscreenmacos-non-native-fullscreen = true avoids the Space-switching animation

Practical Tips

Working with tmux

If you still want tmux for remote sessions, you can forward Ghostty keybindings to tmux:

# Cmd+S sends tmux save-buffer
keybind = cmd+s=text:\x01\x73
# Cmd+B sends tmux prefix + zoom
keybind = cmd+b=text:\x01\x7a

# Disable Ghostty splits to avoid conflicts
keybind = cmd+d=unbind

SSH Without terminfo Errors

The most common Ghostty gotcha — remote servers don't know xterm-ghostty:

term = xterm-256color

Or per-connection: TERM=xterm-256color ssh user@server

Launch a Specific Shell

# All new windows start fish
command = /opt/homebrew/bin/fish

# Or auto-attach to a tmux session
initial-command = tmux new-session -A -s main

Multi-Config Files

Split your config into modules:

config-file = ~/.config/ghostty/work.conf
config-file = ~/.config/ghostty/keybinds.conf

Discovery Commands

ghostty +list-keybinds   # all active keybindings
ghostty +list-actions    # all available actions
ghostty +list-themes     # all built-in themes

How Does Ghostty Compare?

TerminalSpeedFeaturesNative FeelConfig Complexity
GhosttyExcellentExcellentExcellentVery Low
AlacrittyExcellentMinimalLowLow
WezTermGoodExcellentLowHigh
iTerm2FairExcellentGoodMedium
KittyExcellentGoodLowMedium

Ghostty is the first terminal that doesn't ask you to choose between speed and features. If you're on macOS or Linux and haven't tried it yet, brew install --cask ghostty and give it 30 minutes. You probably won't go back.

FAQ

Q: Config changes aren't taking effect? Not all options support hot-reload. Font, renderer, and other low-level settings require a full restart. Themes, opacity, and keybindings usually hot-reload fine.

Q: Neovim colors look wrong? Make sure term = xterm-ghostty (the default) and add vim.opt.termguicolors = true to your Neovim config.

Q: How do I reset everything?

rm ~/.config/ghostty/config
# Restart Ghostty — you're back to defaults

Q: Windows support? On the roadmap. The core rendering library already supports Windows, but the native UI layer isn't built yet.

Comments

Leave a Comment

0/5000

Comments are reviewed before being published.