Skip to main content
  1. Posts/

Ghostty Terminal: Could This Be the Best Terminal Ever?

·1012 words·5 mins
Table of Contents

Introduction
#

The time has finally come! Ghostty Terminal was officially released as version 1.0.0 at the end of December. I’ve been eagerly waiting for this new tool to land in my hands.

But you might be wondering—what exactly is this tool?

Ghostty is a terminal emulator written in Zig, designed with these goals in mind:

  • Native support for Linux and macOS (Windows support coming soon)
  • Fast performance (comparable to Alacritty)
  • Feature-rich: e.g., Kitty Graphics Protocol, light/dark mode notifications, hyperlinks, and more

The ultimate goal is to have a fully-fledged terminal with all the features you need. Here’s a handy comparison table to see how it stacks up against others:

Feature/MetricGhosttyiTerm2AlacrittyKitty
GPU AccelerationYesNoYesYes
Native Tabs/SplitsYesYesNoYes
Theme CustomizationExtensiveLimitedLimitedExtensive
Protocol SupportModern & RichStandardStandardAdvanced
Performance (FPS)480-500<10~500~500
Text Rendering Speed73ms470ms66ms103ms

Ghostty is the brainchild of Mitchell Hashimoto (creator of HashiCorp). It’s a completely open-source hobby project with no commercial backing.

Let’s explore its features and dive into my current configuration.

Features of Ghostty
#

Native Functionality
#

Ghostty behaves as a native application in your desktop environment. With Ghostty, you can seamlessly create tabs, splits, panels, and more in your terminal. Effortless multitasking!

This feature might even tempt me to ditch tools like Tmux or Zellij and rely solely on my terminal.

Fast Performance
#

As a Neovim user, I often encounter scroll lag and general slowness when opening large files. Performance is crucial to avoid these issues. Based on official tests, Ghostty performs closely to Alacritty. Therefore, I’m confident it will handle my workflow efficiently.

Rich Feature Set
#

While I appreciate the integration of the Kitty Graphics Protocol, I’m not a huge fan of having images in the terminal. However, it’s better to have more features than fewer!

Some additional handy features include:

  • Hyperlinks
  • Notifications
  • Open developer API for interacting with Ghostty

For a complete list of features, refer to the official documentation.

My Configuration of Ghostty
#

Once installed, I quickly realized how much effort Mitchell put into ensuring Ghostty is a plug-and-play terminal. It works flawlessly with zero configuration. However, if you want to customize it further, you have to:

  1. Create a configuration file at $XDG_CONFIG_HOME/ghostty/config (defaults to ~/.config/ghostty/config).
  2. Customize settings to your preferences. Here’s my detailed configuration:
font-family = JetBrainsMono Nerd Font
font-size = 20
theme = rose-pine
cursor-style = block
adjust-cell-height = 35%
background = #000000
background-opacity = 0.65
window-padding-balance = true
copy-on-select = clipboard

# Keybindings
keybind = alt+s>r=reload_config
keybind = alt+s>x=close_surface
keybind = alt+s>n=new_window

# Tabs
keybind = alt+s>c=new_tab
keybind = alt+s>shift+l=next_tab
keybind = alt+s>shift+h=previous_tab
keybind = alt+s>comma=move_tab:-1
keybind = alt+s>period=move_tab:1

# Quick Tab Switch
keybind = alt+s>1=goto_tab:1
keybind = alt+s>2=goto_tab:2
keybind = alt+s>3=goto_tab:3
# Splits
keybind = alt+s>ctrl+v=new_split:right
keybind = alt+s>ctrl+h=new_split:down
keybind = alt+s>z=toggle_split_zoom

Final look:

Font Family and Theme
#

To start customizing Ghostty, you can use the CLI tool to modify themes, fonts, and other settings in your current session or list available fonts, themes and keybindings.

Themes
#

Ghostty supports all ITerm2 themes. To see the list of available themes, use:

ghostty +list-themes

I chose the rose-pine theme, but you can further customize the theme by defining separate options for light and dark modes.

Use the following commands to configure this directly in the Ghostty configuration file:

theme = light:rose-pine-dawn,dark:rose-pine

I also customized the background and opacity to match my look and feel preferences:

background = #000000
background-opacity = 0.65
Important: At the time of writing, Ghostty lacks the ability to define an image as a background. This feature would undoubtedly add an extra layer of customization, and I hope to see it implemented in future updates!

You can further customize the theme by defining your own inside the Ghostty configuration file, tailoring it to your personal preferences. For advanced customization, theme lookup by name searches two directories:

  • $XDG_CONFIG_HOME/ghostty/themes
  • $PREFIX/share/ghostty/themes

Fonts
#

To list available fonts, use:

ghostty +list-fonts

I ended up with:

font-family = JetBrainsMono Nerd Font
font-size = 20

Keymaps
#

The killer feature for me is the ability to adapt keymaps to my preferences. Ghostty uses this pattern:

keybind = trigger=action

The trigger is your magic keymap that initiates the action. In my case, the trigger is alt+s, which acts as the Ghostty “magic key.” By combining it with > and a custom key, you can define specific actions. For example, alt+s>r means alt+s activates the Ghostty magic key, and pressing r executes the specific command—in this case, reloading the configuration.

The action is the task you want to accomplish with that keybind. A full list of available actions can be found in the Ghostty Keybind Reference.

You can list all the available current keybinds with:

ghostty +list-keybinds

Here’s my configuration for managing windows, tabs, and splits:

# Keybindings
keybind = alt+s>r=reload_config
keybind = alt+s>x=close_surface
keybind = alt+s>n=new_window

# Tabs
keybind = alt+s>c=new_tab
keybind = alt+s>shift+l=next_tab
keybind = alt+s>shift+h=previous_tab
keybind = alt+s>comma=move_tab:-1
keybind = alt+s>period=move_tab:1
keybind = alt+s>1=goto_tab:1
keybind = alt+s>2=goto_tab:2
keybind = alt+s>3=goto_tab:3

# Splits
keybind = alt+s>ctrl+v=new_split:right
keybind = alt+s>ctrl+h=new_split:down
keybind = alt+s>z=toggle_split_zoom

The keybindings are self-explanatory and easily configurable. What’s missing for now is the ability to run custom scripts via keybindings. For example, in Tmux, I use:

bind-key -r f run-shell "tmux neww ~/.local/bin/tmux-sessionizer"

I hope this feature is added in the future so I can fully transition from my Tmux workflow!

Final Thoughts
#

Ghostty Terminal has set a new benchmark for terminal emulators, combining speed, versatility, and a developer-friendly experience. Its seamless integration with native environments and its rich customization options make it a powerful choice for both beginners and advanced users.

The open-source nature of Ghostty fosters a community-driven ecosystem, ensuring continuous improvement and innovation. While it lacks some advanced scripting features currently, the roadmap and active development suggest an exciting future for this tool.

Whether you’re looking to simplify your workflow, enhance terminal aesthetics, or gain a performance boost, Ghostty is worth exploring. Give it a try and see how it transforms your terminal experience!

Alfonso Fortunato
Author
Alfonso Fortunato
DevOps engineer dedicated to sharing knowledge and ideas. I specialize in tailoring CI/CD pipelines, managing Kubernetes clusters, and designing cloud-native solutions. My goal is to blend technical expertise with a passion for continuous learning, contributing to the ever-evolving DevOps landscape.