Press ESC to close Press / to search

Ghostty Terminal Emulator: Why Linux Users Are Switching and How to Set It Up

Terminal emulators are one of those categories of software where strong opinions are common and...

Linux Open Source

Terminal emulators are one of those categories of software where strong opinions are common and transitions happen rarely. Once a developer finds a terminal they like, they tend to stay with it for years — configuring it, customizing it, and building muscle memory around its quirks. Against that backdrop, Ghostty has done something remarkable: it has gotten a significant portion of the Linux developer community to actually switch, and to talk enthusiastically about making the switch. Built by Mitchell Hashimoto, the founder of HashiCorp (the company behind Terraform, Vault, Vagrant, and Consul), Ghostty is a terminal emulator that prioritizes correctness, performance, and thoughtful design in equal measure.

Who Built Ghostty and Why

Mitchell Hashimoto is one of the most respected infrastructure software engineers in the world, having built several tools that are now foundational to modern DevOps. After leaving HashiCorp in 2023, he turned his attention to lower-level systems programming, eventually arriving at the humble terminal emulator as a project that would let him explore Zig (the systems programming language Ghostty is written in) while solving a real problem he cared about.

Hashimoto’s stated motivation for building Ghostty was dissatisfaction with the existing options. Existing fast terminals like Alacritty prioritize minimalism to a fault, lacking features like native tabs and splits. Kitty and WezTerm are feature-rich but have their own performance and compatibility trade-offs. iTerm2 (macOS only) sets a high bar for functionality but has no Linux equivalent. Ghostty aims to be the terminal that has native platform integration, GPU-accelerated rendering, comprehensive terminal emulation correctness, and a rich feature set without sacrificing performance.

What Makes Ghostty Different

Three technical properties define Ghostty’s design:

  • GPU-accelerated rendering: Like Alacritty and Kitty, Ghostty renders text and graphics directly using the GPU via Metal on macOS and OpenGL/Vulkan on Linux. This means scrolling through large logs, rendering complex Unicode, and displaying sixel graphics are all hardware-accelerated.
  • Native platform UI: Unlike Alacritty (which uses a custom GPU renderer for everything, including the window chrome) or electron-based terminals, Ghostty uses native platform UI components where appropriate — native macOS window controls on macOS, GTK4 on Linux. This means Ghostty looks and feels like a native application rather than a foreign one.
  • Written in Zig: Ghostty is implemented in Zig, a modern systems language that offers C-like performance with better safety properties and a more ergonomic build system. This allows Ghostty to be fast, small, and have minimal dependencies.

Installing Ghostty on Linux

Ghostty launched in December 2024 with official macOS support. Linux support has grown rapidly through 2025 and is now considered stable. Installation options include:

# Add to your flake.nix inputs:
# ghostty.url = "github:ghostty-org/ghostty";

# Then in your configuration:
# environment.systemPackages = [ inputs.ghostty.packages.${system}.default ];

Installing on Arch Linux via AUR

# Using yay
yay -S ghostty

# Or the binary package for faster installation
yay -S ghostty-bin

ubuntu-debian">Installing on Ubuntu/Debian

As of early 2026, Ghostty does not have an official Ubuntu PPA, but a community-maintained one exists:

# Add community PPA
sudo add-apt-repository ppa:ghostty-builds/stable
sudo apt update
sudo apt install ghostty

Building from Source

Building from source gives you the latest version and is the officially recommended approach for distributions without packages:

# Install Zig (requires Zig 0.13 or later)
# Download from https://ziglang.org/download/
wget https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0.tar.xz
tar xf zig-linux-x86_64-0.13.0.tar.xz
export PATH=$PATH:$(pwd)/zig-linux-x86_64-0.13.0

# Install build dependencies (Ubuntu/Debian)
sudo apt install libgtk-4-dev libadwaita-1-dev git

# Clone Ghostty
git clone https://github.com/ghostty-org/ghostty.git
cd ghostty

# Build in release mode
zig build -p /usr/local -Doptimize=ReleaseFast

# Verify installation
ghostty --version

Configuration File Format

Ghostty uses a simple key = value configuration format (not TOML, not JSON, not YAML — its own minimal format). The configuration file lives at ~/.config/ghostty/config:

# ~/.config/ghostty/config

# Font configuration
font-family = JetBrains Mono
font-size = 14

# Theme
theme = catppuccin-mocha

# Window settings
window-padding-x = 8
window-padding-y = 8
window-decoration = true

# Shell integration
shell-integration = detect

# Performance
vsync = true

# Cursor
cursor-style = block
cursor-style-blink = false

# Scrollback
scrollback-limit = 10000

# Copy on select
copy-on-select = clipboard

# Background opacity (0.0 to 1.0)
background-opacity = 0.95

# Window blur (works on supported compositors)
background-blur-radius = 20

Themes and Font Configuration

Ghostty ships with a large collection of built-in themes (over 250 as of version 1.1). You can list available themes from the command line:

# List all available themes
ghostty +list-themes

# Preview a theme without changing your config
ghostty +list-themes | grep -i tokyo

# Popular themes available out of the box:
# catppuccin-mocha, catppuccin-latte
# tokyonight, tokyonight-storm
# gruvbox-dark, gruvbox-light
# nord
# dracula
# one-dark-pro
# solarized-dark, solarized-light

