$linuxjunkies
>

Try Ghostty, the New Native-feeling Terminal

Ghostty is a fast, native-feeling GTK4 terminal written in Zig. Install it on Ubuntu, Fedora, or Arch, configure it, and see how it stacks up against Alacritty and Kitty.

BeginnerUbuntuDebianFedoraArch7 min readUpdated June 7, 2026

Before you start

  • A desktop environment with GTK4 support (GNOME 45+, or any compositor on Wayland/X11)
  • sudo or root access for package installation
  • Zig 0.13+ toolchain if building from source
  • A Nerd Font installed if your shell prompt uses icon glyphs

Ghostty landed as a fully open-source release in late 2024 and immediately drew serious attention: it is a GPU-accelerated terminal written in Zig that aims to feel native on every platform it ships for. On Linux that means a GTK4 UI, genuine libadwaita integration, and a configuration model that is plain text without the TOML/YAML ceremony of some competitors. If you are running Alacritty or Kitty and wondering whether the hype is warranted, this guide walks you through installation, a sensible starting config, and a practical comparison.

Installing Ghostty

Ghostty is moving into distro repositories but availability depends on your release. The safest universal path is building from source using the Zig toolchain, but pre-built packages are already available for the common cases below.

Debian / Ubuntu

Ghostty is not yet in the official Debian or Ubuntu repositories as of mid-2025. Use the unofficial but widely-tested Ghostty PPA maintained by the community, or grab the .deb from the GitHub releases page.

sudo add-apt-repository ppa:ghostty-terminal/ghostty
sudo apt update
sudo apt install ghostty

If you prefer the GitHub release binary approach:

wget https://github.com/ghostty-org/ghostty/releases/latest/download/ghostty-linux-x86_64.deb
sudo dpkg -i ghostty-linux-x86_64.deb

Fedora / RHEL / Rocky

Ghostty is available in Fedora 41+ via the official repositories:

sudo dnf install ghostty

On RHEL 9 / Rocky 9 you need EPEL enabled first, then the package may still lag behind. Building from source (see below) is more reliable on that family.

Arch Linux

Ghostty is in the extra repository on Arch:

sudo pacman -S ghostty

AUR users can also find ghostty-git for the latest HEAD build.

Building from Source (Any Distro)

You need Zig 0.13 or newer and GTK4 / libadwaita development headers. On Ubuntu/Debian:

sudo apt install libgtk-4-dev libadwaita-1-dev git
git clone https://github.com/ghostty-org/ghostty.git
cd ghostty
zig build -p ~/.local -Doptimize=ReleaseFast

The binary ends up at ~/.local/bin/ghostty. Make sure ~/.local/bin is in your PATH.

First Launch and What You Notice

Run ghostty from your existing terminal or application launcher. On a GNOME desktop with libadwaita the window immediately follows your system light/dark preference, uses native window decorations, and respects GNOME's scaling factor — none of which Alacritty does out of the box, and Kitty handles only partially.

Ghostty ships with a built-in default config that is usable immediately. It defaults to your system monospace font, which may or may not be a Nerd Font. If your prompt looks like it has broken icons, that is the likely cause — fix it in the config section below.

Configuration Basics

Ghostty reads its config from ~/.config/ghostty/config. The format is a simple key = value file — no TOML tables, no YAML anchors. Create it if it does not exist:

mkdir -p ~/.config/ghostty
nano ~/.config/ghostty/config

A practical starting config:

# Font
font-family = "JetBrainsMono Nerd Font"
font-size = 13

# Appearance
theme = dark:catppuccin-mocha,light:catppuccin-latte
window-padding-x = 8
window-padding-y = 6

# Behaviour
shell-integration = detect
confirm-close-surface = false
copy-on-select = clipboard

# Performance
render-timer = false

Ghostty ships with over 300 bundled themes. List them with:

ghostty +list-themes

Reload config at any time without restarting — press Ctrl+Shift+, inside a running Ghostty window, or send SIGUSR2 to the process.

Shell Integration

