Note in Ghostty 1.3 we disable discretionary ligatures (I think dlig/calt) by default as recommended by font standards. We still enable liga though that usually contains far less controversial ligatures.
I'm the original creator of Ghostty. It's been a few years now! I don't know why this is on the front page of HN again but let me give some meaningful updates across the board.
First, libghostty is _way more exciting_ nowadays. It is already backing more than a dozen terminal projects that are free and commercial: https://github.com/Uzaaft/awesome-libghostty I think this is the real future of Ghostty and I've said this since my first public talk on Ghostty in 2023: the real goal is a diverse ecosystem of terminal emulators that aim to solve specific terminal usage but all based on a shared, stable, feature-rich, high performant core. It's happening! More details what libghostty is here: https://mitchellh.com/writing/libghostty-is-coming
I suspect by the middle of 2027, the number of people using Ghostty via libghostty will dwarf the number of users that actually use the Ghostty GUI. This is a win on all sides, because more libghostty usage leads to more stable Ghostty GUI too (since Ghostty itself is... of course... a libghostty consumer). We've already had many bugs fixed sourced by libghostty embedders.
On the GUI front Ghostty the apps are still getting lots of new features and are highly used. Ghostty the macOS app gets around one million downloads per week (I have no data on Linux because I don't produce builds). I'm sure a lot of that is automated but it's still a big number. I have no telemetry in Ghostty to give more detailed notes. I have some data from big 3rd party TUI apps with telemetry that show Ghostty as their biggest user base but that is skewed towards people consuming newer TUIs tend to use newer terminals. The point is: lots of people use it, its proven in the real world, and we're continuing to improve it big time.
Ghostty 1.3 is around the corner, literally a week or two away, and will bring some critically important features like search (cmd+f), scrollbars, and dozens more. In addition to GUI features it ships some big improvements to VT functionality, as always.
Organizationally, Ghostty is now backed by a non-profit organization: https://mitchellh.com/writing/ghostty-non-profit And just this past week we signed our first 4 contributor contracts to pay contributors real money! Our finances are all completely public and transparent online. This is to show the commitment I have to making Ghostty non-commercial and non-reliant on me (the second part over time).
That's a 10,000 foot overview of what's going on. Exciting times in Ghostty land. :) Happy to answer any big questions.
What has it been like witnessing terminal emulators make such a huge comeback with the advent of Claude Code et. all? I remember comments here in the early days of Ghostty along the lines of "Why is he working on a terminal emulator? We need people working on future problems, not the past!" Pretty funny considering I regularly hear people say they are in the terminal more than the browser now. Crazy times!
If you told me 3 years ago that terminal usage would _increase_ I would've laughed. Beyond that, I'm now having regular conversations with the frontier agentic coding companies (since they're far and away the largest terminal users at the moment) and if you had told me 2 years ago that that would be happening because of a terminal, I would've laughed even harder.
Wait, really? So I’ve used the terminal for everything for decades, and now, because of vibe coding, all The Kids have joined me? I don’t even know how to feel about that. Better terminals are nice though.
Right? It’s been kind of funny watching everyone “rediscover” the terminal and I’m over here feeling like a true graybeard “silly kids, I’ve been here the whole time.”
What’s old is new again is apparently just as true in tech as it is in fashion.
It's because the web developers who destroyed the web are now taking their mess with them into more obscure places, such as terminals, hardware and AI.
That's probably why it is so hyped up as it is right now.
I think terminal workflows are intimidating for a lot of people, because the discoverability is lower than GUIs. You can't necessarily intuit how a CLI works, you have to read the documentation or watch a tutorial, which my 10 years in the IT industry has taught me a big barrier even for really experienced SWEs. The new coding TUIs are a more gentle introduction to that.
> ... because the discoverability is lower than GUIs.
The UI paradigm created by the emacs transient package [1] can improve the discoverability of CLI commands significantly. It's one of the components of magit, the famous git frontend, that makes it so awesome. It's discoverability is very close to that of GUIs and somehow even more pleasing to use than GUIs. I wonder if someone is trying this on terminals.
/* Claude Code is the strongest case of the return to the mainframe: a closed, bespoke, paid service that nothing locally run compares to. Terminals are just a natural part of the mainframe world! */
What's it been like managing a fairly large project with Zig? I know you've spoken highly of the language in the past, but recently it seems like Zig has been through some substantial changes that would be relevant to a terminal emulator. I'm curious how painful the churn has been for project maintainers.
It's been extremely good. I should really blog about it in more detail because I do get asked this question regularly. It's been very good.
The large language changes are a burden, but it's something I knew going into it. And so far in every case, it's been well worth it. For example, 0.15 introduced the std.Io.Writer overhaul, but I really love the new API. I haven't started the std.Io change yet for 0.16. We'll see. And honestly, LLMs make this all way less painful... even though they're not trained on it, agents are able to run builds, reference docs, and work their way through the upgrade with huge success.
I thought that finding contributors would be an issue, but it hasn't at all. There's a lot of people out there eager to use Zig, the language isn't hard to learn (as long as you're already familiar with systems concepts), etc. It has been good.
I'll think about more to say if I write about this more but overall, I'm very happy with the language, the community, and the leadership. All good.
That's super interesting to hear. I see people say all the time "oh I would never use it in a big project because it's changing so fast", but then see awesome projects like Ghostty and Tiger Beatle written in it, so clearly they're doing something right.
I'm surprised to hear LLMs have been helpful. What little I tried to use them for with Zig, all the information was way too out of date. But I was mainly just doing research, not running an agent at the time, so that's probably why.
Yes, LLMs with Zig are absolutely useless without agentic behaviors. Throw an agent in the mix and it's totally fine. Bonus points if you pair it with some basic agent skills so it knows how to look up language references, stdlib files, etc. then it does even better.
I'll have to give it another try the next time I play around with Zig. I decided to let all the big changes with IO and what not play out before diving back in lol.
I've been slow on the agent pickup. The ethical issues really bother me (LLMs in general), though it's clear I'm not gonna have a choice in this industry so I've been caving recently. The persistent narrative that agents can build entire complex software systems is also irritating, because that clearly doesn't seem to align with reality.
Would you mind sharing or pointing me to any links that explain how you've set up Zig to work effectively with LLMs using agentic features?
I was thinking that downloading the full official documentation, separated by sections inside the repository someone is working on with Zig, could be useful, but maybe there are more optimal ways to approach this.
Do you get frustrated in using a low training data language like zig with AI models? I've noticed that models tend to be better with languages like TypeScript than Swift because of issues like that.
Yes, that's it. It came about after writing a small TUI for a friend to back up their Vimeo library. They liked the simplicity and speed but not having to use the shell. Didn't want to install Ghostty either.
The real goal isn't for Alacrity or Kitty or WezTerm or any other terminal to use libghostty. I think over the long term, terminal emulator user bases dwindle down to niche (but important) use cases.
The real goal is for higher-level tooling (GUI or browser) that utilizes terminal-like programs to have something like libghostty to reach for. I think this represents the much, much larger ecosystem out there that likely touches many more people. For example, Neovim's terminal mode, terminal multiplexers, PaaS build systems, agentic tooling, etc. You're seeing this emerge in force already with the awesome-libghostty repo.
libghostty would still be useful for traditional terminal emulators to replatform on, and for example xterm.js is seriously looking into it (and I'm happy to help and even offered their maintainer a maintainer spot on libghostty). But, they're not the goal. And if fragile egos hold people back, it's really not my problem, it's theirs.
As an outsider to the fascinating world of terminal emulators... can you explain why this might be? Rather, what about `libghostty` would be off-putting vs `libtermengine`?
Just that it's a specific "product"-y sounding name? Would you also be concerned about "libwayland" vs "libcompositor"? Genuinely curious: this seems like an insightful question, I just don't follow the reasoning.
Disclaimer: I am not the maintainer of anything terminal related, it's just an intuition.
Let's say I'm the creator of ghostty "competition".
The fact that is has the same name, could feel if I change that:
- Maybe my users start thinking why don't I use ghostty instead
- Will the maintainers of libghostty chose more oriented to ghostty than for my terminal?
It's a half assed analogy, but think if Google's V8 would be called ChromeEngine instead of V8.
Coincidentally I was just listening to your interview with The Pragmatic Engineer [1] this morning. Loved hearing the stories of early days at HashiCorp, taking it public, and the near-miss with VMware.
It also got me wondering how things would be different if you haven't crossed paths with the guy who unplugged your mouse :) It's fascinating how life is full of these small yet defining moments. We don't always appreciate them right away, but beautiful to look back.
Thanks for Ghostty! It has been my daily terminal driver for the past year.
I was also just recommended this interview on youtube. honestly it makes sense if the algo decided it was the right time to recommend this video and resultantly this post is making it's way to front page of HN
I subscribe to the channel, so I had already downloaded the episode. But glad PE is getting some algorithm-love; it's a great channel/podcast. Gergely is a great interviewer.
Thanks for all the work you do! I had used terminal just a few dozen times before November — and now i am in terminal more than any app (even more than the web browser).
It’s common for me to have 15-25 different terminal windows open for using Claude code. I shifted to Ghostty because I was looking for more features.
Unfortunately, none of the features I wanted are available anywhere (though I’ve come to appreciate Ghostty anyway). Here’s what I had wanted:
1. Basic text editing features (ie click to place cursor in the text input field; highlight to delete)
2. Change colors or fonts mid session (to make it easier to find particular windows)
3. Window management and search (eg, a way to find my windows when I lose them and to otherwise control them)
Apparently, it is really hard to develop features like these for terminal emulators. I’d love to understand why…
The next release includes a way to use a command palette to search for and jump between surfaces (windows, panes), which sounds like it partially addresses your third point. I had a small hand in it, by building the initial UI for the Linux version.
IMO this isn’t the job of the emulator. You can do this all in `tmux` for example.
As for editing text, ghostty+tmux most definitely supports editing text with the mouse (even an in terminal right click menu!) although sounds like your intended use of select to delete isn’t common so you’ll need to do some customizations.
What makes you say that isn't the job the emulator? Sure it is. In fact, tmux itself is a terminal emulator that you just so happen to run inside of another terminal emulator that you want to multiplex.
I’ve been using scroll back search for 15+ years with Terminal.app and iTerm2, and there’s no way that’s not the job of the terminal. You don’t know how good that is until you use it.
Now that Ghostty is part of a real org, is there any way people can sponsor specific features/bugfixes? I've been waiting for drag/drop to be working on KDE before I make the switch, and I'd be happy to pay for a fix.
You're one of the forefront experts in terminal protocol parsing. Do you have opinions on "interceptor" applications like tmux or mosh, for example? These applications technically need to do extra upfront work (especially mosh as it transforms the entire protocol) and it's not a transparent "I treat vt100 as a black box, I put bytes in, I get well structured, standardized events out". Does libghostty-vt support that currently, does it intend to support these kinds of protocols in the feature, or is this kind of thing outside the scope of the project?
Many thanks for everything. Without Ghostty I wouldn't have been able to create https://github.com/rcarmo/webterm and have a decent browser-based terminal that works the way I expect it to.
Having incorporated libghostty into my current web-based project, I can't say enough thanks. I've lived in the terminal since 2003, resisting IDEs, VSCode, everything because I'm a die hard Vim + tmux guy. Vibe coding coming back to the terminal, and being able to use libghostty to facilitate that is a serious vindication of my steadfast resistance to move away from the terminal.
I'm sure you feel the same watching Ghostty become what it has. Big thank you.
mitchellh: What is the current thinking WRT adding client/server functionality (like built-in tmux+mosh)? I recall you talking about it on the Changelog podcast, and that would be a killer feature for me; I really make a lot of use of the wezterm equivalent, it's so nice having first-class UI windows rather than tmux's faking of it.
Just to clarify, it's more about the ability to run a terminal on my Linux box and connect and disconnect to it from my Mac that I'm looking for. Wezterm does a good job of this. Previously I was using tmux and mosh and Nebula, and that worked really great for reconnecting (I almost never had to reconnect, it just stayed live, wezterm I need to reconnect all the time, but that works reliably). But copy-paste with tmux is meh.
Random advice question. My brother taught himself to program and has been making a terminal-based game. What started out small has turned into a highly polished game with ascii art, sound, you name it.
I’ve been trying to figure out how I could actually help him distribute it and I keep coming back to the best option being to wrap his programs terminal output into a host process that can emulate and render it. It seems that the lib Ghostty might be perfect for the former, but not quite yet on the latter?
I don't have specific references for you, but perhaps you could look into how old-school roguelikes packaged their software for distribution. Particularly ones that made the jump to Steam or Itch?
I started using it a few days ago and then I need to find something in the terminal. But....there is no find! Why? Can you guys add it? This is such a basic and critical feature that I may have to just go back to...just about anything else.
I literally discovered Ghostty yesterday when googling "best terminal macos" and surfaced a ~year-old reddit thread recommending it [0]. Just needed something other than Terminal so I could Cmd-Tab between distinct command-line work (e.g. claude code and ipython tabs). Was nice to find something that just worked
Hey Mitchell, thanks for ghostty (happy user here for a month or two). Is there anywhere I can look to see the status of the next planned release?
I've been waiting for the vim feature to hit stable, and have just been checking to see if there's a new release every so often, but I couldn't find a discussion or anything to see when it was planned.
I use Ghostty as my main TUI at work and absolutely love it. Most of my day lives in terminals, and Ghostty just feels fast, clean, and out of the way in the best possible sense.
I was a long-time Kitty user, but switching to Ghostty has been a big upgrade for my workflow. Hard to go back now. Thank you
Is there any chance of a stable release that fixes the memory leak issue? I know I could run nightly but for something I spend all day every day using I'd much rather run a stable version.
Excited to see the further development of libghostty! It is an exciting project in this new world of being able to develop your own agentic development environments rather effortlessly. These things are possible because of projects like yours. Thank you!
I just wanted to say "thank you". I switched to Ghostty over a year ago and it's been working out great. It's now my default terminal. My favorite features are responsiveness and ease of splitting panes.
Hi Mitchell, thanks for creating Ghostty. Been part of my workflow ever since I found it. Just a small question, when do you see Ghostty can fully replicate iTerm2 popular features like output copy/selection?
> On Linux, the quick terminal is only supported on Wayland and not X11, and only on Wayland compositors that support the wlr-layer-shell-v1 protocol. In practice, this means that only GNOME users would not be able to use this feature.
while I agree, the comment you just replied to says:
> Ghostty 1.3 is around the corner, literally a week or two away, and will bring some critically important features like search (cmd+f), scrollbars, and dozens more
> To give a little productive criticism, one thing I really miss is when having tiled terminals, I want to be able to full screen one of them temporarily.
I think you're looking for the `toggle_split_zoom` binding which has existed since Ghostty 1.0 and is default bound to `cmd+shift+enter` on macOS which is the same binding as iTerm. It's also visible in the menu and command palette.
We recently added a kind of split title bar, making it double click to zoom is a good idea. I'll add an issue for that to the roadmap.
Can I take advantage of you being here and express some desiderata?
1. The quick terminal feature is ghostty's killer feature for me, I switched to ghostty because of it. Could we make it first-class feature? Like, i'd love to have tabs over there too (like in guake/yakuake).
2. I have a white on black theme (white text on black background) but when i split vertically/horizontally, the borders between one shell and the next are not really visible and I have an hard time resizing them... Can you do something about it? Setting the colors of borders would be an okay fix for me.
also, from not that long time ago, you can change the focus of panes and you can tell it to respect the zoom state if you want, which is super convenient
I think this fear is overblown. What Vouch protects against is ultimately up to the downstream but generally its simply gated access to participate at all. It doesn't give you the right to push code or anything; normal review processes exist after. It's just gating the privilege to even request a code review.
Vouch is forge-agnostic. See the 2nd paragraph in the README:
> The implementation is generic and can be used by any project on any code forge, but we provide GitHub integration out of the box via GitHub actions and the CLI.
And then see the trust format which allows for a platform tag. There isn't even a default-GitHub approach, just the GitHub actions default to GitHub via `--default-platform` flag (which makes sense cause they're being invoked ON GITHUB).
So I can choose from github, gitlab or maybe codeberg? What about self-hosters, with project-specific forges? What about the fact that I have an account on multiple forges, that are all me?
This seems to be overly biased toward centralized services, which means it's just serving to further re-enforce Microsoft's dominance.
It's a text string, platform can be anything you want, then use the vouch CLI (or parse it yourself) to do whatever you want. We don't do identity mapping, because cross-forge projects are rare and maintaining that would centralize the system and its not what we're trying to do. The whole thing is explicitly decentralized with tiny, community specific networks that you build up.
I consider myself a craftsman as well. AI gives me the ability to focus on the parts I both enjoy working on and that demand the most craftsmanship. A lot of what I use AI for and show in the blog isn’t coding at all, but a way to allow me to spend more time coding.
This reads like you maybe didn’t read the blog post, so I’ll mention there many examples there.
I like using AI for visualizations because it is one-time use throwaway code, so the quality doesn't matter at all (above not being TOTALLY stupid), it doesn't need to be maintained. I review the end result carefully for correctness because it's on a topic I'm an expert of.
I produce non-reusable diagrams namespaced by blog post (so they're never used by any other post). I just sanity check that the implementation isn't like... mining bitcoin or leaking secrets (my personal site has no secrets to build) or something. After that, I don't care at all about that quality.
The information is conveys is the critical part, and diagrams like this make it so much more consumable for people.
That's really cool. I was looking at them and thinking "I could probably make these with vanilla html/css but it'd be pretty tedious." Perfect use case for AI. I need to work on developing a reflex for it.
I've also started doing this, and it's surprisingly enjoyable to both do and even to read. The end result is often more readable to me than using a 3rd-party JS visualization library, because I only need to know standard HTML/CSS concepts to understand what's going on. And a side benefit is smaller pages with less bitrot due to being able to skip the dependencies.
> Probably not a huge deal, but it does seem the fix will needlessly delete and recreate non-standard pages in the case where the new page needs to be non-standard, and the oldest one (that needs to be pruned) already is non-standard and could be reused.
This is addressed in the blog post.
It is how the PageList has always worked, and also how it worked before with the bug, because during capacity adjustment we would see the wrong size. This shouldn't change any perceived performance.
And as I note in the blog post, there are alternative approaches such as the one you suggested, but we don't have enough empirical data to support changing our viewpoint on that whereas our current viewpoint (standard sizes are common) is well supported by known benchmarks. I'm open to changing my mind here, but I didn't want to change worldviews AND fix the leak in the same go.
Of all the things to be impressed by you about, your patience is commendable. I'd be losing my shit if someone couldn't be bothered to read what I wrote and just spout off about something I'd addressed in my writing, but I suppose that's why your bank account has two commas and a bunch more. Thank you for everything. Can we go flying sometime?
> I'd be losing my shit if someone couldn't be bothered to read what I wrote and just spout off about something I'd addressed in my writing
In my experience that’s a universal feature of comment sections everywhere, and HN is not an exception. This is very common in HN comments which is why it’s important to always read the article, not just the comments.
reply