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.
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.
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.
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.
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.
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.
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?
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
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!
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.
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
Recently tried multiple terminals because I am gradually migrating off of Macs and I liked Ghostty but the lack of searching the scrollback has turned me away from it. Opening another editor to do the same I tried but didn't like.
WezTerm has everything I need and is closest to iTerm2, minus being able to quit it and have it restore all windows and tabs on restart -- but oh well, it's not an important enough feature. It also renders my prompt perfectly; no small pixel divergences like all other terminals have.
Kitty I don't remember why I rejected.
Alacritty I like but the lack of tabs is not acceptable for the moment... and before you ask: I hate tmux. So much more key presses to achieve basic functionality, it boggles my mind why people love it. But, to each their own obviously.
It's also likely I'll settle for some Linux-exclusive terminal but as I'm not yet possessing a Linux workstation (just a laptop) I haven't put the requisite time to do this research.
> Alacritty I like but the lack of tabs is not acceptable for the moment... and before you ask: I hate tmux.
Surprised none of the other commenters have mentioned zellij. I work across windows (WSL) and linux so really like having the same set up for both, which means no Ghostty/Kitty since they don't support windows.
Zellij is a lot smoother and nicer looking out the box, and its key shortcuts are pretty intuitive. There's a lit of advantages to not having an extra layer, but zellij + alacritty is definitely worth having in your list of options!
Maybe worth another look at then? I'm far from a Kitty power user, but it does pretty much everything else I want it to, including working as a quake-style terminal[0]. And you can extend it with kittens[1] if you so desire. Also, the next release should presumably include smooth scrolling[2] which I'm quite looking forward to.
Maybe more than any one feature though, I appreciate the hard work that Kovid (the creator of Kitty) has done to tastefully add new VT standards and try to make terminals as useful as they can be in the 21st century.
Kitty is the best one. It has several features which have proven so useful I wasn't able to stay on anything else for more than a couple of hours (including the one this topic is about).
Ctrl+Shift+G wraps the output of the previous command into a pager (say, less). You often only know you needed a pager after that output is printed.
Ctrl+Shift+E highlights all links on the current screen and assigns short alphanumeric codes to them, so you can open links without using the mouse. For example, `Ctrl+Shift+E 1` opens the first link, `.. 2` the second one, etc.
Ctrl+Shift+U opens symbol search where you can find & insert symbols using their unicode names. Emoji, TUI blocks, rare accented characters you need once in a blue moon, CJK ideographs, whatever.
Kitty is great, but its author has very strong opinions, strongly held; this keeps a number of popular requests summarily rejected. In particular, there is no way to color plain bold text, which is possible in basically any other emulator. This is a deal-breaker for me personally, it makes reading e.g. man pages unnecessarily hard.
I'm not the GP, but I do remember why I rejected Kitty when I tried several terminal emulators last years: it broke quite a few of my workflows.
For instance, in vim the F3 key was broken[^1]. It was very surprising and weird, and a portable workaround required some arcane vim configuration.
Another important pain point was that the font rendering was different in Kitty to any other app, and very dependent on the screen DPI. IIRC, for a DPI around 100, I had to switch to "legacy rendering" because the default rendering was barely readable.
I also remember issues with SSH. And Kitty crashed at least once. And I wasn't a fan of Kitty's mix of C and Python. After a week or two of usage, my Kitty config file was big, with an extra hundred lines of Python for the tabbar. Despite some nice features (like the shortcut to put the output of the last command into a file), I got uneasy with all this mess. I tried Ghostty, which was as good as Kitty with much less oddities.
I wouldn't say I love tmux, but I have a configuration file that I put on every computer I use regularly that is very comfortable for me. I basically live in the terminal across many different machines, and having the same interface for managing panes and tabs even when using ssh is invaluable.
I also use vim (well neovim) as my primary editor, and have set up tmux to integrate well with it, so that might contribute to my appreciation and continued usage of it.
If you spend any amount of time on remote machines with unreliable connections, local tmux is insta-reject because tmux inside tmux is very inconvenient. As with GP, it's also why I don't consider terminal emulators without tabs at all.
I hold Control and double-tap b for managing the remote session, then everything else is the same.
Granted, I'm not a power user, so there may be numbers that get frustrating. I could imagine complex splits getting confusing (I don't use splits at all).
C-b is less ergonomic than C-a that is the default on GNU screen. The first thing in tmux is to remap to C-a. (Triply so if you remap caps lock to ctrl.)
I switched to zellij, but I made more like my tmux was because I didn't want to learn new binding; C-q activates tmux mode. C-q + g locks so I can pass through comamnds to inner zellij. C-g unlocks. on super+enter for it opens a ghostty it and atached it to zellij session named $(hostname).
On reboot it remembers my tabs and panels and even commands that ran inside last (i.e there is popup in every panel that had something runing to run it again or just open a terminal)
Before my great wayland migration I ran patched st and it was great. Terminal job is render what terminal multi-plexer gives it and passes input to multiplexer.
I went with C-a for quite a long time, but then I discovered that C-a is a keymap for jumping the cursor to the beginning and f the line, so I remapped tmux prefix to C-Space.
Yep, I've been using tmux for almost 10 years. Its config has followed me across every terminal I've used in Windows with WSL 2, macOS (work laptop) and native Linux. It's a nice abstraction over getting split panes, windows (tabs), sessions, search, scroll back, consistent key binds and the overall theme to work the same across environments.
What proper window manager shows tab group list at the top of the current app window and allows shortcuts/mouse to reorder the list and also allows moving a tab outside of this list to another tab group?
Sway and i3. But when a WM does it, you can mix different apps in the same tab group, and your tab key binds can be the same as your WM key binds. You don’t have to remember alt+h for tabs, win+h for windows, etc.
But I’m just busting your chops, don’t listen to me. I don’t even use i3/Sway, or use tabs at all. Everyone has their own workflow that works best for them.
Scrollback does exist on Ghostty! But you need to switch to “tip”. This can be done in the config file.
The tip build is very stable and has many bugs fixed (like various memory leaks).
there's scrollback search in the nightly build if that's an option for you (I've been using it a ton for a few months and haven't seen any bugs so far):
I haven't seen anyone else mention Terminology yet. It uses an unconventional GUI framework (Enlightenment / EFL), but that aside, it's fast and has more or less all of the features you'd expect of a terminal:
Back in 2018 I thought it felt kind of sluggish and consumed quite a bit of resources, but looked pretty. Have they improved on performance since then?
Are you sure you're thinking of the same terminal? Its standout feature has been performance. Granted, that was 10+ years ago, but I've never noticed it regressing.
I like tmux because it does more than tabs in an emulator. I can detach from a session on a remote host to leave a process running after I disconnect, or to pick the session back up on another PC.
I do use tabs rather than repeatedly switching tmux sessions, but I do end up running tmux for splitting the GUI into side by side layouts.
Detaching is working just fine with `screen` as well.
I like the idea of tmux but as another poster suggested, I prefer to just get better at my
window manager to achieve similar results. tmux requires way too many key presses for me.
Very glad for that--it's what made me stop my evaluation the first time around. I looked for the feature in issues and just saw #9821 about memory use of the buffer which could be an issue if configuring very large scrollback as I do.
BTW is there feature parity between macOS and Linux, e.g. scrollback buffer searching on Linux?
Personally kitty is the only one I keep coming back too. Mostly because it's very customisable, fast, lean, ligatures, separate font for italics, great macro support, and supports automatic tiling panes.
> Alacritty I like but the lack of tabs is not acceptable for the moment... and before you ask: I hate tmux. So much more key presses to achieve basic functionality, it boggles my mind why people love it. But, to each their own obviously.
Tabs usually mean mouse+click to switch which takes way more effort that a simple alt+number or similar keybinding used to switch "tabs" in tmux. I'd guess that some terminal emulator tabs allow keybindings to switch tabs as well but, modelling OP, I'm focusing on the expected default experience.
No, zero mouse usage, you can both address each tab by number and just moving between them. I wouldn't have any terminal emulator without the latter feature at least, and all I've tried support it.
You can search scroll back on Ghostty nightly. I switched straight from iTerm2 (after 20 years of iTerm), but _do_ remember the reason I rejected Kitty: it has a ton of Python in it, which is usually indicative of software which is going to be a pain in the ass.
You can turn on a feature documented as allowing the terminal to be controlled by escape sequences, but then output of programs can control the terminal! Whoop-de-do.
I love Ghostty, especially the UI is so much nicer than Kitty. However, for some reason ghostty sometimes has severe issues with dealing with SSH connections. The terminal is like broken and wrongly displayed and you can't properly type something. Therefore, I still use Kitty, especially for SSH connections. I don't know what `kitten ssh` does, but it makes my terminal work with SSH.
This is what kills it for me. Half the time I'm using a terminal I'm sshing and the fact that I need to copy over term-info on virtually every machine keeps me from using it more often. Even copying term-info doesn't always fix it. From what I've read it's not entirely ghostty's fault but as a user it's frustrating.
No I haven't seen that before. I used to just run the terminfo tic command that's recommended in the top searches and when that started failing I just swapped back to default terminal for SSH
Same. On the tip of main, at least, I can open the command palette and choose reset to bring it back to life. I set a keybinding for reset to skip the command palette.
Big one are the tabs. Kitty has tabs, but rendered in the text rows, so it's missing features that the native OS tabs provide (drag and drop, easy to move around and split into windows...)
He probably refers to the fact that Ghostty aims to use the native window decorations etc.. So for example on Ubuntu it uses gtk, on mac the native macOS tab bar etc. Same goes for the scrollbar and search window.
When Ghostty was publicly announced, I used it for a few months and gave up on it due to the lack of support for the CMD+F feature that I use Terminal.app. This is a critical feature for me while tailing logs on my local. I tried the workaround of capturing the text into a text file and then searching it. It just didn't work for my workflow and dropped it. Ghostty is great otherwise. But, without the CMD+F, it's of no use to me.
> 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.
Same. Lack of search and lack of scrollbars make me wonder why this project got so much attention in the first place. iTerm2 seems way more capable.
I suspect it is "just" the very nice-looking default theme in Ghostty. I updated my iTerm2 colors with colors I picked from Tailwind‘s excellent color palette and iterm2 now feels fresh and has all the features I want.
Bit of a shameless plug, but for those looking to configure Ghostty using an actual GUI, you can use this web tool I've been maintaining since the original closed beta of Ghostty https://github.com/zerebos/ghostty-config
Thank you for dropping this link. I opened ghostty for the first same, then when preferences dropped me into a TUI editor with no syntax highlighting I closed it and reopened iTerm.
I liked the idea of a fast new terminal, but not enough to RTFM before figuring out if it was worth switching.
My only issue with ghostty is it isn’t immediately recognized by some programs through ssh (eg less) and they don’t operate properly. However there’s a one liner that solves the problem permanently on the remote machine[0] so it isn’t too bad. Hopefully in the near future ghostty’s terminfo will be shipped with common linux distros.
I find this docs page fairly hilarious. Complaining about how the rest of the world is in the stone ages, and that is why ghostty doesn’t work with it.
For me, a terminal program that requires me to muck with every machine I log into to get it to work is pretty horrible. I connect to a lot of different machines every work dat. Often they’re not machines I maintain. Making that harder is exactly the opposite of what I want from a key tool like a terminal program.
Note: Ghostty follows the same pattern as Kitty where they a) use their own terminfo, b) distribute it when ssh'ing (it gets pushed to the remote server) and c) added it to ncurses so that it will eventually go away.
I like the look of this terminal, but it doesn't work correctly with SSH (top, ncdu for example) unless you hack the $TERM variable. It feels a bit vibecoded even though it isn't.
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. Double click in iterm allows this, so does mod+f in i3wm. It really is the only thing stopping me from switching to this (and I admit it might be buried somewhere in the settings)
> 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
Using its own TERM is a deliberate design decision. I don't remember how to fix the terminal database, but it's pretty easy (your favorite search engine or LLM should be able to help you there).
If I install a terminal and SSH doesn't work from it out of the box, I would describe that as a bug and wonder if I need to read the full manual to not fall foul of other gotchas
Servers throwing "missing or unsuitable terminal" even when the connecting terminal is available and very suitable. And this is just because they hardcode xterm as the "standard".
I definitely have had to poke at things a bit, even where they "should" work. I use salt in my homelab and eventually got the xterm-ghostty.terminfo file and I put it in my baseline salt config, then you run 'tic -x xterm-ghostty.terminfo'.
I don't know enough about these things to know why, but I have pretty much always had to hack $TERM to get things working smoothly with any remotely featureful terminal emulator. I have occasionally needed similar hacks for Kitty and urxvt, for example (though top and ncdu seem to work fine).
The way terminal applications handle different terminal emulators on Linux just seems to be a bit broken. I don't think it's a particular indictment of Ghostty or any one emulator.
I wish TERM would contain a list of terminal types in decreasing order of specificity, like 'ghostty:xterm-256color', so a system that doesn't know what ghostty is would fall back to xterm-256color, but that ship has sailed long ago.
Same here. I have a Ghostty often open but end up using iTerm2 for pretty much everything. It's not just having to hack the TERM (which I ended up doing), it's that sometimes something about the TERM internally breaks anyway and I'm back to seeing ESC codes when I press an arrow. Quit & restart fixes it but it's just enough friction to keep me away.
It sounds like you simply forgot to update your terminfo on your remote system.
You must do this if your chosen terminal requires settings that are not compatible with "xterm-256color".
Alacritty, kitty, and wezterm also require this, as they implement features that xterm doesn't (and most likely never will), if your terminfo DB is too old to already include them.
If you have to configure the host to support the client rather than the client supporting unknown existing hosts, then what you have is a terminal, not a terminal emulator.
In 1970 all terminals were their own thing, tied to a single host somewhere in the same building by a dedicated serial cable. The terminal didn't move or connect to random other hosts, and the host had to be specially configured to work with any terminal connected to it.
Since then, a few terminal definitions have become standardized across all hosts for decades, and terminals are emulators that emulate one of those 40 year established standard definitions, because today terminals connect to countless unknown new random and varied hosts that the terminal user didn't install and configure before connecting, and may not even have the admin rights to do so after the fact either, and even if they do, it's wildly and inexcusably awful to require that.
It's entirely backwards for a terminal today to default to asserting it's own new $TERM, and to characterize the problems caused by this as "the user forgot to do this totally unreasonable thing" that no other terminal or terminal emulator has required for 40 years.
It's 100% a bug. The fact that it's intentional just means it's a design goal bug.
It might be a bug in remote handling and I might have unfairly called out GhostTTY for this, but "forgetting to update terminfo on my remote system" just doesn't hold with the way I work.
I work managing different systems for different clients and often login to systems for the first time. The servers aren't mine, and configuring something like Ansible to configure my home just seems like a waste of time for little benefit. It means that generally I end up using systems that are likely to be already instead - Bash not zsh, Perl, basic vim without any bindings. It might sound special but I'm sure I'm far from the only person working this way.
So given this, I'd always prefer a terminal that doesn't require me to change remote servers. In this particular case I can modify $TERM in my local .zshrc and it works fine so it's a moot point, but if I had to modify the remote system it would be a no go.
The fetishization of tools is one of the things that mark a dilettante mindset.
You see it on all hobbies, e.g. when the someone sees a photograph and their first question is about what camera and optics were used. No question about composition, light, the moment, creativity... they only care for the tools.
The technique and knowledge is the important thing, not the tools. They forget the good practitioner can do a great photo with a $200 phone than they with the best Canon DSLR.
I have seen this in all hobbies I have practiced, be it musical instruments, kolinsky brushes on miniature painting, montain bikers, running apparell...
As I'm getting older I care less about editors, terminals, Linux distros... and after seeing what can be done with agentic coding tools less so.
I have no idea why I am responding to someone who flippantly uses a phrase like "dilittante mindset", but here we go
there is definitely a tendency for noobs and amateurs in any hobby or industry to obsess over expensive gear and things that don't matter (I love the term "buyhard" for it). you're out of your mind if you think the professionals in literally any industry do not discuss the specific technical tradeoffs of tools they are using among themselves.
When art critics get together they talk about Form and Structure and Meaning. When artists get together they talk about where you can buy cheap turpentine.
I don't feel like this is a fair argument because different tools help different workflows. Since there is always a continuous growth of new people learning new things, it would make sense that tools change over time. Especially in a realm that is digital, not physical.
FWIW once I found my workflow (vim + tmux) I stopped caring so much about chasing "new" tools. Now have the luxury to wait 3-5 years and see what's worth adopting, most of it isn't only because I already found a workflow that works for me; but if you're new or still finding what works best, you'll always be experimenting.
Yes, and one of my favorite anecdotes like this: at one of the greatest jazz concert ever recorded, Charlie Parker played a cheap plastic saxophone because he hadn't brought his own.
This is not about it being a hobby, ghostty is the sanest terminal emulator currently available for MacOS where you can just install and start using it. Customising your terminal doesn't need to be your hobby anymore.
I agree to an extent that tools are not important.
But, for me, there is a certain threshold that a tool must pass to be useful. A tool that is below this level is only slowing you down or limiting your abilities.
You wouldn't use a knife to tighten screws if you have a perfectly good screwdriver lying around. And there's little to no advantage of buying a new expensive or over-engineered screwdriver.
I believe, plain vi is the lowest I can go for writing code. That doesn't mean that I can't use notepad or nano, but they fall under the level of being useful and only cripple and slow me down.
Ghostty passes this level of usability for me, but personally I'm fine with st - no gpu, no cpu spikes, uses barely any ram and still feels snappier. So, what's the point?
This is a very weird take. For people who spend their entire day in the terminal, having the right terminal is incredibly important. Like saying track athletes shouldn't spend money on running shoes if they own a pair of slippers.
I mean, it's all about what works for you, right? I use Cursor's built in emulator and Hyper.sh just because I like Cmd T to work in my terminal. But my workflow is a lot different from a lot people's. Hence, I'm not sure why there's so much debate about people's workflows in this thread. Lots of "you should care" or "you shouldn't care" about your terminal.
This isn't directed at you, of course. Just a weird observation where people are prescribing their workflows to others and telling them what they should or shouldn't care about when the only thing they know about their workflow is that they use a terminal at least once a day.
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.
The first link is a proper end-to-end benchmark with external camera (kudos to the author for making those), the second link is a more faulty software emulation
I'm generally very sensitive to input latency and there's no way Ghostty has 41ms. I've only been using it for a couple of months though, so I guess it's fixed now.
Edit: just saw your second link from 4 months and yes, it's now avg 13ms which feels about right to me. Not perfect but acceptable. So what's even the point of sharing the old benchmark?
I have been using computers and terminal for a long time, and this kind of comment makes me think I must have missed a whole bunch of things which can be done with a terminal
Since people are mentioning latency I’ll mention throughput. Basically the idea is that you accidentally cat a large file to your terminal and we are measuring how much time it takes for the terminal to finish displaying it. This test generally favors GPU-accelerated terminals.
Ghostty performs very well on this regard, among the same league as Alacritty and Ptyxis.
Rather, what will win is a terminal that internally builds an efficient, symbolic representation of what is on the display, rather than a pixel representation with all the font glyph, and which efficiently sychronizes that symbolic representation to the graphical canvas, skipping intermediate updates when the abstract display is changing too fast.
That’s already happening I think. Newer terminals redraw at a fixed rate equal to the display refresh rate, usually 60Hz. But if there are more than 60 new characters being printed per second, some of these intermediate states are never rendered on screen.
Have you tried kitty with more aggressive settings? It feels very responsive out of the box, but the defaults are balanced for sane energy use on portable machines.
on my machine, noticeable. I seriously tried it, but went back because I could notice a small end-end latency, between keypress and action. But I'm also 240hz user.
Where are you measuring the keypress from? The nerve signal to your finger muscles?> Or the time the keycap hits bottom? What if the switch closes before the cap hits bottom: then we are getting a latency figure that looks better than it really is.
I've had a keyboard like that and with it, xterm (and nothing else) felt like it was displaying the characters even slightly before I had pressed them. It was a weird sensation (but good)
Nerve signals yes. I just try them side by side, usually running vim on both terminals and measuring how it feels. If you can feel difference, the latency is bad.
Tried Ghostty several times and I really appreciate the font rendering, but I keep going back to iTerm2 and Terminal.app mostly because of lack of scroll back & CMD-F, etc. Looking forward to what is coming in the next release.
I have a terminal manager project[0] I'm currently using xterm for, but very curious to try libghostty. Have mainly been hesitant because it hasn't been promoted from an internal ghostty dependency (only awareness of the place was from this article by the creator[1]), but from the sounds of it here people are finding it stable enough. Gonna give it a whirl today.
I've been following this before it was made public and I'm a big Zig fan so I would definitely switch to this, but I've tried and failed many times. Currently it just keeps crashing multiple times (on three different machines) each day on my mac and the quick terminal doesn't support full screen mode (it still shows the menu bar). I could live with the menu bar showing, but because of the constant crashing I'll wait for a bit and check back in a few months.
Loving how well Ghostty works and looks.
When running several Projects I need quite a few tabs as all these AI agents take sometime to complete. Overhead tabs get real messy very quickly. Multiple windows become a nightmare quickly. Side bar tabs have been my solution.
I love iTerms sidebar tabs - I add emojis to mine for my key projects and any subtask just lives under the master tab like a folder.
Would love to see sidebar tabs - or it sounds like I can code my own.
I've used Ghostty in the past, but nowadays it's hard to use it since you have to take in count that running agents requires using tmux sessions which is something Ghostty does not support very well
If you compare them side by side, you actually can see how slow some of them are. The way I compare is to open them all up tiled on my display joined to the same tmux session, then try doing heavy redraw operations, like maybe cmatrix. You can clearly see how some of them are quick at redrawing, and some are not.
Some people do not care about the difference, but it is definitely there.
Ghostty's terminfo entry doesn't enable 24-bit color*, and as far as I can tell they don't provide a "ghostty-direct" entry that does. It just seemed odd that it's completely supported and working, yet not easily enabled. Maybe I just missed a trick, and didn't need to make a custom terminfo entry myself?
* "msgcat --color=test" is an easy test that shows the blending of 24-bit color, or blocky gradients otherwise.
Feature request: renaming tabs! Helps keep tabs organized instead of 20 tabs with similar names. (See Zed for example)
Also! I'm considering Ghostty web (https://github.com/coder/ghostty-web) for my project Ink Web. It's awesome that Ghostty can work in the browser to replace xterm.js.
In my experience it actually is. I went through multiple terminals and they all had issues for me (missing key remapping functionality, slowness, not working across platforms, UI ugly...), but Ghostty is solving most of these.
I've only ever stuck with urxvt and more recently foot since moving to Wayland. On Mac the default terminal works for me, though I've been using Ghostty to follow a trend, but I seriously don't understand the benefits netted to me? (other than the cool icon)
I stayed with Terminal.app for quite awhile. Until very recently (not when Ghostty was released) it didn't have 24-bit colour support. It also didn't have shell integrations such as triple click to select all output of the last command. The configuration system is arse and is kind of a lock-in as it is in all plist form, so I had a hard time extracting the colours I used for my terminal and using them elsewhere.
Now that they've updated it recently, it is a better terminal, but otherwise Ghostty has a few bells and whistles that make the experience nicer.
Curious to hear some more recommendations, I settled on using lxterminal which works well enough. I couldn't get wezterm to recognize fonts on ALpine no matter what I did, kitty doesn't support tabs and ghosttty sounds like it has issues with ssh connections? I feel like I tried most at some point but if anyone has suggestions for a tabbed terminal emulator nicer than lxterminal, ideally with transparency, I'd love to hear them.
As a counterpoint to Ghostty ssh. I have literally never had an issue and I manage a large cluster of boxes that run everything from centos 7 to rocky 10. All from ghostty on a Mac.
Ghostty is awesome, ill echo the sentiment regarding lack of IPC/scripting API being my current hold back. Sticking with kitty til then. I still keep the ghostty binary on hand so I can +boo :^)
for libghostty consumers, favorite i've tried so far is neurosnap/zmx.
It helps a bit that it's written in Zig, but its primary differentiating feature in the sea of terminal emulators is that it's created by mitchellh, who is kind of a celebrity in some circles.
Ghostty is extremely performant. I had a bug in some concurrent software; when I added logging the bug would disappear because the threads acquiring the lock on STDERR was sufficient to make the bug go away. On Ghostty this happened fast enough that I was able to reproduce the bug.
Maybe I should have been writing everything to a file. ¯\_(ツ)_/¯ Anyway, I didn’t think of it at the time and Ghostty saved me.
Unfortunately scrolling in terminal apps via mouse wheel seems to be broken (on release and main branch), which is currently a blocker for me. Hope this will be fixed soon.
I tried this out after getting annoyed for the 100th time by a recent bug in kgx/console that will occasionally fail to launch windows leaving incomplete windows as tabs.
Console has long since become abandonware pushing people towards ptyxis which is now the default gnome terminal. A damn shame considering console is basically complete software (the quality of software in gnome is on a downhill).
I would have given ptyxis a chance if they didn't take a basic terminal and added some fluff (features related to distrobox) on top of other annoying things I can't be bothered to remember about because I ended up removing the software every time I gave it a spin.
In just a few days I've been able to replace console with ghostty-nightly and I don't miss anything.
What features related to distrobox? I use both ptyxis and distrobox and I don’t notice any integration between them. I do notice an integration between ptyxis and sudo however. It simply turns the title bar red.
> Ptyxis: Your Container-Oriented Terminal for GNOME
> A modern terminal emulator built for the container era.
Seamlessly navigate between your host system and local containers like Podman,
Toolbox, and Distrobox with intelligent detection and a beautiful, responsive
GNOME interface.
It’s been posted many times, I think mostly due to it’s association to Mitchell Hashimoto. It’s left as an exercise the reader to determine why this is important.
When I tried Wezterm last year, you couldn't select more than 3-5 lines of text. I went to fix the 'bug', I found that it was intentional because it allocates a string and copies multiple times every time you click and drag.
Even if that's fixed, that design put me off the terminal forever.
Been using/abusing wezterm for years, my scrollback is set to 1000000 and text selection has never been a problem... copy mode however does make it even easier
I hed to look this up, so here's a correction: it was one large line logically split, not smaller lines. So you can't select, say, a long compact JSON line.
I switched from iTerm2 because at the time (possibly still), iTerm2 had a performance bug where large amounts of underlined text would cause the terminal to slow down noticeably. Wezterm works perfectly, and I appreciate the .lua configuration over iTerm2's mess of menus.
On the new mac tahoe with rounded corners (which are really frustrating to me), ghostty should add small margin on the bottom, because the font is sometimes renedered on it and letters are cut (rarely but infuriating, when it happens)
Ghostty is fast and feels native, but WezTerm occupies a different niche: it's a terminal you program rather than configure.
The Lua config isn't just "dynamic" in the abstract sense. I built a tmuxinator-style workspace manager that spawns project-specific layouts - named tabs, splits, working directories, startup commands - from a fuzzy launcher. Session state auto-saves every 10 minutes with timestamped snapshots and crash recovery. Theme toggling between dark and light mode triggers a system-wide theme switch script. These are runtime behaviors, not static settings - try doing any of that in TOML.
The built-in multiplexer is the other major differentiator. Splits, directional navigation, pane zoom, pane selection with alphabet overlays, moving panes between tabs or windows, all without a tmux prefix key. It's not just "WezTerm has splits too, it's that the interaction model is fundamentally more fluid when there's no mode switching.
WezTerm isn't trying to be the fastest terminal. It's trying to be the most programmable one, and for people who want their terminal to work as a development environment rather than a PTY renderer, that tradeoff is worth it.
When I had 3 or more panes open one of them would freeze and be not recoverable without quitting the app. That's a deal killer when I'm trying to run 2 or 3 agents.
He covers his LLM uses too!
Highly recommend, and Mitchell thoughts on open source inspired me to start contributing to projects outside of my common experience.
I was more getting at the angle that when people say things like “Wow, I asked AI to code a terminal emulator and it got it mostly right!”, it’s not because the LLM is amazingly smart only by inference, it’s been trained on the appropriated code of individuals like the above.
I can't find an alternative to Terminator, being able to drag and drop panels to create layouts is such a strong workflow that it's very hard to give up
I did give Ghostty a try, the turn off was Adwaita, the tablet UI for the tabs and context menu.. i just can't
It’s a shame that version 1.2.x got abandoned and didn’t receive any important bug fixes. That has severely cut my trust into this project. It’s been over 4 months since the last 1.2.3 release, so the memory leak when using Claude is not addressed, my Ghostty crashes are not addressed (crash reporter doesn’t work), I don’t even bother looking at the issues anymore, as I know I am not getting the fixes for a long time.
And I’m not running a critical piece of productivity software on a nightlies channel!
I'm not doubting your personal experience, but I find the crashes you mentioned surprising; I have never once, since v1.0.1, had Ghostty crash. Tbf I use it with tmux, so I'm not exercising some of its capabilities. But with tmux, I have at any given time 5-7 sessions, each with 2-5 windows, some with panes.
Datapoint: I’m running nightly now because the latest 1.2 release has a known crash-on-wake bug when disconnecting an external monitor. Accordingly the issue tracker it was fixed months ago, but it’s not in a release. The nightly is stable though.
Didn’t realize how may projects use libghostty, will try cmux one of these days.
It's a nice terminal but it cannot be configured to the same level as iTerm, e.g. in terms of colors, look and feel, how the menus work, how the tabs work, etc.
Also, in practice, I find it hard to detect any performance difference between iTerm and Ghostty even though I know in theory that Ghostty is more performant...
So for now I go with iTerm because I prefer the UI.
I used to use the iTerm programmable notification bell which would ring when a particular output was printed in the terminal. Don't think I can do that in Ghostty
just installed ghostty, looks cool. but my honest question is how it is significantly better than iterm2 to justify such a switch? I am aware of the fact that it is faster, uses less memory, various configurations is more straight forward. but is that all?
I have the feeling that I must be missing something big here.
I’ve been using iTerm2 for years. I’ve tried ghostty a few times and quickly went back to iterm each time for various reasons I can’t immediately recall. There is nothing I can think of lacking from iterm.
That said; if I was working more on Linux or Windows where iterm doesn’t exist it looks like ghostty would be a good option.
Same. As far as I can tell, Ghostty is still in active development and unfinished. For regular use iTerm 2 is a complete product that can be relied upon.
Ghostty calls itself "feature rich" but only added cmd+F / find functionality a few months ago. Makes me wonder what other basic functions it's missing.
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.
So, it's amazing. But overall, its amusing.
What’s old is new again is apparently just as true in tech as it is in fashion.
That's probably why it is so hyped up as it is right now.
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.
[1] https://github.com/magit/transient
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.
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.
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.
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.
Thanks.
It was so easy to get the terminal functionality going with `libghostty`. Most time was spent building the functionality around it.
Thanks for making it.
[0]: https://github.com/weedonandscott/trolley
If so that actually sounds really cool. I'd like a dedicated lazygit app in my tray at all times.
So here we are
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.
[1] https://www.youtube.com/watch?v=WjckELpzLOU
https://www.pragmaticengineer.com/
Let's say I'm the creator of Alacritty, would I have more problems adding libghostty than it's generically named identical counterpart 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.
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.
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.
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…
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.
I'm sure you feel the same watching Ghostty become what it has. Big thank you.
Tabs (and panes? I haven't tried yet) should work fine for regular terminal windows though.
Also, Zellij is nice.
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?
This is addressed in paragraph 5 of the post they replied to.
Essentially, I have a few features that have a TUI-first UI, and the obvious next step is to expose some of that to a browser.
[0] https://www.reddit.com/r/macapps/comments/1loiw2z/comment/n0...
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 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
Out of curiosity, does ghostty do the Quake terminal thing - I use yakuake for this, but it feels a bit long in the tooth.
This works on MacOS, and on Linux sometimes:
> 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.
> 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
Big fan. Can I get a ride on your jet?
Nice! Looks like I should have rushed the interview. :D
WezTerm has everything I need and is closest to iTerm2, minus being able to quit it and have it restore all windows and tabs on restart -- but oh well, it's not an important enough feature. It also renders my prompt perfectly; no small pixel divergences like all other terminals have.
Kitty I don't remember why I rejected.
Alacritty I like but the lack of tabs is not acceptable for the moment... and before you ask: I hate tmux. So much more key presses to achieve basic functionality, it boggles my mind why people love it. But, to each their own obviously.
It's also likely I'll settle for some Linux-exclusive terminal but as I'm not yet possessing a Linux workstation (just a laptop) I haven't put the requisite time to do this research.
Suggestions are welcome.
Surprised none of the other commenters have mentioned zellij. I work across windows (WSL) and linux so really like having the same set up for both, which means no Ghostty/Kitty since they don't support windows.
Zellij is a lot smoother and nicer looking out the box, and its key shortcuts are pretty intuitive. There's a lit of advantages to not having an extra layer, but zellij + alacritty is definitely worth having in your list of options!
https://zellij.dev/
Maybe worth another look at then? I'm far from a Kitty power user, but it does pretty much everything else I want it to, including working as a quake-style terminal[0]. And you can extend it with kittens[1] if you so desire. Also, the next release should presumably include smooth scrolling[2] which I'm quite looking forward to.
Maybe more than any one feature though, I appreciate the hard work that Kovid (the creator of Kitty) has done to tastefully add new VT standards and try to make terminals as useful as they can be in the 21st century.
[0] https://sw.kovidgoyal.net/kitty/kittens/quick-access-termina...
[1] https://sw.kovidgoyal.net/kitty/kittens_intro/
[2] https://github.com/kovidgoyal/kitty/pull/9330
Ctrl+Shift+G wraps the output of the previous command into a pager (say, less). You often only know you needed a pager after that output is printed.
Ctrl+Shift+E highlights all links on the current screen and assigns short alphanumeric codes to them, so you can open links without using the mouse. For example, `Ctrl+Shift+E 1` opens the first link, `.. 2` the second one, etc.
Ctrl+Shift+U opens symbol search where you can find & insert symbols using their unicode names. Emoji, TUI blocks, rare accented characters you need once in a blue moon, CJK ideographs, whatever.
WezTerm is a very good replacement.
So true. To the point I have to maintain my own fork to make the command key my meta
For instance, in vim the F3 key was broken[^1]. It was very surprising and weird, and a portable workaround required some arcane vim configuration.
Another important pain point was that the font rendering was different in Kitty to any other app, and very dependent on the screen DPI. IIRC, for a DPI around 100, I had to switch to "legacy rendering" because the default rendering was barely readable.
I also remember issues with SSH. And Kitty crashed at least once. And I wasn't a fan of Kitty's mix of C and Python. After a week or two of usage, my Kitty config file was big, with an extra hundred lines of Python for the tabbar. Despite some nice features (like the shortcut to put the output of the last command into a file), I got uneasy with all this mess. I tried Ghostty, which was as good as Kitty with much less oddities.
[^1]: https://github.com/vim/vim/issues/13328
I also use vim (well neovim) as my primary editor, and have set up tmux to integrate well with it, so that might contribute to my appreciation and continued usage of it.
Hitting c-b c-b isn't that inconvenient?
I hold Control and double-tap b for managing the remote session, then everything else is the same.
Granted, I'm not a power user, so there may be numbers that get frustrating. I could imagine complex splits getting confusing (I don't use splits at all).
On reboot it remembers my tabs and panels and even commands that ran inside last (i.e there is popup in every panel that had something runing to run it again or just open a terminal)
Before my great wayland migration I ran patched st and it was great. Terminal job is render what terminal multi-plexer gives it and passes input to multiplexer.
But you do have to run a proper window manager so you don’t have to require tab support in every single app. ;)
But I’m just busting your chops, don’t listen to me. I don’t even use i3/Sway, or use tabs at all. Everyone has their own workflow that works best for them.
https://github.com/ghostty-org/ghostty/releases/tag/tip
https://github.com/borisfaure/terminology
Its "moment" as a new novel terminal was over a decade ago, but it still chugs on working just fine. Notably(?), gregkh uses it (or used to use it):
https://www.linuxfoundation.org/blog/blog/greg-kroah-hartman...
Another option is to leave the tabbing to your window manager.
I do use tabs rather than repeatedly switching tmux sessions, but I do end up running tmux for splitting the GUI into side by side layouts.
I like the idea of tmux but as another poster suggested, I prefer to just get better at my window manager to achieve similar results. tmux requires way too many key presses for me.
BTW is there feature parity between macOS and Linux, e.g. scrollback buffer searching on Linux?
Tabs usually mean mouse+click to switch which takes way more effort that a simple alt+number or similar keybinding used to switch "tabs" in tmux. I'd guess that some terminal emulator tabs allow keybindings to switch tabs as well but, modelling OP, I'm focusing on the expected default experience.
I hate mixed mouse + keyboard workflows as well.
https://github.com/kovidgoyal/kitty/issues/2084
You can turn on a feature documented as allowing the terminal to be controlled by escape sequences, but then output of programs can control the terminal! Whoop-de-do.
AI Usage Policy - https://news.ycombinator.com/item?id=46730504 - Jan 2026 (273 comments)
Finding and fixing Ghostty's largest memory leak - https://news.ycombinator.com/item?id=46568794 - Jan 2026 (138 comments)
Why users cannot create Issues directly - https://news.ycombinator.com/item?id=46460319 - Jan 2026 (310 comments)
Ghostty is now non-profit - https://news.ycombinator.com/item?id=46138238 - Dec 2025 (289 comments)
Ghostty compiled to WASM with xterm.js API compatibility - https://news.ycombinator.com/item?id=46110842 - Dec 2025 (115 comments)
Vibing a non-trivial Ghostty feature - https://news.ycombinator.com/item?id=45549434 - Oct 2025 (147 comments)
Ghostty 1.2.0 - https://news.ycombinator.com/item?id=45252026 - Sept 2025 (26 comments)
AI tooling must be disclosed for contributions - https://news.ycombinator.com/item?id=44976568 - Aug 2025 (464 comments)
We rewrote the Ghostty GTK application - https://news.ycombinator.com/item?id=44905808 - Aug 2025 (224 comments)
Release Notes for Ghostty 1.1.0 - https://news.ycombinator.com/item?id=42884930 - Jan 2025 (79 comments)
Déjà vu: Ghostly CVEs in my terminal title - https://news.ycombinator.com/item?id=42562743 - Dec 2024 (55 comments)
Ghostty: Reflecting on Reaching 1.0 - https://news.ycombinator.com/item?id=42527355 - Dec 2024 (7 comments)
Ghostty 1.0 - https://news.ycombinator.com/item?id=42517447 - Dec 2024 (681 comments)
Ghostty 1.0 Is Coming - https://news.ycombinator.com/item?id=41914025 - Oct 2024 (32 comments)
What are you talking about? What UI does Kitty have?
I really like this a lot.
https://github.com/ghostty-org/ghostty/issues/189
https://x.com/mitchellh/status/1993728538344906978
As Mitchell stated above:
> 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.
I suspect it is "just" the very nice-looking default theme in Ghostty. I updated my iTerm2 colors with colors I picked from Tailwind‘s excellent color palette and iterm2 now feels fresh and has all the features I want.
E.g. with MacOS terminal, I launch Claude, with Ghostty, I launch opencode, with Attyx I launch pi
I liked the idea of a fast new terminal, but not enough to RTFM before figuring out if it was worth switching.
[0] https://ghostty.org/docs/help/terminfo
For me, a terminal program that requires me to muck with every machine I log into to get it to work is pretty horrible. I connect to a lot of different machines every work dat. Often they’re not machines I maintain. Making that harder is exactly the opposite of what I want from a key tool like a terminal program.
Kitty needed to do it too back in 2018.
https://lists.gnu.org/archive/html/bug-ncurses/2018-09/msg00...
Note: Ghostty follows the same pattern as Kitty where they a) use their own terminfo, b) distribute it when ssh'ing (it gets pushed to the remote server) and c) added it to ncurses so that it will eventually go away.
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. Double click in iterm allows this, so does mod+f in i3wm. It really is the only thing stopping me from switching to this (and I admit it might be buried somewhere in the settings)
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.
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.
Just FYI, it's in Kitty nowadays too: https://sw.kovidgoyal.net/kitty/kittens/quick-access-termina.... The quick-access terminal is a regular terminal, so you get normal tabs, splits, etc. there.
host * SetEnv TERM=xterm-256color
The way terminal applications handle different terminal emulators on Linux just seems to be a bit broken. I don't think it's a particular indictment of Ghostty or any one emulator.
You must do this if your chosen terminal requires settings that are not compatible with "xterm-256color".
Alacritty, kitty, and wezterm also require this, as they implement features that xterm doesn't (and most likely never will), if your terminfo DB is too old to already include them.
Using Alacritty as an example, you'd take a file that looks like this, https://github.com/alacritty/alacritty/blob/master/extra/ala... , and run `tic -x -o "~/.terminfo" "that.info"` on it.
Its been this way for like 30 years, and it'll never change.
In 1970 all terminals were their own thing, tied to a single host somewhere in the same building by a dedicated serial cable. The terminal didn't move or connect to random other hosts, and the host had to be specially configured to work with any terminal connected to it.
Since then, a few terminal definitions have become standardized across all hosts for decades, and terminals are emulators that emulate one of those 40 year established standard definitions, because today terminals connect to countless unknown new random and varied hosts that the terminal user didn't install and configure before connecting, and may not even have the admin rights to do so after the fact either, and even if they do, it's wildly and inexcusably awful to require that.
It's entirely backwards for a terminal today to default to asserting it's own new $TERM, and to characterize the problems caused by this as "the user forgot to do this totally unreasonable thing" that no other terminal or terminal emulator has required for 40 years.
It's 100% a bug. The fact that it's intentional just means it's a design goal bug.
I work managing different systems for different clients and often login to systems for the first time. The servers aren't mine, and configuring something like Ansible to configure my home just seems like a waste of time for little benefit. It means that generally I end up using systems that are likely to be already instead - Bash not zsh, Perl, basic vim without any bindings. It might sound special but I'm sure I'm far from the only person working this way.
So given this, I'd always prefer a terminal that doesn't require me to change remote servers. In this particular case I can modify $TERM in my local .zshrc and it works fine so it's a moot point, but if I had to modify the remote system it would be a no go.
Any distro older than this does not include Ghostty by default.
Alacritty was added in the Feb 2020 release, as well as Kitty. Wezterm was added in the April 2024 release.
You see it on all hobbies, e.g. when the someone sees a photograph and their first question is about what camera and optics were used. No question about composition, light, the moment, creativity... they only care for the tools.
The technique and knowledge is the important thing, not the tools. They forget the good practitioner can do a great photo with a $200 phone than they with the best Canon DSLR.
I have seen this in all hobbies I have practiced, be it musical instruments, kolinsky brushes on miniature painting, montain bikers, running apparell...
As I'm getting older I care less about editors, terminals, Linux distros... and after seeing what can be done with agentic coding tools less so.
there is definitely a tendency for noobs and amateurs in any hobby or industry to obsess over expensive gear and things that don't matter (I love the term "buyhard" for it). you're out of your mind if you think the professionals in literally any industry do not discuss the specific technical tradeoffs of tools they are using among themselves.
-- Pablo Picasso
FWIW once I found my workflow (vim + tmux) I stopped caring so much about chasing "new" tools. Now have the luxury to wait 3-5 years and see what's worth adopting, most of it isn't only because I already found a workflow that works for me; but if you're new or still finding what works best, you'll always be experimenting.
https://jazzfuel.com/charlie-parker-the-plastic-saxophone-th...
But, for me, there is a certain threshold that a tool must pass to be useful. A tool that is below this level is only slowing you down or limiting your abilities.
You wouldn't use a knife to tighten screws if you have a perfectly good screwdriver lying around. And there's little to no advantage of buying a new expensive or over-engineered screwdriver.
I believe, plain vi is the lowest I can go for writing code. That doesn't mean that I can't use notepad or nano, but they fall under the level of being useful and only cripple and slow me down.
Ghostty passes this level of usability for me, but personally I'm fine with st - no gpu, no cpu spikes, uses barely any ram and still feels snappier. So, what's the point?
This isn't directed at you, of course. Just a weird observation where people are prescribing their workflows to others and telling them what they should or shouldn't care about when the only thing they know about their workflow is that they use a terminal at least once a day.
https://github.com/0xType/0xProto#4-ligatures-that-dont-defo...
I can't recommend 0xProto enough, the only thing I'm sorry about is that I didn't find it sooner :)
More benchmarks from 4 months ago: https://news.ycombinator.com/item?id=45253927
14 months old discussion of input latency in Ghostty with comments from the author: https://github.com/ghostty-org/ghostty/discussions/4837
Edit: just saw your second link from 4 months and yes, it's now avg 13ms which feels about right to me. Not perfect but acceptable. So what's even the point of sharing the old benchmark?
Ghostty performs very well on this regard, among the same league as Alacritty and Ptyxis.
[0]: https://github.com/ouijit/ouijit [1]: https://mitchellh.com/writing/libghostty-is-coming
I love iTerms sidebar tabs - I add emojis to mine for my key projects and any subtask just lives under the master tab like a folder.
Would love to see sidebar tabs - or it sounds like I can code my own.
I hope they prioritize scriptability soon. It's quite important to my personal git worktree ergonomics.
Some people do not care about the difference, but it is definitely there.
See also https://sw.kovidgoyal.net/kitty/performance/
* "msgcat --color=test" is an easy test that shows the blending of 24-bit color, or blocky gradients otherwise.
Also, does it support visible control characters ? EXACT EMULATION ? 3270 ? VT-105 ? VT-220 ? VT-320 ? VT-420 ? SIXEL ? NAPLPS ?
Also! I'm considering Ghostty web (https://github.com/coder/ghostty-web) for my project Ink Web. It's awesome that Ghostty can work in the browser to replace xterm.js.
https://github.com/cjroth/ink-web/pull/1
Project: https://www.ink-web.dev/
Here's what I landed on: This config tries to emulate as much of tmux with native ghostty features (splits and tabs).
https://codeberg.org/jfkimmes/dotfiles/src/branch/master/gho...
Now that they've updated it recently, it is a better terminal, but otherwise Ghostty has a few bells and whistles that make the experience nicer.
for libghostty consumers, favorite i've tried so far is neurosnap/zmx.
Maybe this is why the creator is touting the use of libghostty, the underlying library.
Maybe I should have been writing everything to a file. ¯\_(ツ)_/¯ Anyway, I didn’t think of it at the time and Ghostty saved me.
Unfortunately scrolling in terminal apps via mouse wheel seems to be broken (on release and main branch), which is currently a blocker for me. Hope this will be fixed soon.
Console has long since become abandonware pushing people towards ptyxis which is now the default gnome terminal. A damn shame considering console is basically complete software (the quality of software in gnome is on a downhill).
I would have given ptyxis a chance if they didn't take a basic terminal and added some fluff (features related to distrobox) on top of other annoying things I can't be bothered to remember about because I ended up removing the software every time I gave it a spin.
In just a few days I've been able to replace console with ghostty-nightly and I don't miss anything.
> A modern terminal emulator built for the container era. Seamlessly navigate between your host system and local containers like Podman, Toolbox, and Distrobox with intelligent detection and a beautiful, responsive GNOME interface.
https://gitlab.gnome.org/chergert/ptyxis/-/blob/main/README....
https://xkcd.com/1053/
For me, Kitty still has the edge:
https://sw.kovidgoyal.net/kitty/
WezTerm is also a strong contender:
https://wezterm.org/
Even if that's fixed, that design put me off the terminal forever.
Still not fixed: https://github.com/wezterm/wezterm/issues/3494
The Lua config isn't just "dynamic" in the abstract sense. I built a tmuxinator-style workspace manager that spawns project-specific layouts - named tabs, splits, working directories, startup commands - from a fuzzy launcher. Session state auto-saves every 10 minutes with timestamped snapshots and crash recovery. Theme toggling between dark and light mode triggers a system-wide theme switch script. These are runtime behaviors, not static settings - try doing any of that in TOML.
The built-in multiplexer is the other major differentiator. Splits, directional navigation, pane zoom, pane selection with alphabet overlays, moving panes between tabs or windows, all without a tmux prefix key. It's not just "WezTerm has splits too, it's that the interaction model is fundamentally more fluid when there's no mode switching.
WezTerm isn't trying to be the fastest terminal. It's trying to be the most programmable one, and for people who want their terminal to work as a development environment rather than a PTY renderer, that tradeoff is worth it.
He covers his LLM uses too! Highly recommend, and Mitchell thoughts on open source inspired me to start contributing to projects outside of my common experience.
I did give Ghostty a try, the turn off was Adwaita, the tablet UI for the tabs and context menu.. i just can't
And I’m not running a critical piece of productivity software on a nightlies channel!
Didn’t realize how may projects use libghostty, will try cmux one of these days.
Also, in practice, I find it hard to detect any performance difference between iTerm and Ghostty even though I know in theory that Ghostty is more performant...
So for now I go with iTerm because I prefer the UI.
I have the feeling that I must be missing something big here.
That said; if I was working more on Linux or Windows where iterm doesn’t exist it looks like ghostty would be a good option.
No complaints been happy using it for my claude swarms for about a month
Probably more, but after dealing with unhelpful errors while trying to debug my config file, I figured I'd come back to ghostty another time.