Ghost­ty

5:41PMJuly 27 2025Daniel Tompkins

Archive KB terminals

The Ghostty ter­minal is a new en­trant in the ter­minal em­u­lator space. The cre­ator, Mitchell Hashimoto, had started working on Ghostty as a side-pro­ject in 2021 with the first public re­lease in De­cember 2024.

Hashimoto is well-known in the de­vel­oper com­mu­nity, having co-founded HashiCorp— the com­pany be­hind pop­ular cloud in­fra­struc­ture tools like Va­grant, Ter­raform, and Packer. In early 2025, HashiCorp was ac­quired by IBM for $6.4 bil­lion.1

Ghostty is the first major solo pro­ject Mitchell's re­leased since leaving HashiCorp— in De­cember of 2023. He doc­u­mented the de­vel­op­ment in a very cool (and de­tailed) de­vel­oper log , which pro­vides an in-depth look at the inner-work­ings of the ter­minal em­u­lator and some of the de­sign de­ci­sions that went into it.

Un­for­tu­nately, Ghostty is not yet avail­able on Win­dows; but sup­port is planned for the fu­ture. Cur­rently, it has sup­port for Linux and macOS— using SwiftUI na­tive com­po­nents. It also sup­ports GPU-ac­cel­er­ated ren­dering on both OSs.

Fea­tures

There has been a lot of ex­cite­ment around Ghostty. Ap­par­ently there are a lot of de­vel­opers looking for a modern ter­minal that is fast and fea­ture-rich, and Ghostty hits that sweet spot. It has quickly gained pop­u­larity— and for good reason.

Ghostty is written in the Zig pro­gram­ming lan­guage and uses Mitchell's own libxev li­brary for a cross-plat­form event loop. In my ex­pe­ri­ence, it just about matches the light­ning speed of the other light­weight champ— Alacritty .

If you're fa­miliar with font ren­dering, you'll prob­ably have heard of Harf­Buzz . This package is a common de­pen­dency among among Ghostty and sev­eral others em­u­la­tors. It pro­vides text shaping and can sub­sti­tute glyphs to render lig­a­tures: --> ==> !== <= >= ++ ##.

Splits and Tabs

If you do want to use the built-in splits and tabs, have a look at the Ac­tion Ref­er­ence guide in Ghost­ty's key­binding docs. To list the de­fault key­bind­ings, you can run:

ghostty +list-keybinds --default
shell
Ghostty Default Keybindings
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
shell

Here you can see the Ghostty de­fault key­bind­ings for splits, tabs, re­sizing, and more.

  • On macOS, super refers to the Command key. On Win­dows or Linux, it might be the Windows key.
  • One handy one to keep in mind as you're set­ting up your config is the reload_config key­binding:
    • super + shift + ,
Note

Tmux is a ter­minal mul­ti­plexer that of­fers split panes and tabs in the ter­minal. It's a key tech­nology in my daily work­flow, so I didn't need to adopt Ghost­ty's built-in splits and tabs— but Ghostty has em.

I like Tmux be­cause it's portable— you can in­stall it on any Unix ma­chine. And if you de­cide to switch to a dif­ferent em­u­lator, you don't have to learn new short­cuts for pane-split­ting and tabs. It's the same be­havior every­where.

Image Sup­port

Ghostty sup­ports the Kitty image pro­tocol, which al­lows you to dis­play im­ages di­rectly in the ter­minal. This is useful for dis­playing screen­shots, icons, or other im­ages without leaving the ter­minal en­vi­ron­ment. You'll have to in­stall the kitty package on your system to use this fea­ture.

# Install Kitty on macOS brew install kitty # Test image support kitty +kitten icat /path/to/image.png
shell

Shaders

Though it's not ex­actly a pro­duc­tive fea­ture, Ghostty also sup­ports .glsl (OpenGL Shading Lan­guage) shaders. This al­lows you to layer vi­sual ef­fects onto the ren­dered ter­minal. 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 avail­able in a GitHub repo from hackr-sh. Down­load the .glsl files and place them in a di­rec­tory like ~/.config/ghostty/shaders/. Then you can use the custom-shader=shaders/<name>.glsl config op­tion to apply as many as you want. Note that on a com­puter with less re­sources, you might no­tice some per­for­mance loss when using shaders.

The only one I use con­sis­tently is the cursor_smear.glsl shader, which adds a nice trailing ef­fect to the cursor:

At the time of writing, the cursor shaders will only work with the Ghostty nightly build. You can down­load the latest nightly from the Ghostty re­leases page . You can find the .glsl files them­selves for cursor ef­fects in a GitHub repo by user KroneCorylus.

Footnotes

  1. https://​www.reuters.com/​mar­kets/​deals/​ibm-buy-hashicorp-64-bil­lion-deal-ex­pand-cloud-soft­ware-2024-04-24/