Setting shell-integration = detect enables automatic injection for Bash, Zsh, and Fish. This gives you semantic zones (Ghostty knows where each prompt and command output begins and ends), which unlocks scrolling by command output block using Ctrl+Shift+Page Up/Down. Kitty has a similar feature; Alacritty does not.

Performance Feel vs. Alacritty and Kitty

All three are GPU-accelerated, so raw throughput is not the differentiator for most workloads. Where you feel the difference is latency and responsiveness under real use.

Feature Ghostty Alacritty Kitty
GPU renderer Yes (Metal/Vulkan/OpenGL) Yes (OpenGL) Yes (OpenGL)
Native GTK4 / libadwaita Yes No No
Wayland-native Yes Yes Yes
Built-in multiplexer / tabs Yes (splits + tabs) No Yes
Shell integration Yes (auto-inject) No Yes (manual setup)
Config format Plain key=value TOML Python
Input latency (typical) Very low Very low Low

In practical use, Ghostty feels snappier than Kitty on window resize and font rendering passes. Compared to Alacritty it adds multiplexing and shell integration without a noticeable latency cost. The Zig runtime also means cold-start time is very fast — typically under 100 ms to first render.

Useful Keyboard Shortcuts

  • New tab: Ctrl+Shift+T
  • Split pane (horizontal): Ctrl+Shift+O
  • Split pane (vertical): Ctrl+Shift+E
  • Navigate panes: Ctrl+Shift+Arrow
  • Increase font size: Ctrl+=
  • Copy: Ctrl+Shift+C
  • Paste: Ctrl+Shift+V
  • Scroll by prompt block: Ctrl+Shift+Page Up / Page Down

All keybindings are remappable in config. Example — rebind new tab to something tmux-familiar:

keybind = ctrl+b>c=new_tab

Verifying the Install

Check the running version and confirm GPU rendering is active:

ghostty --version
ghostty +show-config 2>&1 | grep -E 'renderer|gpu'

Inside a running Ghostty session, open the debug inspector with Ctrl+Shift+/. It shows the active renderer backend (OpenGL, Vulkan, or Metal on Mac), the GPU in use, and current frame timing. Healthy frame times at idle are typically 0–2 ms.

Troubleshooting

Ghostty starts but renders blank / black window

This usually means a GPU driver issue. Try forcing the OpenGL backend:

GHOSTTY_RENDERER=opengl ghostty

If that fixes it, add renderer = opengl to your config and file a bug with your GPU and driver version.

Fonts look wrong or icons are missing

Install a Nerd Font variant of your preferred font and set it explicitly in config. Ghostty does not fall back to Nerd Fonts automatically.

# Check available Nerd Fonts
fc-list | grep -i nerd

Config changes not taking effect

Some options (like renderer) require a full restart. Most visual options reload live. If unsure, quit and relaunch.

Missing ghostty terminfo on remote servers

When you SSH into a machine, it may not recognise the xterm-ghostty TERM value. Copy the terminfo entry:

ghostty +terminfo | ssh user@remotehost -- tic -x -

Alternatively, set term = xterm-256color in your local config for maximum compatibility at the cost of a few advanced features.

tested on:Ubuntu 24.04Fedora 41Arch rollingDebian 12

Frequently asked questions

Does Ghostty work on Wayland and X11?
Yes. Ghostty uses GTK4 which runs natively on Wayland and falls back to XWayland on X11. Wayland is the recommended path for the best HiDPI and input latency behaviour.
Can I use Ghostty without a Nerd Font?
Yes, Ghostty works with any font. You only need a Nerd Font if your shell prompt uses icon glyphs (common with Starship, Oh My Zsh themes, or similar).
How does Ghostty compare to Kitty for heavy workloads like large log files?
Both handle large throughput well due to GPU rendering. Ghostty's Zig-based renderer generally shows lower latency on window resize and reflow, though for most users the difference is not meaningful in daily use.
Is Ghostty stable enough for daily driving?
Since its December 2024 open-source release Ghostty has been widely used as a daily driver. The 1.x release series is considered stable; the main rough edges are distro packaging gaps on older LTS releases.
Does Ghostty support ligatures?
Yes, font ligatures are enabled by default when your chosen font includes them. Set font-feature = -liga in config to disable them if you prefer.

Related guides