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.
The nerds would do sooo much better for ourselves if we could build a momentum behind comments like this.
Finding mechanistic (& programmatic) sympathy counts for so so much! Shapes the arch of software so much! But it's such invisible unknown work to most people, not so overtly clear & obvious but something that constantly builds day after day, person after person, incremental 0.2% gains compounded by lack of friction.
As well as just promoting good practioners, it feels like discourse about software architecture has really fallen off. We are deep inside rabbit holes specific to this framework or that, and there's only occasional popping out to free air to bring back some observations from the burrows. Ideally we'd have many more volumes of Architecture of Open Source Applications (2011), for example, to really dive into what is, to give us some common referents to learn from and talk about. https://aosabook.org/en/
This is all so core, so worth getting deep on & looking how things are assembled, what the interfaces and modules and shapes look like, what the tradeoffs were. But it remains chiefly an arcane art, one that most developers much less most businesses haven't developed a refinement or taste for.
There's a few things like this but I'll give a pass because how new it is. Were this a mature project I'd be upset at incompetence, but given how young it is I think it's too early to be harsh.
Plus, they're very open about what they're doing and prioritizing. As another commenter said, it's coming soon. For the rest, open feature requests, you might have needs that others didn't think of or even realize they needed
To add... The missing scrollbars feel painful to me. I don't even want them for scrolling, really. I want the visual reference for:
"How much content is in this window"
and
"Where am I in that content"
I still use it daily but it means I have to switch tools for certain things, and reading log files or log output is one of the more common reasons I switch.
I should probably look into trying to get the scrollback info into my statusline, No idea how easy or hard that is - so if someone has done it, feel free to shoot me pointers.
Maybe I'm misunderstanding your request but do you not pipe outputs into a pager? (Less, more, batcat, etc) I feel like I'm probably not understanding the context though.
Same here, scroll bars are literally the one missing feature keeping me from making Ghostty my daily driver. But the release notes roadmap mentions they will add them for 1.3. Waiting with anticipation.
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?
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.
I had tried it briefly previously but in the last couple months I think I have made the permanent switch from iterm2. It's so much snappier and simpler and also reliably handles text reflowing when a long line wraps, which was a constant problem I had in iterm2, where it would insert fake newlines when copying out text that was wrapped.
I also like that I can have my config in a little plaintext file and just drop it onto a new computer and get the same keybindings. I am using the terminator keybindings for creating and navigating between split panes.
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?
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
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.
Since go 1.25 you can declare the what is the “root” of a go module, which is a good thing. Not everyone wants the top level directory filled with go files specially in a multi language repo. So this idea that /src is not good go directory will soon be outdated.
- No way (that I know of) to select previous output or specific string and copy with only keyboard shortcuts.
- No ⌘. sending CTRL-C (muscle memory and being advertised as native to the Mac is what one would expect).
- Fonts still don't render as nicely as in Terminal.app. I've fiddled with `font-thicken-strength` and it's close, but not quite. Probably impossible or very hard to replicate due to its Metal rendering nature, but when all you do is look at text all day, it matters.
(Surely this issue must've been discussed/debated elsewhere ad nauseum because it seems an odd design decision to leave out such a common macos binding...)
But having only used ghostty as-is and getting bamboozled by the copy paste situation, this is game changing. I was just going to wait till preferences had a GUI/TUI.. So thanks!
I've been delaying a major migration to NeoVim on [modern-terminal-I-can-never-decide-which] for years.
Wezterm, Ghostty, iTerm2. None is exactly perfect, so I just keep watching them develop.
Is there a blog post anywhere that explains why it has taken so long to get search working? Ghostty is such a nice app but that's such a fundamental feature that there has to be a good reason... It's the only thing keeping me on iTerm2.
I don't want to presume your use case, but Ghostty has a command for dumping the buffer to a file, which I use for processing output "too late" to use grep.
By the rollercoaster of points this post is experiencing, I may have expressed myself poorly.
To be clear, the concept of a modern, cross-platform Terminal core with native GUI implementations for each major vendor is amazing and I'm very glad it exists. It's just not quite there yet for me and I don't know if it ever will be. But I'm very excited by it and hopeful.
> (This is somehow fixed in 1.2 but it requires additional entry in the config for whatever reason. Can't it just work?)
"For whatever reason": because it requires modifying `ssh` and doing that by default is a really sketchy thing to do because it is a very security sensitive tool. No program (Ghostty included) should be mucking with that by default. We want users to be aware.
"Can't it just work?": No, because the entire mechanism is flawed, and I didn't invent the mechanism. It's like asking, "why must I drive to my destination, can't I just teleport?" The entire premise of the question is silly, and it's not the car's fault (Ghostty is the car in this example). For those who want to learn more about "the mechanism": read Ghostty's terminfo page, but also just do some light web searching on how terminfo works. Its a total nightmare.
I really wish that weren't the case, I really do. I promise its just as annoying to me as a user and more annoying to me as a maintainer to have to hear people complain about this repeatedly when I'm not doing anything wrong, personally. I'm playing by the rules. The rules are just bullshit.
We'll continue to make enhancements to improve this while we wait for Ghostty's terminfo to propagate to every machine in the world. It will, it'll just take... a long time. Next up we plan on introducing a `ghostty +ssh` command that you can drop-in replace most `ssh` usage with and it'll automagically just work.
Ouch, I did not expect my complaining would get a response from the author!
Just to be clear, I do think Ghostty is amazing piece of software and it's so fast that it's hard to believe, so thank you for the hard work.
> read Ghostty's terminfo page, but also just do some light web searching on how terminfo works. Its a total nightmare.
Oh, yea, I totally get that. I actually _did_ try to understand what the issue is, but gave up on that time-sink rabbit hole and decided I might give it another try once the xterm-ghostty is more popular.
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.
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.
Fast. Very fast. Good configuration and theming options too. Literally no lag, even with thousands of lines scrollback. It doesn't get in your way on your day to day terminal activities. Feels natural.
I think you’re thinking of TigerBeetle, not Clickhouse, which is a quite performant db with a fascinating simulation-tested story and proof of performance / safety.
I can’t figure out how to get the visidata frequency analysis histograms to render properly. Some render as blocks as expected but others are those diamond-question marks. I know it’s a silly hang up but it’s what’s keeping me on iterm. It’s seemingly impossible to search for (or at least I haven’t figured out the right keywords) to troubleshoot too.
I use ghostty on (my?) air mac that my brother gifted to me which was his previous device for coding / general purpose etc.
Ghostty is really good and I genuinely appreciate this.
Honestly, Might seem like a small thing but the fact that this doesn't even depend on libc seems to be a really great thing to me and I kinda cherish it!
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.
Do you consider yourself a neovim terminal power user?
I tried a while back to invert my workflow (from tmux driving neovim to neovim driving terminals) because I thought it might be easier to only ever have one buffer open for a given file, instead of attempting to open a file in a given pane only to realize that it's already open in a different neovim instance in a different pane.
When I was testing that stuff out I don't think I noticed particular issues with text reflow that would benefit from being solved by swapping to libghostty, rather my pain points were just about how to adjust to the different paradigm. I'd be curious to hear more about someone who is all in on Neovim embedded terminals (and possibly how libghostty might make it better).
I do indeed live in the terminal (all day due to work), but tmux adds too much value for me to do all terminal management in Neovim (tmux session-management being what I use most). I've just encountered too many visual "glitches" in the Neovim terminal to rely on it for everything. That's not to say, however, that I never use the built-in Neovim :terminal.
> I thought it might be easier to only ever have one buffer open for a given file, instead of attempting to open a file in a given pane only to realize that it's already open in a different neovim instance
I'd be curious to hear more about how tmux helps you — I tried it and besides keeping a permanent session open on a remote server to me I didn't find much use for it compared to regular terminal tabs
I use it daily locally, and find it amusing how many only think of it as being useful on remote servers (not to invalidate your use-case -- I'm just contrasting my own use). As a precursor, I view UNIX as my IDE, of which tmux is a part: this IDE runs on Windows (WSL2), macOS, Linux, and Android (Termux). That aside, here are a few reasons I find tmux to be useful in this concoction of tools:
- Session management. I've written custom scripts for myself around this (zoxide + fzf). If you want to see how this can be used, look at ThePrimagen's workflow. I don't use his scripts but he has a good demo of how he harnesses sessions.
- Unified scrollback management - easily search the scrollback, yank it, etc. My favorite thing to do is to yank part of the scrollback, then `Prefix+B,=` to list everything I've yanked (think of this like a "clipboard manager" specific to tmux), select an entry, and press `e` to edit it in `$EDITOR`.
- This one might be a stretch, but I tend to try and use only terminal tools (without being utterly insane) because then tmux can be my "tiling window manager" no matter what OS I'm on. Oh, I have to use Windows for work? Not to worry, tmux runs in WSL2, as do most of my preferred tools, so I feel mostly at home even though I normally really dislike Windows.
- It's scriptable. Read `man tmux` and use your imagination!
Notwithstanding any of that, there are cons, the most apparent one being that I am limited to text-based tools this way. An example of this: getting images to work in tmux, though many modern terminal emulators support them, is a huge pane, so I haven't bothered.
I think my problem is when I realize that I had unsaved changes open in a different neovim instance. If the file was not dirty in any other open neovim instances then I don't have the same problem.
I'm all in on Neovim terminals, having a remote development setup means it keeps my terminal with my neovim window (I use nvim-qt).
Also not sure how ghostty would help, haven't noticed text reflowing issues.
It's not bad, a little awkward getting used to:
- you might want a plugin to give you a "persistent" terminal across all tabs
- I still haven't found a way to clear scroll back while a command is running
- I had to set up mappings for easier exiting terminal mode (c-\ c-n really sucks)
- I had to set up events so whenever a terminal buffer is focused it immediately enters insert mode. While I love vim, I've never wanted modal editing in a terminal
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.
As someone who lives in the terminal, I can't say I've ever had the need to do that. It's only by reading the comments that I've realised that there's no search in Ghostty.
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.
Don't you ever need to search through a program's output; e.g., to find what failed? Otherwise you'll have to remember to tee everything to a file every time you run a command.
You know, I can't remember ever doing this in a terminal. Not because it doesn't sound useful (it sounds VERY useful), it just sort-of never occurred to me as a thing you could do. It's just muscle memory at this point to rerun the command with a pipe to a pager and search there.
I guess that's what I always do. or grep or awk or sed.. Maybe if a program takes hours to return it's helpful to be able to search the terminal, but otherwise i'm just pushing up with my arrow and `| grep -v UGLY | grep BEAUTIFUL`
Someone call @keithw. He put a tremendous amount of brainpower into getting the Unicode side of this puzzle "right" (or, as "right" as it is possible to be) when he wrote mosh. I'm sure he and Hashimoto could have a grand old (but zero-width non-joining) conversation!
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...
vterm flickers a lot with any busier TUI. Claude Code sucks in vterm. I'd also really look forward to using libghostty to try an alternative to vterm in emacs.
Serial port or serial port over "ethernet"[1] (technically it's 8p8c[2]).
My router doesn't have a video port, but it does have a dummy terminal port. I had to scrounge a video card for my server to set it up, but it does have a serial port [3]. So that would have been nice.
Also would be nice for a modern remake of dumb terminal with abandoned monitors.
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.
Have you released the project? I am somewhat curious!
Also I just went from a somewhat (niche?) languages rabbit hole and I refound crystal / crystal is in my mind currently..
So what are your thoughts on using something like crystal instead of ruby because they are similar in what I know and crystal can create a static binary while being (faster?) than ruby
Ghostty has the capability to parse Tmux control mode (and this blog post is about libghostty-vt). Ghostty the GUI is missing the capability to map that to GUI elements. But Ghostty understands Tmux control mode today: https://github.com/ghostty-org/ghostty/blob/main/src/termina...
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.)
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.
libvterm is great. Ghostty supports many more features, but the most important I hear from other libvterm users are that it's missing scrollback and reflow on resize, which are both pretty major pieces of functionality.
... is the perfect example of why "align continuation lines to the open bracket" is the absolute worse option versus the simpler, consistent and only logical choice of "align continuation lines with an extra indentation", aka
Indeed. Also note this isn't the real public C API. This is, as I noted in the blog post as a disclaimer, an internal-only C API so it is admitedly very ugly.
(I assume you know this, just adding context for other readers)
Yep, sorry in my mind I was going to mention it (with "even if it's only me seeing private code like this" or something similar) and later forgot after some edits to fix the formatting...
Anyway, I hope it doesn't get lost that this comment was only meant to be half informative, half public statement, and half a light joke :)
Total newb here - but lets say i want to make a terminal based video game (think old school text / visuals / menus), will something like Libghostty be something relevant to that?
I imagine if you wanted to make a self-contained application so non-command-line users can play it, then maybe you could use it. Otherwise, probably out of scope of the game itself.
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
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.
> The terminal seems simple at first (you type in commands and run them! no big deal!), but the more you learn, the more you notice a million little inconsistencies (why does pressing the arrow keys sometimes print out "^[[D"? why does selecting text sometimes not work? why are the colours sometimes unreadable?) that make it feel like an inscrutable black box. And it often doesn’t feel worth it to learn more because documentation about the terminal is so fragmented and full of obscure jargon.
> But! Understanding just a little more about the terminal can make your experience WAY better. You can quickly recognize what’s causing a problem (“oh, my arrow keys aren’t working because this is one of those annoying REPLs that doesn’t support arrow keys!”) and immediately fix it (“I’ll use rlwrap!). Or you can turn “wow, this text is unreadable” into “oh, my terminal emulator is responsible for colours! I’ll just go into the settings and reconfigure my colours!”.
Mitchell and bellard and to somewhat degree fwsgonzo (you might not know him but I absolutely like his work on libriscv, the game he's working and the kvm sandbox which he's working on too) are my definitions of literal coding chads.
People should really measure coding proficiency as being 10% of these guys or some fraction instead of whatever metric they are using now (slightly kidding ofc)
They are the 10x developers and I feel like this sentiment is echoed all across the industry
The nix package for ghostty is broken/unavailable on MacOS at the moment, but installing the brew cask (`brew install --cask ghostty`) and a basic config file:
Got me almost everything I used from iTerm2. Nerdfont just worked (in iTerm I think you have to use the `Use a different font for non-ASCII text` setting)
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.
I don't think its really practical to do so. wasm can't directly access the canvas or webgpu contexts. it has to route date through js anyways so you will always have js code in the loop here.
You literally, and I mean literally read my mind dear random stranger down to the wording. Micro is definitely underrated.
Micro is a truly goated software. I mean, it can genuinely replace vscode for small scale editing in the context of shopify that the parent comment was referring to.
It also helped me in physics when I had to remember the units like 10^-6 being micro, 10^-9 being nano etc. and the funny thing is that I used to remember it in the start by seeing I am not sure if it was on micro's github or something but it was a comment on how micro has more features than nano and thus it's name.
So like for some time I definitely felt like I was thinking of micro software, then nano and making the feature comparison to find micro to be larger than nano.
Might seem kinda niche but I ABSOLUTELY LOVE MICRO. Its the one software that I install everywhere, even on my android phone by using UserLand[1] with alpine linux.
I tried writing python code on my phone and it was definitely pleasant thanks to micro.
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.
License: This is a perfect example of a project I think should be LGPL licensed and not MIT. Why? Let's suppose he's successful and libghostty become ubiquitous. What happens then? At some point you will be using a closed source version of it on Windows or MacOS or whatever - how do you know it's not logging in the background? The potential for this exists today in every commercial terminal emulator, but why make it easy to take something ubiquitous and backdoor it? On the flip side, what's a good reason for it to be MIT licensed?
Am I missing something? The LGPL only applies to the library itself--you can dynamically link to it from proprietary code. So in this hypothetical scenario, someone could just write a terminal emulator (or IDE, or what have you) that dynamically links to libghostty and put as much telemetry in it as they wanted, couldn't they?
No, you're not but I did! So GPL then. Maybe I just wanted to make up a scenario. I'm not sure why MIT/BSD have become so popular, they have their place but I don't think they have any place in software infrastructure.
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.
The software world really needs people like him to drive things forward.
Finding mechanistic (& programmatic) sympathy counts for so so much! Shapes the arch of software so much! But it's such invisible unknown work to most people, not so overtly clear & obvious but something that constantly builds day after day, person after person, incremental 0.2% gains compounded by lack of friction.
As well as just promoting good practioners, it feels like discourse about software architecture has really fallen off. We are deep inside rabbit holes specific to this framework or that, and there's only occasional popping out to free air to bring back some observations from the burrows. Ideally we'd have many more volumes of Architecture of Open Source Applications (2011), for example, to really dive into what is, to give us some common referents to learn from and talk about. https://aosabook.org/en/
This is all so core, so worth getting deep on & looking how things are assembled, what the interfaces and modules and shapes look like, what the tradeoffs were. But it remains chiefly an arcane art, one that most developers much less most businesses haven't developed a refinement or taste for.
Plus, they're very open about what they're doing and prioritizing. As another commenter said, it's coming soon. For the rest, open feature requests, you might have needs that others didn't think of or even realize they needed
"How much content is in this window"
and
"Where am I in that content"
I still use it daily but it means I have to switch tools for certain things, and reading log files or log output is one of the more common reasons I switch.
I should probably look into trying to get the scrollback info into my statusline, No idea how easy or hard that is - so if someone has done it, feel free to shoot me pointers.
I always was on the camp of "tail -f file.log" but since discovering this app, I saw the light.
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 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.
I also like that I can have my config in a little plaintext file and just drop it onto a new computer and get the same keybindings. I am using the terminator keybindings for creating and navigating between split panes.
However their financials are... LOL
Revenue US$583 million (2024)
Operating income US$−254 million (2024)
50% loss margin :-)))
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
- Still no ⌘F for find.
- No way (that I know of) to select previous output or specific string and copy with only keyboard shortcuts.
- No ⌘. sending CTRL-C (muscle memory and being advertised as native to the Mac is what one would expect).
- Fonts still don't render as nicely as in Terminal.app. I've fiddled with `font-thicken-strength` and it's close, but not quite. Probably impossible or very hard to replicate due to its Metal rendering nature, but when all you do is look at text all day, it matters.
This comment sounded familiar[0]. :) For what it's worth, still possible with:
[0]: https://news.ycombinator.com/item?id=42889411But having only used ghostty as-is and getting bamboozled by the copy paste situation, this is game changing. I was just going to wait till preferences had a GUI/TUI.. So thanks!
I've been delaying a major migration to NeoVim on [modern-terminal-I-can-never-decide-which] for years. Wezterm, Ghostty, iTerm2. None is exactly perfect, so I just keep watching them develop.
There's a lot happening in the Ghostty app though, check out the 1.2 release notes
keybind = ctrl+alt+shift+o=write_scrollback_file:open
less [cmd+shift+f] [enter]
You can use grep similarly.
Wait wait wait, this is a shortcut in Mac??
The solution is on their website:
> infocmp -x xterm-ghostty | ssh YOUR-SERVER -- tic -x -
I mean... I could learn what it does, but no way on earth I am going to be typing something like that every time I want to ssh somewhere.
(This is somehow fixed in 1.2 but it requires additional entry in the config for whatever reason. Can't it just work?)
"For whatever reason": because it requires modifying `ssh` and doing that by default is a really sketchy thing to do because it is a very security sensitive tool. No program (Ghostty included) should be mucking with that by default. We want users to be aware.
"Can't it just work?": No, because the entire mechanism is flawed, and I didn't invent the mechanism. It's like asking, "why must I drive to my destination, can't I just teleport?" The entire premise of the question is silly, and it's not the car's fault (Ghostty is the car in this example). For those who want to learn more about "the mechanism": read Ghostty's terminfo page, but also just do some light web searching on how terminfo works. Its a total nightmare.
I really wish that weren't the case, I really do. I promise its just as annoying to me as a user and more annoying to me as a maintainer to have to hear people complain about this repeatedly when I'm not doing anything wrong, personally. I'm playing by the rules. The rules are just bullshit.
We'll continue to make enhancements to improve this while we wait for Ghostty's terminfo to propagate to every machine in the world. It will, it'll just take... a long time. Next up we plan on introducing a `ghostty +ssh` command that you can drop-in replace most `ssh` usage with and it'll automagically just work.
Just to be clear, I do think Ghostty is amazing piece of software and it's so fast that it's hard to believe, so thank you for the hard work.
> read Ghostty's terminfo page, but also just do some light web searching on how terminfo works. Its a total nightmare.
Oh, yea, I totally get that. I actually _did_ try to understand what the issue is, but gave up on that time-sink rabbit hole and decided I might give it another try once the xterm-ghostty is more popular.
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.
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 live in vim and after about 30 seconds of checking ghostty out I switched from iTerm2 to ghostty for good. No regerts.
I am not a ghostty user, but I think it has a setting for that, if you can figure out which font iTerm2 is rendering those glyphs with.
Ghostty is really good and I genuinely appreciate this.
Honestly, Might seem like a small thing but the fact that this doesn't even depend on libc seems to be a really great thing to me and I kinda cherish it!
Thanks! Have a nice day!
1. https://github.com/neovim/neovim/issues/33155
I tried a while back to invert my workflow (from tmux driving neovim to neovim driving terminals) because I thought it might be easier to only ever have one buffer open for a given file, instead of attempting to open a file in a given pane only to realize that it's already open in a different neovim instance in a different pane.
When I was testing that stuff out I don't think I noticed particular issues with text reflow that would benefit from being solved by swapping to libghostty, rather my pain points were just about how to adjust to the different paradigm. I'd be curious to hear more about someone who is all in on Neovim embedded terminals (and possibly how libghostty might make it better).
> I thought it might be easier to only ever have one buffer open for a given file, instead of attempting to open a file in a given pane only to realize that it's already open in a different neovim instance
This is not a problem in my config:
Since `'autoread'` is by default `on` in Neovim, this seamlessly reloads the buffer if the underlying file has been updated on disk.- Session management. I've written custom scripts for myself around this (zoxide + fzf). If you want to see how this can be used, look at ThePrimagen's workflow. I don't use his scripts but he has a good demo of how he harnesses sessions.
- Unified scrollback management - easily search the scrollback, yank it, etc. My favorite thing to do is to yank part of the scrollback, then `Prefix+B,=` to list everything I've yanked (think of this like a "clipboard manager" specific to tmux), select an entry, and press `e` to edit it in `$EDITOR`.
- This one might be a stretch, but I tend to try and use only terminal tools (without being utterly insane) because then tmux can be my "tiling window manager" no matter what OS I'm on. Oh, I have to use Windows for work? Not to worry, tmux runs in WSL2, as do most of my preferred tools, so I feel mostly at home even though I normally really dislike Windows.
- It's scriptable. Read `man tmux` and use your imagination!
Notwithstanding any of that, there are cons, the most apparent one being that I am limited to text-based tools this way. An example of this: getting images to work in tmux, though many modern terminal emulators support them, is a huge pane, so I haven't bothered.
Also not sure how ghostty would help, haven't noticed text reflowing issues.
It's not bad, a little awkward getting used to:
- you might want a plugin to give you a "persistent" terminal across all tabs
- I still haven't found a way to clear scroll back while a command is running
- I had to set up mappings for easier exiting terminal mode (c-\ c-n really sucks)
- I had to set up events so whenever a terminal buffer is focused it immediately enters insert mode. While I love vim, I've never wanted modal editing in a terminal
Mitchell raised the issue himself two years ago: https://github.com/ghostty-org/ghostty/issues/189
but really not all features can make it in 1.0
Is there any particular reason?
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.
My router doesn't have a video port, but it does have a dummy terminal port. I had to scrounge a video card for my server to set it up, but it does have a serial port [3]. So that would have been nice.
Also would be nice for a modern remake of dumb terminal with abandoned monitors.
[1] https://www.cabling-design.com/references/pinouts/EIA-TIA-56...
[2] https://en.wikipedia.org/wiki/Modular_connector#8P8C
[3] https://serverfault.com/a/529159
* https://sw.kovidgoyal.net/kitty/keyboard-protocol/#
Also I just went from a somewhat (niche?) languages rabbit hole and I refound crystal / crystal is in my mind currently..
So what are your thoughts on using something like crystal instead of ruby because they are similar in what I know and crystal can create a static binary while being (faster?) than ruby
I am just somewhat curious to know!
Oh oh oh!!!
> https://github.com/ghostty-org/ghostty/issues/1935
awww...
(while ghostty can parse Tmux Control Mode stuff, it doesn't actually implement the full feature. My dependence on iTerm2 remains...)
Curiously, it hasn't been discussed on HN before, so I started a thread to get HNers' thoughts on it:
https://news.ycombinator.com/item?id=45351378
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.)
Example: Neovim is considering the switch to libghostty-vt when its ready. https://github.com/neovim/neovim/issues/33155
The function signature of [1] ...
(^^^ probably not readable in small screens)... is the perfect example of why "align continuation lines to the open bracket" is the absolute worse option versus the simpler, consistent and only logical choice of "align continuation lines with an extra indentation", aka
in Clang-Format [2].[1]: https://github.com/ghostty-org/ghostty/blob/f97518cc10059918...
[2]: https://clang.llvm.org/docs/ClangFormatStyleOptions.html#ali...
(I assume you know this, just adding context for other readers)
Anyway, I hope it doesn't get lost that this comment was only meant to be half informative, half public statement, and half a light joke :)
https://github.com/deadpixi/libtmt
> The terminal seems simple at first (you type in commands and run them! no big deal!), but the more you learn, the more you notice a million little inconsistencies (why does pressing the arrow keys sometimes print out "^[[D"? why does selecting text sometimes not work? why are the colours sometimes unreadable?) that make it feel like an inscrutable black box. And it often doesn’t feel worth it to learn more because documentation about the terminal is so fragmented and full of obscure jargon.
> But! Understanding just a little more about the terminal can make your experience WAY better. You can quickly recognize what’s causing a problem (“oh, my arrow keys aren’t working because this is one of those annoying REPLs that doesn’t support arrow keys!”) and immediately fix it (“I’ll use rlwrap!). Or you can turn “wow, this text is unreadable” into “oh, my terminal emulator is responsible for colours! I’ll just go into the settings and reconfigure my colours!”.
https://youtu.be/07Q9oqNLXB4?si=FthNcZSYQSNnT0mP
He has side projects that would make careers for most of us.
People should really measure coding proficiency as being 10% of these guys or some fraction instead of whatever metric they are using now (slightly kidding ofc)
They are the 10x developers and I feel like this sentiment is echoed all across the industry
The nix package for ghostty is broken/unavailable on MacOS at the moment, but installing the brew cask (`brew install --cask ghostty`) and a basic config file:
```
font-family = Monaco
theme = dark:Catppuccin Frappe,light:Catppuccin Latte
```
Got me almost everything I used from iTerm2. Nerdfont just worked (in iTerm I think you have to use the `Use a different font for non-ASCII text` setting)
Micro is a truly goated software. I mean, it can genuinely replace vscode for small scale editing in the context of shopify that the parent comment was referring to.
https://micro-editor.github.io/
It also helped me in physics when I had to remember the units like 10^-6 being micro, 10^-9 being nano etc. and the funny thing is that I used to remember it in the start by seeing I am not sure if it was on micro's github or something but it was a comment on how micro has more features than nano and thus it's name.
So like for some time I definitely felt like I was thinking of micro software, then nano and making the feature comparison to find micro to be larger than nano.
Might seem kinda niche but I ABSOLUTELY LOVE MICRO. Its the one software that I install everywhere, even on my android phone by using UserLand[1] with alpine linux.
I tried writing python code on my phone and it was definitely pleasant thanks to micro.
[1]:https://github.com/CypherpunkArmory/UserLAnd
solution: write a new VT terminal parser to replace the other ten
result: we have eleven different VT terminal parsers
https://xkcd.com/927/
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.
No, you're not but I did! So GPL then. Maybe I just wanted to make up a scenario. I'm not sure why MIT/BSD have become so popular, they have their place but I don't think they have any place in software infrastructure.