Ghostty 1.0 has been summoned
The Ghostty terminal emulator project has generated a surprising amount of interest, even before code was released to the public. This is in part due to the high profile of its creator, HashiCorp founder Mitchell Hashimoto. Its development was conducted behind closed doors for beta testing, until version 1.0 was released on December 26 under the MIT license. While far from finished, Ghostty is ready for day-to-day use and might be of interest to those who spend significant amounts of time at the command line.
Why?
The obvious question is "why yet another terminal emulator?" when there are plenty of open-source terminal emulators already. A quick search of the Fedora 41 package repository turns up at least a dozen options, ranging from the venerable xterm to more modern options such as GPU-accelerated terminal emulators Kitty and Alacritty, not to mention GNOME's Terminal, KDE's Konsole, and so forth.
The answer (aside from "because every person gets to decide how to spend their time") is that Hashimoto started the project in 2022 to play with the Zig programming language, do some graphics programming, and deepen his understanding of terminals. Initially, he had no plan to release a new terminal emulator. But his work on the hobby project led him to find that existing terminal emulators forced users to make tradeoffs that he didn't like. In his "Ghostty is coming" post, he says that users are forced to choose between speed, features, and platform-native GUIs. So he decided that Ghostty would be built so that users were not forced to choose:
With Ghostty, I set out to build a terminal emulator that was fast, feature-rich, and had a platform-native GUI while still being cross-platform. I believe Ghostty 1.0 achieves all of these goals.
This goal focuses on being the best existing terminal emulator. Within this goal, Ghostty 1.0 isn't trying to innovate on what a terminal can do but instead provide the best single terminal emulator experience available today on macOS and Linux.
"Boring software for a niche audience"
Hashimoto chose to work on Ghostty in public, sort of. He let on that he was working on Ghostty in 2023, and that it would eventually be released under a FOSS license. Those who wanted access prior to a public release had to join a Discord server and hope to be chosen for access. Ultimately 28,000 people joined the server, and about 5,000 were chosen to participate in the beta. The participants weren't limited to using Ghostty, they were also given access to contribute—GitHub lists more than 260 users who have made a contribution to the repository as of this writing.
In his blog
post following the 1.0 release, he said that he had chosen to work
on the project in a closed beta in part to manage his own time, and in
part because a terminal emulator "either works or it
doesn't
":
You can't ship a terminal emulator that emulates only half the features Vim needs. You can't incrementally improve a terminal emulator below a certain threshold of functionality. I wanted to ensure that the first public release met that threshold. I wanted people to be able to use it productively and professionally right away.
In those regards, he said, the beta was a success. He was able to
manage his bandwidth and enjoy time with his family. It also had its
negative effects, such as building up unreasonable expectations about
the project and causing frustration for users who wanted to try
Ghostty but were unable to get into the closed beta. He did not
anticipate the hype or interest, and said that he is sorry about that.
"I thought I was building boring software for a niche audience
[...] The good news is that Ghostty is now public and everyone can use it".
Summoning Ghostty
Everyone is a slight overstatement: Ghostty is only available currently for Linux or macOS. If I understand correctly, there are still a few people who use Windows and other niche operating systems. (For those curious, this issue on GitHub tracks progress for Windows and the problems that need to be solved.)
The Linux binaries and packages page explains how to install Ghostty for most of the popular Linux distributions, including Arch, Fedora, Gentoo, NixOS, openSUSE, and Ubuntu. There are no Debian-specific packages right now, but I was able to install the Ubuntu 22.04 package on Debian 12 and have not run into any problems with it so far.
One of the project goals is a "native" look and behavior for each
operating system. Linux, of course, does not have a single native
GUI toolkit as such. Ghostty uses GTK4, which the documentation
calls "the closest thing to a standard GUI toolkit that
exists
" for Linux. Whether that will feel like a native
application to users of desktops other than GNOME is debatable, but
it's hard to fault application developers for targeting a single
toolkit. As a result, Ghostty looks almost identical to GNOME's
Terminal at first glance.
Zero-configuration philosophy
One immediate and obvious difference is that Ghostty's menu has no
option to open a preferences window. The project's philosophy
is that the program should have "sensible defaults
" so that it
does
not require any configuration out of the box. The project is not
dead set against allowing users to make changes, it just has a
philosophy of trying to pick the "right" ones from the start. There is
an long-running
discussion on GitHub about acceptable out-of-the-box options for
users to suggest default settings.
However, if users wish to make changes, there are many configuration options available and they are well-documented. Ghostty does have an "Open Configuration" menu option, but users may be disappointed on first use. The menu item simply opens the default text editor with a completely empty configuration file (~/.config/ghostty/config). Users can make configuration changes, save the file, and then use the "Reload Configuration" menu item or shortcut (Ctrl-<) for the changes to take effect. Running "ghostty +show-config" will output Ghostty's current configuration. Naturally, users can change keybindings if the defaults are not suitable.
Users can list Ghostty's keybindings by running "ghostty +list-keybinds", which also serves as a way to discover user-facing features such as resizing window splits or how to quickly focus a specific tab.
Ghostty comes with more than 100 themes, which can be previewed using ghostty +list-themes. This brings up a preview screen that shows the color palette for the theme with sample code and text to get a sense of what syntax highlighting might look like under that theme. If none of the existing themes are quite satisfying, users can create their own. Themes are stored under /usr/share/ghostty/themes, and each theme is simply a text file with each element color specified as by its hex value (e.g. black is #000000, aqua is #00ffff, and so forth).
Shell integration is one of Ghostty's prominent features. This allows Ghostty to implement a number of convenience features. For example, users can select a command's output (and only its output) by holding Ctrl and clicking the left mouse button three times. Ghostty tracks the shell history, so users can easily create a scrollback file (all output to the terminal) using "C-S-j". That saves the scrollback to a temporary file (e.g. "/tmp/D4dr32Y2URuZGo35Fz5MdQ/history.txt") for future reference. Ghostty also better handles rearranging text when resizing the terminal.
In addition to features and platform integration, Ghostty uses GPU acceleration with a goal of being a fast terminal emulator. Subjectively, I'd report that Ghostty seems reasonably snappy. Scrolling back through terminal history was smooth, and it handled throwing a lot of text output at the terminal just fine. It could be that my usual workflow is not very demanding for a virtual terminal—and my typing speed is adequate, but hardly fast enough to pose a challenge to Ghostty or any other terminal.
In order to provide some sort of benchmark, I used cat to display a large (259MB) text file two times and took the second result:
$ time cat words_alpha.txt
Using the fish shell under Ghostty, that took 7.56 seconds. Konsole took 12.031 seconds, whereas Kitty took 7.75 seconds, and Alacritty did it in just 6.93 seconds. GNOME Terminal took 12.13 seconds. That is not a particularly scientific or rigorous benchmark, but it did demonstrate that Ghostty seems to be faster than its counterparts that do not use GPU acceleration, and in the same neighborhood as those that do.
It's also worth noting that Ghostty uses the Kitty terminal graphics protocol and is capable of displaying images to the terminal as well as text.
For those who want to dive deep into the nitty gritty of its virtual terminal (VT) sequence support (also known as "escape sequences"), the documentation has a reference of all supported sequences. There is also a tracking issue that compares Ghostty to xterm's behavior, as well as a list of sequences that it does not support.
Living with the ghost
For the most part, the "zero configuration" philosophy has worked out. I configured Ghostty's theme and font, then hid the window title bar, but left everything else alone. For those who enjoy tinkering with all of the settings, there is an unofficial site called "Ghostty Config" that lets users create configurations using a web-based configuration dialog.
I've used Ghostty for all of my terminal needs since its release, which includes writing and editing articles in Emacs's terminal interface, using aerc in Ghostty, and quite a bit of work at the shell. It is not a dramatic improvement over other terminal emulators, at least for me, but its split-window features and shell integration make it a strong candidate to replace GNOME Terminal, since the latter does not support split windows. Ghostty has some nice touches, too, such as dimming the pane in a split window that does not have focus. That makes it immediately obvious which pane has focus and (in my experience) helps with concentration as well.
As one might expect, the 1.0 release is only the beginning: there
are plenty of features left to implement. The roadmap
and status table in the project's README lists seven high-level
steps in the project's plan. The first four—standards
compliance, performance, basic customization, and windowing
features—are checked off as done. The next two are "native
platform experiences
", which includes features like settings
windows for Linux and macOS, and completing the libghostty
library for embeddable terminals. Last on the list are Windows support
and "fancy features (to be expanded upon later)
" as
ambitions for future development.
Ghostty is also not quite ready for all languages, which may rule it out for some users. The features page notes that Ghostty should render the characters in Arabic, Hebrew, and other right-to-left scripts correctly, but only left-to-right text rendering is supported.
Information on contributing to the project is available in its contributing
file on GitHub. The project appears to have no contributor licensing
agreement (CLA). Hashimoto has said that he is interested in ensuring
that Ghostty development is sustainable, but he is not seeking to make
it a business. In the discussion
about project sustainability Hashimoto writes that non-OSS licenses
and open core business strategies "are not and will never be on the
table
".
In his "Ghostty is coming" blog post, he noted that he is
even exploring non-profit structures for the project that might allow
compensating major contributors for their work. That is a long-term
goal, however, and in the sustainability discussion he writes that he
fully intends to keep Ghostty his personal project with a benevolent
dictator for life (BDFL) structure "for the indefinite future
".
For a first release, Ghostty is a nice entrant in a crowded field of terminal emulators. It may be a bit more exciting for macOS users, who have fewer alternatives in that department, but it is well worth looking at for Linux users too. It has the makings of a strong community project already, so it will be a project to keep an eye on for those of us who live at—or frequently visit—the command line.
Posted Jan 15, 2025 20:57 UTC (Wed)
by ManicBadger (subscriber, #175399)
[Link]
Posted Jan 15, 2025 21:48 UTC (Wed)
by NightMonkey (subscriber, #23051)
[Link] (7 responses)
I will now pitch, as if Mitchell Hashimoto is reading LWN, that I *humbly ask* that he can do what he can to save one of my favorite of his projects - Vagrant! Vagrant now sits behind the non-free BUSL 1.1 license like all the other formerly-F/OSS projects at HashiCorp. Can they really make a business out of Vagrant?!? "Enterprise Vagrant" seems like such a... non-starter. :( Having Vagrant's configuration language be an actual programming language (Ruby) makes it very powerful, even in this era of containerization over virtualization.
Thanks for this article, Joe! :)
Posted Jan 15, 2025 22:09 UTC (Wed)
by atai (subscriber, #10977)
[Link] (3 responses)
An obvious question is, would Ghostty follow the same route if it proves popular?
Posted Jan 15, 2025 22:23 UTC (Wed)
by jzb (editor, #7867)
[Link] (2 responses)
An obvious question is, would Ghostty follow the same route if it proves popular? According to Hashimoto, no — he has said (and I quoted in the article) that non-OSS licenses for Ghostty "are not and will never be on the table". Note that he was no longer in an executive position at Hashicorp when it made the license switch and he left not very long after. (He had stepped down to individual contributor status from CTO in 2021, and the license switch was 2023, if my memory serves correctly... of course "if" is doing a lot of work in that sentence given my memory...)
Posted Jan 18, 2025 16:54 UTC (Sat)
by ballombe (subscriber, #9523)
[Link] (1 responses)
Posted Jan 18, 2025 19:33 UTC (Sat)
by Wol (subscriber, #4433)
[Link]
As for saying "meaningless promise", that could be said of ALL promises. Personally, I don't make promises I don't intend to keep. Other people don't see a problem with that. But even people like me, who take promises seriously, could find themselves in a position where keeping a promise is either impossible, or more than we can afford ...
At the end of the day, do we know what happened at Hashicorp? Do we trust Hashimoto? Without trust in the people involved, ALL promises are worthless. Who here broke trust?
Cheers,
Posted Jan 15, 2025 22:28 UTC (Wed)
by jzb (editor, #7867)
[Link]
I'll have to check out WezTerm. So many terminal emulators, so little time... Since Mitchell has left HashiCorp—and HashiCorp is currently being acquired by IBM—I don't know if there's much he can do about the licensing for Vagrant. Perhaps when all is done and said IBM will release Vagrant and other projects under their old licenses or some other open license. Especially those that have no SKU anyway....
Posted Jan 15, 2025 22:47 UTC (Wed)
by proski (subscriber, #104)
[Link]
Posted Jan 21, 2025 17:23 UTC (Tue)
by sramkrishna (subscriber, #72628)
[Link]
It's cool, I'll just use bootable containers at this point.
Posted Jan 16, 2025 6:14 UTC (Thu)
by miekg (subscriber, #4403)
[Link]
It also draws a tiny border around its window (unlike Tilix, and Terminal), meaning I can use a blacker black as the background and still see where the terminal ends if the windows overlap, i.e. lots more contrast.
Tried, foot, kitty, etc, but those terminals looks really out of place in a gnome desktop.
Posted Jan 16, 2025 7:11 UTC (Thu)
by yanfali (subscriber, #2949)
[Link]
The defaults are great. The only configuration I did was to change the keybindings for moving between tabs. The only issue has been needing to install ghost-terminfo everywhere or use obscure commands to import the term into older machines without terminfo packages. Other than that I'm loving it on both Linux and macOS.
Posted Jan 19, 2025 11:30 UTC (Sun)
by dankamongmen (subscriber, #35141)
[Link]
i'm pretty pleased with ghostty thus far--support for the kitty graphics and keyboard protocols are excellent choices. it's not replaced kitty as my daily driver, but it's perfectly serviceable. i'm going to run a new set of notcurses benchmarks next week across all active terminals, and look forward to getting some hard data.
Posted Jan 31, 2025 2:23 UTC (Fri)
by anarcat (subscriber, #66354)
[Link]
I just wish the performance part of the review would have been a little more rigorous.:
In the terminal emulators review I made for LWN six years ago (oh dear, that old?), I used latency as a proxy for performance... I understand running those tests in modern desktop environments (i.e. Wayland) might be less practical, but when I saw LWN review a terminal emulator, I spontaneously imagined that problem would have been fixed.
The best I've seen for those so far are end-to-end hardware tests showing recent (and impressive) improvements in libVTE's latency...
I'd be curious to see how Ghostty compares with other terminals, in terms of latency...
Unbloated alternative to iTerm?
WezTerm
WezTerm
WezTerm
WezTerm
WezTerm
Wol
WezTerm
WezTerm is really good, except it's a little bit slow. Unlike many other cross-platform terminals, it follows the UNIX convention that Shift overrides mouse capture rather than the Windows convention that Shift extends selection. But I switched to Alacritty eventually mostly to get myself to use tmux, and I'm not looking back. I set up bash startup scripts to run tmux always when it's an interactive shell under Alacritty, so I don't have to worry about it.
WezTerm
WezTerm
A very lovely terminal
I'm a fan of ghostty
debian
Thank you for the review of Ghostty! I have been intrigued by this new project, and it's nice to see LWN cover it...
latency?
In order to provide some sort of benchmark, I used cat to display a large (259MB) text file two times and took the second result:
... for me, this is not just a useful benchmark. How often do you actually dump 260MB of text on a terminal?