For fonts, Ghostty supports any font installed on your system. It also has excellent Nerd Font support for powerline symbols and icons used by tools like Starship and Oh-My-Zsh themes:

# In ~/.config/ghostty/config
font-family = FiraCode Nerd Font
font-size = 13

# For a fallback font (for characters not in your primary font)
font-family = FiraCode Nerd Font
font-family = Noto Color Emoji

Key Binding Customization

Ghostty’s keybinding system is flexible and allows binding virtually any action to any key combination:

# ~/.config/ghostty/config

# Custom keybindings
# Format: keybind = [trigger]:[action]

# New tab
keybind = ctrl+t:new_tab

# Next/previous tab
keybind = ctrl+tab:next_tab
keybind = ctrl+shift+tab:previous_tab

# Split terminal
keybind = ctrl+d:new_split:right
keybind = ctrl+shift+d:new_split:down

# Navigate splits
keybind = ctrl+h:goto_split:left
keybind = ctrl+l:goto_split:right
keybind = ctrl+k:goto_split:up
keybind = ctrl+j:goto_split:down

# Increase/decrease font size
keybind = ctrl+equal:increase_font_size:1
keybind = ctrl+minus:decrease_font_size:1
keybind = ctrl+zero:reset_font_size

# Toggle fullscreen
keybind = f11:toggle_fullscreen

Shell Integration

Ghostty includes a shell integration feature that enhances the terminal experience with semantic shell awareness. When enabled, Ghostty understands command prompts, tracks command status (success/failure), and enables features like clicking on command output to jump to it:

# Shell integration is configured in ~/.config/ghostty/config
shell-integration = detect

# Or specify your shell explicitly
shell-integration = zsh
# shell-integration = bash
# fish-integration = fish

For Zsh, you may need to add the integration to your ~/.zshrc:

# Add to ~/.zshrc if Ghostty doesn't auto-detect
# Usually this happens automatically if ghostty is in your PATH
if [ -n "$GHOSTTY_RESOURCES_DIR" ]; then
  source "$GHOSTTY_RESOURCES_DIR/shell-integration/zsh/ghostty-integration"
fi

Comparison with Alacritty, Kitty, and WezTerm

Understanding where Ghostty fits helps you make the right choice for your workflow:

vs Alacritty: Both prioritize GPU rendering, but they diverge significantly in philosophy. Alacritty deliberately has no tabs, no splits, no built-in multiplexing — you are expected to use tmux or zellij for those features. Ghostty has native tabs, splits, and a rich feature set. Ghostty is also written in Zig vs Rust, though both are fast in practice. If you love Alacritty’s minimalism, you may find Ghostty too feature-rich; if you have been wanting native tabs without tmux, Ghostty is compelling.

vs Kitty: Kitty is the closest competitor in terms of philosophy — GPU-accelerated, extensible, with a full feature set. Kitty uses OpenGL and is written in Python with C extensions. Ghostty generally has cleaner font rendering and better native platform integration. Kitty has a more mature extension ecosystem (kittens). Both are excellent choices; the decision often comes down to configuration style preference.

vs WezTerm: WezTerm is written in Rust, uses Lua for configuration, and has a very rich feature set including excellent multiplexing capabilities and native SSH. WezTerm’s Lua configuration is extremely powerful but has a steeper learning curve than Ghostty’s simple key = value format. WezTerm is the better choice if you need heavy scripting of your terminal environment; Ghostty wins on simplicity and rendering quality.

Performance Characteristics

Ghostty’s GPU rendering means it maintains consistent frame rates even under demanding conditions:

  • Scrolling through git log --oneline on a 10,000-commit repository is smooth at 60fps
  • Running cat on a large binary file produces no visible lag
  • Rendering sixel graphics (terminal pixel graphics used by tools like ranger, btop) is fast and flicker-free
  • Cold startup time is typically under 50ms
  • Memory usage at idle is approximately 30-60MB, growing modestly with scrollback buffer size

The most meaningful benchmark for terminal emulators is subjective smoothness during actual use rather than synthetic benchmarks. Users who switch to Ghostty from kitty or WezTerm frequently report that text rendering feels crisper and animations feel smoother, particularly on high-DPI displays.

Pros and Cons Summary

Pros:

  • Exceptionally fast rendering, especially on high-DPI displays
  • Native GTK4 integration on Linux — looks like a Linux application
  • Built-in tabs and splits without needing a multiplexer
  • 250+ built-in themes
  • Excellent font rendering with ligature support
  • Simple, human-readable configuration format
  • Active development with frequent releases

Cons:

  • Younger project — some edge cases in terminal emulation compatibility still being addressed
  • No scripting API (unlike WezTerm’s Lua) for advanced automation
  • Package availability varies by distribution (best on Arch/NixOS, building from source needed elsewhere)
  • No built-in SSH multiplexing (use your external SSH config and tmux for that)

Ghostty is a serious terminal emulator that has earned the attention it has received from the Linux community. For developers who spend most of their working day in a terminal, the investment in switching and reconfiguring is repaid quickly by a faster, more pleasant experience. If you have been on the fence about trying it, 2026 is a good time — the Linux version has matured significantly and the configuration ecosystem (themes, community configs) has grown substantially.

Was this article helpful?