The Ghostty terminal is a new entrant in the terminal emulator space. The creator, Mitchell Hashimoto, had started working on Ghostty as a side-project in 2021 with the first public release in December 2024.
Hashimoto is well-known in the developer community, having co-founded HashiCorp— the company behind popular cloud infrastructure tools like Vagrant, Terraform, and Packer. In early 2025, HashiCorp was acquired by IBM for $6.4 billion.1
Ghostty is the first major solo project Mitchell's released since leaving HashiCorp— in December of 2023. He documented the development in a very cool (and detailed) developer log , which provides an in-depth look at the inner-workings of the terminal emulator and some of the design decisions that went into it.
Unfortunately, Ghostty is not yet available on Windows; but support is planned for the future. Currently, it has support for Linux and macOS— using SwiftUI native components. It also supports GPU-accelerated rendering on both OSs.
Features
There has been a lot of excitement around Ghostty. Apparently there are a lot of developers looking for a modern terminal that is fast and feature-rich, and Ghostty hits that sweet spot. It has quickly gained popularity— and for good reason.
Ghostty is written in the Zig
programming language and uses Mitchell's own libxev
library for a cross-platform event loop. In my experience, it just about matches the lightning speed of the other lightweight champ— Alacritty
.
If you're familiar with font rendering, you'll probably have heard of HarfBuzz
. This package is a common dependency among among Ghostty and several others emulators. It provides text shaping
and can substitute glyphs to render ligatures: --> ==> !== <= >= ++ ##
.
Splits and Tabs
If you do want to use the built-in splits and tabs, have a look at the Action Reference guide in Ghostty's keybinding docs. To list the default keybindings, you can run:
ghostty +list-keybinds --default
super + alt + shift + j write_screen_file:open
super + alt + shift + w close_all_windows
super + ctrl + shift + j write_screen_file:copy
super + alt + arrow_down goto_split:down
super + alt + arrow_left goto_split:left
super + alt + arrow_right goto_split:right
super + alt + arrow_up goto_split:up
super + alt + i inspector:toggle
super + alt + w close_tab
super + ctrl + equal equalize_splits
super + ctrl + arrow_down resize_split:down,10
super + ctrl + arrow_left resize_split:left,10
super + ctrl + arrow_right resize_split:right,10
super + ctrl + arrow_up resize_split:up,10
super + ctrl + f toggle_fullscreen
super + shift + bracket_left previous_tab
super + shift + bracket_right next_tab
super + shift + , reload_config
super + shift + enter toggle_split_zoom
super + shift + arrow_down jump_to_prompt:1
super + shift + arrow_up jump_to_prompt:-1
super + shift + d new_split:down
super + shift + j write_screen_file:paste
super + shift + p toggle_command_palette
super + shift + t undo
super + shift + v paste_from_selection
super + shift + w close_window
super + shift + z redo
ctrl + shift + tab previous_tab
super + bracket_left goto_split:previous
super + bracket_right goto_split:next
super + equal increase_font_size:1
super + + increase_font_size:1
super + , open_config
super + - decrease_font_size:1
super + 0 reset_font_size
super + 1 goto_tab:1
super + 2 goto_tab:2
super + 3 goto_tab:3
super + 4 goto_tab:4
super + 5 goto_tab:5
super + backspace text:\x15
super + 6 goto_tab:6
super + 7 goto_tab:7
super + 8 goto_tab:8
super + 9 last_tab
super + enter toggle_fullscreen
super + end scroll_to_bottom
super + home scroll_to_top
super + page_down scroll_page_down
super + page_up scroll_page_up
super + arrow_down jump_to_prompt:1
super + arrow_left text:\x01
super + arrow_right text:\x05
super + arrow_up jump_to_prompt:-1
super + a select_all
super + c copy_to_clipboard
super + d new_split:right
super + k clear_screen
super + n new_window
super + q quit
super + t new_tab
super + v paste_from_clipboard
super + w close_surface
super + z undo
alt + arrow_left esc:b
alt + arrow_right esc:f
ctrl + tab next_tab
shift + end adjust_selection:end
shift + home adjust_selection:home
shift + page_down adjust_selection:page_down
shift + page_up adjust_selection:page_up
shift + arrow_down adjust_selection:down
shift + arrow_left adjust_selection:left
shift + arrow_right adjust_selection:right
shift + arrow_up adjust_selection:up
Here you can see the Ghostty default keybindings for splits, tabs, resizing, and more.
- On macOS,
super
refers to theCommand
key. On Windows or Linux, it might be theWindows
key. - One handy one to keep in mind as you're setting up your config is the
reload_config
keybinding:super + shift + ,
Tmux is a terminal multiplexer that offers split panes and tabs in the terminal. It's a key technology in my daily workflow, so I didn't need to adopt Ghostty's built-in splits and tabs— but Ghostty has em.
I like Tmux because it's portable— you can install it on any Unix machine. And if you decide to switch to a different emulator, you don't have to learn new shortcuts for pane-splitting and tabs. It's the same behavior everywhere.
Image Support
Ghostty supports the Kitty
image protocol, which allows you to display images directly in the terminal. This is useful for displaying screenshots, icons, or other images without leaving the terminal environment. You'll have to install the kitty
package on your system to use this feature.
# Install Kitty on macOS
brew install kitty
# Test image support
kitty +kitten icat /path/to/image.png
Shaders
Though it's not exactly a productive feature, Ghostty also supports .glsl
(OpenGL Shading Language) shaders. This allows you to layer visual effects onto the rendered terminal. To me, this has been one of the most fun quirks about Ghostty that sets it apart.
Most of the working shaders that I've found are available in a GitHub repo
from hackr-sh
. Download the .glsl
files and place them in a directory like ~/.config/ghostty/shaders/
. Then you can use the custom-shader=shaders/<name>.glsl
config option to apply as many as you want. Note that on a computer with less resources, you might notice some performance loss when using shaders.
The only one I use consistently is the cursor_smear.glsl
shader, which adds a nice trailing effect to the cursor:
At the time of writing, the cursor shaders will only work with the Ghostty nightly build. You can download the latest nightly from the Ghostty releases page
. You can find the .glsl
files themselves for cursor effects in a GitHub repo
by user KroneCorylus
.