I've been keeping an eye on this in the hopes that text-reflow (edit: including for scrollback) could be solved in Neovim-based terminals [1]. I'm loving the innovation Ghostty is bringing to the terminal space.
I wish they had used something like this in Shopify, instead they decided it was a good idea to embed VScode in the browser in case users want to
make a small modification to theme files, it even has a 5 second boot time.
This is super cool, it will be so nice to have a truly omni-platform terminal emulator that can even conceivably extend to iOS and Android.
Aside: I didn't realize Ghostty was written in Zig, wow. The first Zig-thing I'm aware of using on a regular basis. It's amusing the repository structure looks exactly like a Golang layout, haha.
Not omni-platform if you have macOS < 13. It's the author's prerogative to set minimum requirements, of course, but for something "basic" (note the quotes) like a terminal emulator, not having far-reaching backwards platform compatibility is a deal-breaker for many. Life's hard enough for macOS users who don't want to upgrade the OS every 6 months and/or replace hardware every 2 years. For people like me who prefer to run their systems as purchased until the hardware fails, the "move forward or get left behind" upgrade mentality is very troublesome.
Hopefully libghostty will be much more permissive. No dependencies (not even libC) is a good sign that will be true.
(written on a 2018 macbook pro running macOS 10.14.6, which still works great in every way)
I have heard this from a lot of people, yet here I am, using a terminal that supports this, and have yet to ever do it.
Can you help me understand what workflows you depend on Ctrl+f for? I wonder if I am missing something big.
You can map something like cmd+shift+f to open the entire buffer in your default text editor, this has been sufficient for a lot of folks - myself included - while we wait for native scrollback search to land.
I started using it months ago and don't miss that so much, if I really can't rerun the command and pipe it to less/grep. I'll just use the mouse to copy it to the clipboard and then run `xclip -o` (linux) or `pbpaste` (mac) and pipe it to grep. I know there's a keybinding for putting the buffer in a file, but copying with the mouse is faster than finding it.
Also, not sure if this is by default or it picked it up from my old iTerm2 configuration, but cmd+shift+up/down navigates through prompt lines so it's easy to find the start of a long command. My PS1 in zsh is:
Hashimoto is an absolute wizard, but what I find most compelling about him is his absolutely uncanny ability to segment and abstract systems and interfaces in a way for maximum composability and minimal entanglement. He's like the walking embodiment of Rich Hickey's Simple Made Easy philosophy. It's like he designs software systems in such a way that they have no choice but to operate correctly and predictably.
Also I just tried Ghostty for the first time. With iTerm2 and the Zsh/Powerlevel10k theme, there's an extremely brief but perceptible lag from running a command and the render. In ghostty it feels actually instant.
Basically MariaDB. He (original creator of MySQL) sold MySQL for a Billion dollars (iirc) forked it, created MariaDB and kept at it. It's been what 15 years now?
Also, in real life, he's a genuine nice guy. I had lunch with him and Armon at a conference when they worked at Kiip, before they founded Hashicorp. Mitchell (to me) was the proper hacker. He just loved everything about computing. This particular conference was about distributed systems and he was just geeking out on everything.
I walked away thinking that no matter what they did, they'd probably be successful. I was extremely happy to find Ghostty and have been using it ever since.
You made me look into HashiCorp again. It's a great company from a developers perspective, in terms of the many useful tools created: Vagrant, Packer, Nomad, Consul, etc
I just want to say, what a dream. To have wealth and be able to create projects for the sake of going the projects. To not have to make the concessions of quality for profits.
There's an old Knuth quote:
> In fact what I would like to see is thousands of computer scientists let loose to do whatever they want. That's what really advances the field.
And I think we're seeing more and more that these projects made with love are successful. That without the hyper fixation on money we can build good projects that make big changes in a world.
In some sense I'm a bit envious of Mitchell but truthfully these types of things make me more question how we've constructed our society and economy. It shouldn't require one to start with wealth to be able to build things that have such an impact. What needs to be changed where we can live up to what Knuth proclaimed. I'm sure all of us have had experiences where were we given the time (and usually not much) we could make things so much better. But we make many sacrifices when we rush. Which leads to more good advice by Knuth
> If you optimize everything, you will always be unhappy.
At what point do we push back? We see that the people we really look up to did things so differently. Knuth himself expressed how detail obsessed he was, and such a claim is common among the grey breads.
Of course, things change, but are we creating a world with no wizards? Are we creating a world where we reward people for solving problems and making our lives easier? Or are we just maximizing some score of a pointless game?
I'd love to live in a world with a thousand more Mitchells, following their passions without the burden of needing to justify decisions to a board who has no interest in quality. How do we create that world?
Like you said, what a legend. But, how do we make more legends?
The passion and attention to detail Mitchell has for developer experience is beyond me. I remember the first time I used Vagrant (2011, Santa Monica California) like it was yesterday it was that impactful.
I never thought in a million years I would even think of ditching iTerm2 but when Ghostty dropped I installed it and fell in love.
Great question. For me it feels faster (anecdotally) and certain TUI components don’t break. It also is probably my bias of loving his work as well as everyone at work using it. Hive mentality I suppose.
On the very day ghostty refuses to load my theme because themes now start with an uppercase letter; the same day I'm no longer able to enter `^` (a caret) for some reason. Not to mention the multiple times where the clipboard suddenly and completely stopped functioning, in the last few weeks.
I love ghostty, but if it keeps suddenly failing for no apparent reason I might have to go back to wezterm.
Will there also be a React component? Or is this not intended for web frontends? I was wondering, because Vercel et al. were mentioned in the beginning.
I use ghostty daily now. Switched recently. In macOS I can re-map now caps lock to be cmd and it works for cmd+c. Everything else is great, sensible defaults and what's not easily customizable.
Gruvbox light theme looks great too.
The fact it's written in Zig is awesome too, if you ever question if Zig is ready, ghostty is your answer to that.
Not seeing myself going back. It's great experience.
Tip: if you combine your ghostty flow with aerospace, it's nearly perfect setup for your keyboard only experience on mac.
I want to use this to modernize vterm in Emacs. If I could only synchronize the terminal cursor and the Emacs point, and preserve lines as lines, not split them...
The core issue is that it's allocating a new tmux pane with the sole goal of mirroring line numbers; it would be nice if they synced up in the same pane, avoiding the above issue.
Piping it into neovim is an option that you can do on both neovim and zellij. zellij loses colors, and neovim is probably the best solution to this problem but then again I don't want to have to remember to turn on/off line numbers every time and I personally like one-off panes. Separation of responsibilities, I guess.
Long-winded rant to basically say: would a standard like this solve my issue easier? From what I understand of terminals, I would need to parse the underlying pty, maintain a scrollback buffer internally in the wrapper shim, and also be able to dynamically adjust toggling line numbers on/off.
If I'm doing this kind of translation, how "leaky" will the abstraction be until I'm basically re-implementing the logic in my middle layer, assuming that "for free" I can get the translation both in and out from the pty?
I've been trying to look closer at TUI tools, but that's what really bothered me. Given just how god awful the VT protocol is, you could get the state machine parsing correct, but the developer still has to learn basically every little quirk that was added over the years, no?
(And before someone makes a false equivalence, no, this isn't the case even with languages like c++ - I'm still learning quirks about it to this day, but I don't have to learn the entire thing to build proper, robust code. It does not seem the same with something like the VT protocol. So yes, I'm aware that some learning should take place, but I'm wondering how structured of a developer experience this will end up being.)
I have a confession: I don't know the difference between a console, terminal (-emulator?!?), shell, bash and all these things. It's all just a black window with text for me. I've never understood why people talk so much about git shell when my normal windows cmd/Powershell can do just the same git commands.
I'm also a prolific and successful software engineer. These two things shouldn't mix. So please tell me what I missed in life when these things are completely alien to me.
Really looking forward to this, writing my own personal editor in Ruby and not having a library for parsing terminal input is leading me to write my own kitty keyboard protocol parser (which ghostty implements) and having to hand-code lookup tables is driving me batty. I really don't like the idea of using an existing TUI framework as none of them actually implement the kitty protocol.
I recently ditched VS Code in favor of Neovim and thanks to Ghostty transition has been a success. As a Mac user I use the cmd key in tons of shortcuts and it just worked out of the box, no need to send weird escape sequences
82 comments
[ 4.9 ms ] story [ 94.9 ms ] thread1. https://github.com/neovim/neovim/issues/33155
Aside: I didn't realize Ghostty was written in Zig, wow. The first Zig-thing I'm aware of using on a regular basis. It's amusing the repository structure looks exactly like a Golang layout, haha.
https://github.com/ghostty-org/ghostty
Hopefully libghostty will be much more permissive. No dependencies (not even libC) is a good sign that will be true.
(written on a 2018 macbook pro running macOS 10.14.6, which still works great in every way)
Mitchell raised the issue himself two years ago: https://github.com/ghostty-org/ghostty/issues/189
Is there any particular reason?
Also, not sure if this is by default or it picked it up from my old iTerm2 configuration, but cmd+shift+up/down navigates through prompt lines so it's easy to find the start of a long command. My PS1 in zsh is:
Also I just tried Ghostty for the first time. With iTerm2 and the Zsh/Powerlevel10k theme, there's an extremely brief but perceptible lag from running a command and the render. In ghostty it feels actually instant.
I walked away thinking that no matter what they did, they'd probably be successful. I was extremely happy to find Ghostty and have been using it ever since.
However their financials are... LOL
Revenue US$583 million (2024)
Operating income US$−254 million (2024)
50% loss margin :-)))
There's an old Knuth quote:
And I think we're seeing more and more that these projects made with love are successful. That without the hyper fixation on money we can build good projects that make big changes in a world.In some sense I'm a bit envious of Mitchell but truthfully these types of things make me more question how we've constructed our society and economy. It shouldn't require one to start with wealth to be able to build things that have such an impact. What needs to be changed where we can live up to what Knuth proclaimed. I'm sure all of us have had experiences where were we given the time (and usually not much) we could make things so much better. But we make many sacrifices when we rush. Which leads to more good advice by Knuth
At what point do we push back? We see that the people we really look up to did things so differently. Knuth himself expressed how detail obsessed he was, and such a claim is common among the grey breads. Of course, things change, but are we creating a world with no wizards? Are we creating a world where we reward people for solving problems and making our lives easier? Or are we just maximizing some score of a pointless game?I'd love to live in a world with a thousand more Mitchells, following their passions without the burden of needing to justify decisions to a board who has no interest in quality. How do we create that world?
Like you said, what a legend. But, how do we make more legends?
I cannot imagine what he went through.
Hero.
I never thought in a million years I would even think of ditching iTerm2 but when Ghostty dropped I installed it and fell in love.
I love ghostty, but if it keeps suddenly failing for no apparent reason I might have to go back to wezterm.
FWIW I've using tip since the closed beta and never had major issues.
solution: write a new VT terminal parser to replace the other ten
result: we have eleven different VT terminal parsers
I've looked into it with a PiZero and some HATs but I'd like something made by smarter people. This would be perfect for that.
Ideally just some dip-switchs to set the terminal to emulate and set the display resolution.
Gruvbox light theme looks great too.
The fact it's written in Zig is awesome too, if you ever question if Zig is ready, ghostty is your answer to that.
Not seeing myself going back. It's great experience.
Tip: if you combine your ghostty flow with aerospace, it's nearly perfect setup for your keyboard only experience on mac.
Tmux copy mode is already great, my one gripe is no line numbers.
This script https://gist.github.com/Nimmidev/2cf4d5cc80dce32d0240ec7b3cf... is pretty good, but I still get frequent bugs with it, and also it just doesn't work in fullscreen mode (2 panes).
The core issue is that it's allocating a new tmux pane with the sole goal of mirroring line numbers; it would be nice if they synced up in the same pane, avoiding the above issue.
Piping it into neovim is an option that you can do on both neovim and zellij. zellij loses colors, and neovim is probably the best solution to this problem but then again I don't want to have to remember to turn on/off line numbers every time and I personally like one-off panes. Separation of responsibilities, I guess.
Long-winded rant to basically say: would a standard like this solve my issue easier? From what I understand of terminals, I would need to parse the underlying pty, maintain a scrollback buffer internally in the wrapper shim, and also be able to dynamically adjust toggling line numbers on/off.
If I'm doing this kind of translation, how "leaky" will the abstraction be until I'm basically re-implementing the logic in my middle layer, assuming that "for free" I can get the translation both in and out from the pty?
I've been trying to look closer at TUI tools, but that's what really bothered me. Given just how god awful the VT protocol is, you could get the state machine parsing correct, but the developer still has to learn basically every little quirk that was added over the years, no?
(And before someone makes a false equivalence, no, this isn't the case even with languages like c++ - I'm still learning quirks about it to this day, but I don't have to learn the entire thing to build proper, robust code. It does not seem the same with something like the VT protocol. So yes, I'm aware that some learning should take place, but I'm wondering how structured of a developer experience this will end up being.)
* https://sw.kovidgoyal.net/kitty/keyboard-protocol/#