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/Metric | Ghostty | iTerm2 | Alacritty | Kitty |
---|---|---|---|---|
GPU Acceleration | Yes | No | Yes | Yes |
Native Tabs/Splits | Yes | Yes | No | Yes |
Theme Customization | Extensive | Limited | Limited | Extensive |
Protocol Support | Modern & Rich | Standard | Standard | Advanced |
Performance (FPS) | 480-500 | <10 | ~500 | ~500 |
Text Rendering Speed | 73ms | 470ms | 66ms | 103ms |
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:
- Create a configuration file at
$XDG_CONFIG_HOME/ghostty/config
(defaults to~/.config/ghostty/config
). - 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
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!