Mitchell Hashimoto built Ghostty because he wanted to learn Zig. That is the origin story. He had just stepped back from HashiCorp, the company he co-founded and where he spent a decade building Vagrant, Terraform, Vault, and Consul. He wanted to do some graphics programming, understand how terminals actually work, and play with a language he was curious about.
He never planned to release it.
That changed when he kept running into the same tradeoffs in every other terminal. Speed came at the cost of features. Features came at the cost of native platform behavior. Native behavior came at the cost of cross-platform consistency. His thesis became: these are not actual tradeoffs. You should not have to pick.
01. THE ARCHITECTURE
The center of Ghostty is libghostty: a cross-platform, zero-dependency C-ABI compatible library written in Zig. It handles terminal emulation, font rendering, and GPU rendering logic. It exposes a pure C API, which means any language that can call C can embed a terminal. A proof-of-concept project called ghostling demonstrates this with a minimal host.
On top of libghostty sit platform-native UI layers, built specifically for each operating system rather than abstracted away.
On macOS, the UI layer is Swift using AppKit and SwiftUI. Not because it was the easy choice. Mitchell initially wrote it in a single Zig file, then realized Apple's new APIs are Swift-only and Objective-C is clearly being deprecated. The boundary between Zig and Swift required its own engineering work, which he documented in detail. The result is that macOS users get actual macOS behavior: native window chrome, native menus, system scrollbars, dark/light mode following system preferences.
On Linux, the UI layer is Zig calling GTK4's C API directly. This was completely rewritten for 1.2, fully embracing the GObject type system from Zig and validating every change with Valgrind. The rewrite fixed a class of memory safety bugs where Zig-owned and GTK-owned memory would get freed independently, and enabled modern GTK features including animated borders and Blueprint UI.
Rendering uses Metal on macOS and OpenGL on Linux. Each terminal surface runs three dedicated threads: one for reading, one for writing, one for rendering. As of 1.3.0, the render thread has been rearchitected to hold the terminal lock 2-5x less time, and in most frames it holds it not at all thanks to improved dirty and damage tracking.
02. WHY ZIG
The language choice is not aesthetic. Zig was genuinely useful for what Ghostty needed to be.
The build system made it trivial to compile as both an executable and a library simultaneously. This is not a given: most build systems require significant configuration to support dual output modes. For libghostty to exist, the build had to produce a .so/.dylib/.dll and an executable from the same codebase without a separate build definition.
Tagged unions with exhaustive switch statements gave the compiler the ability to report errors when a new case is added and not handled everywhere. For a terminal emulator that is essentially a large state machine parsing decades of escape sequence history, that property is directly useful.
SIMD without inline assembly allowed modern vectorized operations in the hot path of terminal parsing. No hidden allocations and explicit memory management mean predictable performance for a real-time rendering application.
And the C interop story is clean: prepend export to a function definition and it gets C calling convention. No FFI layer, no binding generator. For GTK on Linux, which exposes a C API, this is the difference between calling GTK directly and going through an indirection layer.
03. GHOSTTY 1.3.0
Released March 9, 2026. Six months of work. 2,858 commits. 180 contributors.
Scrollback Search was the most-requested missing feature from the 1.0 launch, and it shipped here. Cmd+F on macOS, Ctrl+Shift+F on Linux. Search runs on a dedicated thread concurrent with terminal I/O. When you close the search bar, that thread terminates and resources are freed.
Native Scrollbars follow the system scrollbar setting on both platforms. On Ubuntu with overlay scrollbars enabled, you get overlay scrollbars. On a system with persistent scrollbars set, you get persistent scrollbars. The behavior matches what the OS expects rather than imposing its own.
Click-to-Move-Cursor lets you click anywhere in a shell prompt to move the cursor there. This works in Fish, Nushell, Zsh, and other shells via OSC 133 shell integration. A small feature that turns out to be constantly useful.
Command Palette on macOS got custom entries via command-palette-entry, session search to jump to any running terminal by title or working directory, and tab color indicators. The Linux GTK palette has had this since 1.2.0.
Shell Integration received a much more complete OSC 133 implementation. Fish 4.1 and Nushell 0.111 support it natively. The jump-to-prompt and copy-command-output features are now more accurate as a result.
SSH Integration adds ssh-terminfo, which auto-wraps SSH to transmit Ghostty terminfo to the remote host. When you SSH into a server that does not have Ghostty's terminfo installed, things break in quiet ways: color support drops, keybindings misbehave, $TERM lookups fail. This wraps the handshake to transmit the terminfo entry automatically.
Command Completion Notifications surface a native OS notification when a long-running command finishes. Kick off a test suite or a build, switch to another window, and get notified when it is done. This sounds minor but it is the kind of quality-of-life feature that is hard to add without native platform integration.
I/O Performance is the change that does not show up in the feature list. The 1.3.0 release dramatically improved I/O processing. Replaying an asciinema dataset went from taking minutes to taking tens of seconds. These gains propagate into synthetic benchmarks too: Ghostty is now competitive with Alacritty on vtebench while running a significantly richer feature set.
04. WHERE IT STANDS
Ghostty's position in the terminal landscape is specific. Alacritty is faster at idle and lighter on RAM (~30MB vs 60-100MB for feature-rich terminals), but it has no built-in splits, no ligatures, and no image protocol. WezTerm has deep multiplexing and Lua-based configuration but runs 2-5x slower in throughput benchmarks. kitty has a rich extension ecosystem but uses a custom rendering approach that feels less native on macOS.
Ghostty is the terminal that treats native platform behavior as a first-class concern without sacrificing performance or feature depth. That is a rarer combination than it should be.
In December 2025, Hashimoto moved Ghostty to a non-profit structure, fiscally sponsored by Hack Club (a 501c3). He donated $150K personally and transferred all IP to Hack Club. The explicit goal was to make Ghostty something that outlives its creator rather than a project that stalls if he moves on to something else.
v1.3.0 is on GitHub at ghostty-org/ghostty, MIT licensed.