<3 This has been a work of passion for the past two years of my life (off and on). I hope anyone who uses this can feel the love and care I put into this, and subsequently the amazing private beta community (all ~5,000 strong!) that helped improve and polish this into a better release than I ever could alone.
Ghostty got a lot of hype (I cover this in my reflection below), but I want to make sure I call out that there is a good group of EXCELLENT terminals out there, and I'm not claiming Ghostty is strictly better than any of them. Ghostty has different design goals and tradeoffs and if it's right for you great, but if not, you have so many good choices.
Shout out to Kitty, WezTerm, Foot in particular. iTerm2 gets some hate for being relatively slow but nothing comes close to touching it in terms of feature count. Rio is a super cool newer terminal, too. The world of terminals is great.
I’ve posted a personal reflection here, which has a bit more history on why I started this, what’s next, and some of the takeaways from the past two years. https://mitchellh.com/writing/ghostty-1-0-reflection
Just make sure not to get caught in the pitfall that is maximum render speed, which can lead to missing out on efficiency during slow and partial rendering.
Missing damage tracking, always painting everything (even when the window is a full 4k monitor), etc. kills performance and input latency when dealing with realistic redraw workloads like text editing, blinking cursors and progress bars. Much too often to terminals worry only about the performance of `cat /dev/urandom`...
> kills performance
And battery.
I gave up on alacritty because it was always using the dedicated graphics card of my MacBook and there was no reasonably way to use the integrated graphics card because it was “low performance”.
- Ghostty does vsync by default and supports variable refresh rates (DisplayLink). If you're on battery and macOS wants to slow Ghostty down, it can and we respect it.
- Ghostty picks your integrated GPU over dedicated/external
- Ghostty sets non-focused rendering threads as QoS background to go onto E-cores
- Ghostty slows down rendering significantly if the window is obscured completely (not visible)
No idea if Alacritty does this, I'm not commenting about that. They might! I'm just talking from the Ghostty side.
That's a great approach.
Not sure on the current state of Alacritty, but a few years back the suggested solution for users interested in battery performance was to switch to a different terminal emulator: https://github.com/alacritty/alacritty/issues/3473#issuecomm...
I, a person who don't care about battery performance one iota (because my computer has no battery), love this answer and approach. Not every software is for everyone, and authors drawing a line in the sand like that works out better for everyone in the long-term, instead of software that kind of works OK for everything.
In some cases yes. In this case, in my opinion it can be strictly wrong.
The GPU requirements of a terminal are _minuscule_ even under heavy load. We're not building AAA games here, we're building a thing that draws a text grid. There is no integrated GPU on the planet that wouldn't be able to keep a terminal going at an associated monitor's refresh rate.
From a technical standpoint, there is zero downside whatsoever to always using the integrated GPU (the stance Ghostty takes) and plenty of upside.
More than happy for software authors to draw a line in the sand - I’ve done that myself too.
I just find myself on the other side of the line for Alacritty.
This is the Alacritty answer to a lot of queries. I took the advice, eventually.
Yep. That comment was when I stopped using Alacritty.
> - Ghostty slows down rendering significantly if the window is obscured completely (not visible)
About this. For whatever reason, I often end up with foreground windows (e.g. Chrome) covering the background window entirely, except for a sliver a few pixels wide.
Would Ghostty handle this case? I don't believe there's any point in full-speed rendering if less than a single line of text is shown, but the window isn't technically obscured completely.
We rely on the OS to tell us when we're obscured, and macOS will only tell us if the window is fully obscured (1 pixel showing is not obscured).
can i configure it to run on dedicated? im on desktop, power consumption is not an issue.
> - Ghostty sets non-focused rendering threads as QoS background to go onto E-cores
Assuming you're referring to Apple Silicon chips, how does Ghostty explicitly pin a thread to an E-core? IIRC there isn't an explicit way to do it, but I may be misremembering.
The QoS influences the core threads are placed on https://developer.apple.com/documentation/apple-silicon/tuni....
You can tell something to run on e-core just not p-cores
> Missing damage tracking, always painting everything (even when the window is a full 4k monitor),
Out of curiosity, what GPU accelerated terminal does this.
+1, no idea.
But maybe to add a little bit of context, "damage tracking" means for example, that if there is any ongoing animation (like a spinner), then only a small part of the screen will be re-rendered (with proper vertex-time scissors, so only relevant pixels will be computed). I am not sure if it makes sense in the context of a terminal emulator, but it's certainly a big issue for any non-toy GUI toolkits.
GPUs are incredibly fast parallel computers, so you will likely not observe any perf difference (unless you need order-dependent transparency which you don't), but it might improve your battery life significantly.
No, damage tracking is important as it about reporting that you only updated that spinner, which means that your display server also knows to only redraw and repaint that area, and in turn that your GPU knows during scanout that only that area changed.
Without, even if you only redrew your spinner, your display server ends up having to redraw what might be a full screen 4k window, as well as every intersecting window above and below until an opaque surfaces are hit to stop blending.
Well it sounds like ghostty is like all the other major GPU terminal emulators (unless you know of a counterexample) and does full redraw, though it appears to have some optimizations about how often that occurs.
The power issue might be true in some cases, but even as foot’s own benchmarks against alacritty demonstrate, it’s hyperbolic to say it “kills performance”.
We do a full redraw but do damage tracking ("dirty tracking" for us) on the cell state so we only rebuild the GPU state that changed. The CPU time to rebuild a frame is way more expensive than the mostly non-existent GPU time to render a frame since our render pipeline is so cheap.
As I said in another thread, this ain't a AAA game. Shading a text grid is basically free on the GPU lol.
Right, input latency is what matters for me. I'm not seeing whether they've measured that in the docs/on Github.
He mentions input latency[1] as one of 4 aspects of being fast that were considered during development. I’m not aware of how that was tested, but would trust that it outperforms Iterm2 in that regard.
Congrats on your 1.0 release! Building a term from scratch is no small task. And it looks like after 2 years you already have something I'm seriously considering switching to. That's seriously impressive. And though I'm mostly a Linux supremacist, I genuinely appreciate and respect your dedication to providing native applications on all major platforms. I see too many projects do one of two things: only support one platform at first, with some vague promise of doing others in the future left unfulfilled for years. Or going the easy route of using electron or some other cross-platform toolkit, getting cross-platform support at the cost of a significantly worse experience. There is no substitute for doing the extra work, at the end of the day, and you're already well on your way there at such an early point. Again, I'm impressed!
Now, the one thing I've coveted for years is a linux term with tmux control mode support, ever since I used iterm2 during my short tenure as a Mac user. I can see from your github issues that this is in the works(https://github.com/ghostty-org/ghostty/issues/1935), which is great. It looks like a lot of the necessary UI elements are already in place, as well as partial support for the control mode protocol. Do you have any idea how far off this is from being completed? I don't wanna make demands or anything, I know this is a passion project with lots of things still to work on. As far as I know(and I look around quite often) control mode support is still something no existing term for linux supports. Being the first could drive a lot of adoption! I'd also like to offer my help in pushing it over the goal line. I haven't touched Zig, but I'm a polyglot with plenty C experience and Im highly motivated to bring this feature to my Linux systems. Some guidance on things I might do to help would be welcome. The final 3 points of the checklist don't have much detail provided.
Again, no pressure, thanks for all your amazing work, and good luck with continued development!
This. To add some words why this is important:
Given the remote-first container-based world we're heading towards, decoupling UI (terminal emulator) from its "backend" (tmux, code-server) is a great design decision, which I think will ultimately define what the "next generation" of terminal emulators is. Imagine being able to open tabs directly on remote host, reconnect without losing state, etc, all while using native UI (so Cmd+T to open new tab, Cmd+F to search, etc). Productivity game changer, which currently only the iTerm2 users can fully enjoy.
Ptyxis (putting its backend in running containers), WezTerm (native handling of ssh sessions) and VSCode's terminal (starting a proprietary code-server binary and connecting to its TCP port) have reached some of this functionality, but in their design they need some out-of-band mechanisms to handle the connections, ultimately limiting the scenarios they can handle.
Meanwhile tmux -CC [0] and ht [1] are sending both their control channel and data channel over the opened terminal itself (in-band), making them flexible enough to support any configuration. Something complex like `ssh jumpbox -- ssh prod -- podman exec -it prod /bin/bash -- tmux -CC` should just work, as if everything was running on your local machine.
> Given the remote-first container-based world we're heading towards
You might want to expand on who "we" are here, because to me it seems to be a very small section of developers who want a "remote-first" experience and most (if not everyone) I speak with want software and tools that work local/offline-first, including our dear development environment.
If a tool requires a internet connection to work (so this "remote-first container-based world" you mention), I don't think either me nor many of the developers I know would even give it a try, because we need to be able to use our tools regardless if we have a working internet connection and/or the service-provider has downtime.
In fact, the only ones I know who are using a "remote-first" environment are developers who are forced to do so by their employer, and it's not a short-list of complaints about it when we meet over beers.
Good point, I also want things to work offline. By "remote" here I was also thinking of scenarios like:
- Connecting from Windows/macOS host to a local VM
- Connecting to a build server over LAN (I have a beefy PC but prefer to work from my couch)
Both work offline just fine, but from tooling perspective you are connecting to remote host over the network
Not very small; most corporate non-Windows development uses containers, I'd bet on the ratio above 90%.
Not that developers want remote-first experience, but they face it. Containers in this regard behave like remote systems, even when run locally. A tool that helps juggle multiple remote contexts in a sane way may be very helpful. Say, tmux does a lot to help, but more is of course possible.
I love this page in your docs:
https://ghostty.org/docs/about
Clear, friendly, modest, respectful and with the right balance of detail vs overview.
Congratulations on your launch.
I'm not sure why they couldn't put that on the front page. Or at least on the front page of the documentation.
As it stands now, the front page is pretty useless if you never heard of ghostty. It's a ghost in a terminal? And there's tty in the name.... so is it a program to show ghosts in your terminal?
Absolutely agree, even if it was just the tagline on the first page of the documentation - "Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration." - underneath the "screenshot" and above the buttons on the homepage.
I'd never heard of it before today, so yeah, my first thought was exactly what you postulated. "Cool? Maybe it's a tool for generating animations in the terminal?"
*edit - oh, no Windows support for now (my hands are tied at work).
On mobile I thought this thing was some ascii art game for a hot minute before I tried clicking on the download link. Seems silly to admit that but there you have it.
For those interested, the link below from Mitchell's blog explains the different goals he's trying to reach, compared to other terminal emulators.
How you've managed to communicate effectively with so many people who were using the beta version to craft the final release is beyond me! I downloaded it last night, wrote one line of theme configuration (I picked the batman theme). and For me it just works fine and faster than any other terminal emulator I've ever worked with. Also great with 'less' and 'tmux'. I just switched to 'Ghostty'! so thank you.
Just downloaded it because of the animation on the site. How did you make that? it's cute.
The terminal is good. I don't have any issues with the stock mac os terminal app but I'll give yours a go for a bit. I can't tell exactly how, but it does feel faster - I'm not sure exactly how it is but it looks like it renders text faster.
Stock Terminal.app doesn’t do 256 or 24-bit colour, that’s really the big thing that drew me to ghostty.
If the stock Terminal was updated to support nerd fonts, extra colors and horizontal/vertical panes - then would switch back to it in a jiffy.
Lower inout latency can make something feel faster. I haven't measured it but it's possible that's why with ghostty
Looks great. Switching from wezterm and kitty before that, and the native feel on macOS is indeed better than those emulated tabs. Also it is really quite zero config where to me it seems only one line of color theme is needed, together with setting TERM for ssh. (Default font happens to be mine.) Bundling so much color theme felt a bit waste of space, but it is nice that I don’t need to define them myself which also makes switching theme tedious. I also love to see it lands at 1.0 where features, documentation, and promotional materials seem polished already.
Chances are, it will become my default terminal in 2025!
The only nitpicking is the doc does not seem to have a search function. It would be great if I can search color or ssh and find the relevant page address that immediately, without navigating the tree or relying on external search engines.
Use the browser's search on the page?
Search through the whole documentation, not just current page.
I haven't heard of Ghostty before today. I'm reading the docs; but what are the main selling points?
Personally, I've used Terminal.app (for a bit), iTerm (for a long while), Konsole (in the past, on Linux) and more recently I standardized on Alacritty (macOS) and Kitty (Linux). GPU acceleration puts it in the same general bin as my current toolchain, but your comment alludes to it pulling in some concepts from iTerm, possibly -- is that the case?
Thank you!
I've been a beta tester from very early on. I came for the performance but stayed for the stability. I've only had a rare few crashes and all but one was a duplicate in the bug tracker.
I thought I needed search but as Mitchell put it, not a 1.0 feature. Ripgrep was always the answer.
Very happy to share the ghostty experience with the world!
Search was the first thing I noticed it was lacking. I hope it can be added at some point, sometimes you can't just run a command again to grep it.
Mitchell said it is planned in a recent interview on the Changelog podcast[1], just not in time for 1.0.
Guessing y’all mean search of the scrollback buffers?
(probably, I was also looking for that)
The kitty method of piping the scroll back buffer to a pager is more general - it also seems like a quick fix to achieve this desired feature.
I really like how Kitty handles search. I thought it was a hack at first - then came to realize why re-implement search if less works better?
Thanks so much for this. I really enjoy using it and I also refer to the source code quite a bit as I'm trying to get more familiar with Zig :)
How do you plan on sustaining the project? Do you have enough committers so you’ll not burn out? Will you need support? Is there a way to donate? I guess what I’m getting at is what is the long term sustainability work around this?
Discussed near the last part of an earlier post.
“… exploring not-for-profit structures to help ensure the long-term sustainability of Ghostty.”
Thank you!!! Glad to see this.
I think you've done an excellent job running the community for Ghostty and it is a prime example of how to do it right. From the Discord to Github repos you've been a class act all the way through and have pushed folks to be good, civil internet denizens. Much respect.
If anyone cares to search through Github, they will see loads and loads of Issues and PRs created by Mitchell in many of the related Open Source projects that Ghostty uses/references. From zig to kitty to supporting libraries, Mitchell has been trying to get the terminal community working together and have some sort of standards. A lot of them are like "X does this, Y does that, why are you doing it this way? Can we all do it this way?" and then having Ghostty follow the most reasonable solution (or supporting several!).
Just built this from source on Fedora and I have to say the experience even for building-from-source is flawless. Immediately replaced Kitty for me; it feels smoother and faster. Amazing work.
Alacritty on macOS and Linux user here (Windows Terminal on Windows due to easily different shells available, formerly used iTerm2 on macOS). I make up for lack of tabs with zellij locally (tmux remotely). Also allows me to relog or close/update Alacritty. I will give Ghostty a whirl but why no shout out to Alacritty? Which features am I missing out on?
Ghostty's community is much nicer compared to Alacritty :)
I’m trying to figure out the same thing, sounds like just tabs?
Thank you for making this. Does it support quake mode? It's hard to tell looking at the docs.
From https://ghostty.org/docs/features:
> macOS
> Quick Terminal: Lightweight terminal that animates down below the menu bar for instant access without interrupting work.
It does, natively.
I've been looking forward to it for a while, I'm really happy about this. Thanks for your work on this project.
I'm a fan of your work! I'm curious about how you decided to work on building a terminal for your next project among your other ideas. If you have time later, could you share your main motivation with us or link to an existing post if you already mentioned it elsewhere?
You've saved me an immeasurable amount of time and sanity over the last few years with the tools you've been building, and simply put: thank you.
I'm extremely excited to give Ghostty a whirl.
> Ghostty has different design goals and tradeoffs and if it's right for you great, but if not, you have so many good choices.
I was looking on the website to try and understand this more but couldn’t find any information. Perhaps I missed it?
Looks cool man.
Does it have a way to do tabs, and split terminal vertical and horizontal? Those are the only features keeping me on Terminator.
I've tried Tmux, but it isn't the same, so please commenters, avoid from the suggestion.
Yes we have both as native UI elements.
Congratulations.
On the cross-platform library, I wonder why "libGhostty" and not libTerminal. Which seems like a more appropriate in term of library?
Calling it libTerminal might be confusing. There are other terminal emulation libraries—for example libvterm[1], notably used to power the embedded terminal in Neovim.[2]
Shoutout to you sir for Shouting out the other terminals. It’d be easy for someone of your fame and talent and history to ride the hype to the GOAT of all terminals. But you stayed humble. Props.
Congrats Mitchell! It has been really cool to see Ghostty progress as a project, and I've enjoyed having it as my daily driver these past few years :)
Thank you for building this! I’ve loved using this over the last two months or so and really appreciate the work you’ve put into it.
I’ve been a very happy iTerm2 user and support the dev on GitHub Sponsors (and I’ll continue to do that), but I love your commitment to making a fast, native app (and cross platform, no less) and really appreciate this very obvious labor of love that has also been really interesting to watch from afar as the development has progressed!
super cool!
kitty has been my default for a few years now— highly superficial, but my designer side landed on kitty as it was one of the few that supports ligatures by default, specifically for the fira code font for my bias.
does ghostty support ligatures?
looks like it does! https://ghostty.org/docs/config/reference#font-feature
not only does it support them, but the default font provides them. although it splits the ligature in half if your cursor is in the middle of it which feels a little weird to me
Terminals are always welcome :) I hope you can add Win supoort so I can try it at work.
Congrats for the release and happy new year.
what was the motivation to start this project? it got so many points here, hence I assume there must be something really useful about it - but I so far fail to see it.
It's surprisingly convenient and works as I expect it to work all the time. Fantastic job!
Thank you for all the hard work you’ve done and for sharing your passion project with us.
Thank you for making this! I've been waiting to use it for quite some time. Really happy to take it for a spin.
Enjoyed hearing about this on The Changelog recently!
thank you and the community for the work. i hope to see blocks (not sure if this is a shell thing or a terminal thing) the same way warp does it :)
Looks really awesome. I'm going to sound like I don't belong in the hipster terminal club, but the reason I shied away from some of the other terminals is the lack of tabs, which looks like yours has when I did a quick Google question/search. (if wezterm and the like have them, I must have missed it or it wasn't obviously apparent in the settings how to achieve them).
I know everyone will say but tmux and/or native multiplexing bla, but I'm kind of old school and only do screen remotely if needed, and I just like a lot of terminal tabs in my workflow with a quick mod left/right arrow to navigate between (and if native multiplexing in Ghostty is simple and easy I'd probably do some of that too). Perhaps this is why I've never left iterm2.
Wezterm does have tabs, and their related keyboard shortcuts are configurable.
See https://wezfurlong.org/wezterm/config/lua/keyassignment/Spaw... for a starting point in the config.
WezTerm has emulated tabs, not OS-native tabs. Some people will find that to be enough to suit their needs. Others will want 'real tabs'.
For example, I can select a tab in Ghostty, pull it out into its own window, and then stick it into another window. This doesn't work in WezTerm, nor can you drag them around to rearrange them (keyboard shortcuts allow this however).
I'm honestly not sure what a OS native tab is supposed to be, on Linux. And I do not see why "emulated tabs" of WezTerm couldn't just do the actions that you describe. The Firefox tabs do after all, and they do not look like they are built according to some (GTK?) tab standard (GTK.Notebook?). I'm pretty sure that X11 does not have native tabs, while some window manager do. Is there a linux standard I'm just not aware of that you are referencing here?
Maybe it does not matter, the difference in functionality should count. Just highlighting that this messaging might not be understandable for linux users. I guess you are talking about some macOS thingie that's irrelevant to us.
They mean that WezTerm doesn’t use the tab widgets of the platform’s first-party UI tookit.
AppKit/SwiftUI on macOS and GTK/Qt on Linux.
So is Ghostty a faster version of iTerm2 and it is Linux compatible?
iTerm2 has way more features, more than I realistically use, but feels slower too.
Thanks!
We've got native tabs and splits on both macOS and Linux. :)
WezTerm has tabs but they're not native UI elements.
Right, I was admittedly too lazy to dig far enough with wezterm it appears. Was looking for the button to click I guess.
You can click the tabs in wezterm
I also use tmux, but I love the native tabs of Konsole in KDE. I have Shift-Arrow configured to move between them, it is far more comfortable than the dual shortcuts needed by tmux, Ctrl-B to call tmux's attention then l (if I remember correctly) to get to the last tab.
Konsole also has easy resizing of text and supports images in the console, you might like it.
I just tried, "tmux bind -n S-Left prev"... works. Thank you, good idea. I now have 'S-Up switch-client -n' and 'S-Down last'
I am a happy konsole user. I have bookmarked all the tabs relevant to my project, in a folder. As soon as I start konsole, I open the folder in tabs.
Then as a ritual (and a bit of OCD), I quickly cycle through all the tabs with Shift-Right Arrow once.
Try binding the tmux leader key to '`' (grave accent). This changed my life!
I second this. I wouldn't have been able to make tmux such an integral part of my daily workflow if it weren't for this binding that I came across in someone's starter tmux conf many years ago.
jj or qq can also be used. As I once started with GNU Screen ages ago, I like prefix to ctrl+a but it interferes with going to front of command in bash mode. For that, I use vi keybind mode in my shell (fish or bash) which feel very natural to me. For zellij, I use default prefix so that it does not interfere with remote (yes I am aware remote requires double prefix; I prefer using tmux remotely and zellij locally).
As a longtime KDE fan I've used Konsole for years and it is seriously underrated. However, after I discovered Kitty a few months ago, I fully converted and cannot be happier. You can also move between tabs using keyboard shortcuts as well as move the tabs themselves. What I like about Kitty more is its straightforward text file based approach for configuration and absence of any gui elements. Konsole's GUI and configuration menus are overwhelming and I think are in need of a deep redesign.
Konsole is super solid. Just Works.
Quick correction: I currently use Wezterm on Linux and it has tabs. Alacritty does not for developer philosophical reasons.
Looking forward to checking out Ghostty.
So does kitty.
I agree with the philosophy of no tabs, but I simultaneously live in an intermediate desktop environment situation where I don't have access to the "right" solution yet. So I'm happy to have terminal emulator tabs, browser tabs and IDE tabs for lack of a more integrated solution.
Wezterm has tabs right out of the box and they are fully customizable, though I prefer tmux since I prefer to not have my data extinguished if I accidentally close the terminal :D
WezTerm shines in ease and breadth of configurability due to using lua, so it's simple to have the theme change between light/dark depending on host OS theme.
Interestingly there’s another comment ITT complaining that they need to use a programming language for configuring wezterm :)
As a wezterm user I’ll admit that configuring it was mildly annoying to start, but ended up feeling like an accomplishment. A few years in, it’s just another annoying program I have to re-remember how to use when i update twice a year.
I don't know Lua either but c'mon now. It's just some config. Copy and paste from the docs and tweak the values as needed. If you really want to write something funky in there, ChatGPT knows Lua. It's not that bad.
It took me all of 30 seconds to get the Lua config to compile from copy pasting the documentation..
Your data isn't extinguished if you're running wezterm on the server too. It'll reconnect.
Yeah. I could get by with the default Linux terminal and tmux really. Tmux is just the best. Second to vim it’s the single most useful thing I’ve ever used.
No mention of Cool Retro Term!?!? Typical elitist behavior... /s
I'm just having a bit of fun, but it is a fun terminal every once in a while. https://github.com/Swordfish90/cool-retro-term
you can use glsl shaders with Ghostty including this CRT one to mimic what cool retro does
https://github.com/m-ahdal/ghostty-shaders/blob/main/crt.gls...
Awesome! Thanks!
For anyone else curious about how to configure these, check out the docs: https://ghostty.org/docs/config/reference#custom-shader
Will these work on MacOS or does it use metal for the mac version?
I'm using them on a new mac mini. Haven't tried on my older intel mac mini yet though.
I LOVE Cool Retro Term! I mean, every once in a while. But if I’m sharing it in Zoom, I’m damn sure re-opening my tmux session in CRT.
I use that one as my daily driver. Works great.
Wow that's great
this guy is a billionaire guys...
After a quick test this looks incredibly good and fast. I'll use it as a terminal for the next weeks to see how it goes, but I have good feelings. Thank you so much for writing it.
EDIT: WOOOW, for me this is going to be a game changer. I was just working at Redis stuff outputting a ton of debugging info and results, and normally the terminal was the bottleneck, and here instead it printed half million of results in the blink of an eye. And then I could go back in the history without any performance degradation. I love this: for development of systems it makes a big difference.
Donno, the benchmarks don't look all that great: https://github.com/moktavizen/terminal-benchmark
These benchmarks are all flawed.
You can't measure input latency properly without a camera (or pixel access to the screen but then have to be careful it's not impacting your benchmark). The latency benchmark is just testing VT IO throughput for a specific zsh prompt. Not at all related to input latency.
The plaintext IO benchmark is suspiciously slow for both Alacritty and Ghostty relative to Kitty. I ran the same on my machine and got within 15% between all three. They're all fast but something looks wrong here. I also have issue with the contents, which aren't representative in my opinion of human output (that's why I like to use books as my plaintext IO benchmark). This changes things.
The memory usage doesn't explain the setup at all, nor exactly how memory is read (I'm not sure what the `mem` column is reading in btop). Memory usage on macOS is tricky to benchmark because the OS tries very hard to _not free memory_. As a macOS kernel guy told me once: "freed memory is wasted memory" [so long as you're not using all memory]. There are other metrics you can get out of the kernel to get accurate _allocated and used memory_. Activity Monitor exposes these well. (EDIT: Just realized the tests were on Linux, which should be better, so this might be okay but test setup still matters here)
I'm not saying any are directionally wrong, and I'm also not trying to claim Ghostty is the fastest (I don't, I claim it's just "fast", not the fastest). But this is not good benchmarking.
...And you can also cc this your comment to the issues section of the provided repo, so that the author could answer these points and possibly improve their benchmarking process :).
---
> I claim it's just "fast"
Me, I have three terminal emulators installed on my main machine, alacritty, kitty and xterm. Definitely haven't noticed anything "game changing" (as mentioned in the comment above) from ghostty in this regard.
You could also provide your own terminal benchmarks; that would help Mitchell debug if needed.
why don't you just pipe it into a file and then less it? if your redis stuff prints so much stuff you might want to reevaluate the respective program logic.
Sure, I redirect when there is to redirect, but sometimes during debugging you want to spam yourself to see what is happening during some stress testing when some code path is full of printfs. Also sometimes I'm just on the redis-cli and to test the system at scale I directly ask (like yesterday) for half million of similar vectors. It is very convenient I can type this on the CLI and see the result immediately, instead of flooding myself for seconds or minutes.
so, it's convenience. fair enough. i'm just trying to make sense of why it is so popular on hn. i often see stuff rated to mount everest here and i just don't get it. and then i'm wondering is it me? or is it them? am i one of those weak engineers who just don't know what's going on? that's all.
Since you asked, your point above effectively says "why don't you just work around your terminal emulator being slow by making more work for yourself?" That's not a compelling argument.
not really - the use case mentioned where you suffer from a slow terminal is a code smell as far as i am concerned
No it isn’t.
[flagged]
Please don't be snarky or cross into personal attack. We're trying for the opposite here.
Telling to creator of Redis that they might want to reevaluate their respective program logic (Redis) is pretty funny, only on HN :)
Haha, the question makes sense per se but there are definitely times where you want to see the output in real time. I'm a big fan of printf-debugging :D
It feels good to hear support for printf-debugging coming from such esteemed corner. I have been doing that for a significant majority of my career instead of dropping into debugger. The side effect is you become pretty good at crafting meaningful logs.
Really need scrollback search though. Was a bit surprised it was launched without that.
I've been using Ghostty for several months now (used Alacritty before that). Ghostty is really, really good. It's fast, it gets the text rendering right (many cross-platform terminals struggle with this), and it has all the features I need.
It's also some very well-written Zig code. We use some of the code for graphemes in Bun for `Bun.stringWidth`.
Likewise coming from alacritty myself. This out of the box gives me everything I really want and does it well. Not to mention the development process was quite refreshing to see. Decision making process for sane defaults and to allow customization quite easily.
Nicely done.
Ghostty has a hard-to-find "quake mode" that may interest some.
During the beta I had it configured like this on macOS:
keybind = global:cmd+space=toggle_quick_terminal
quick-terminal-animation-duration = 0.1
There isn't an option to set the default height of the "quick terminal" window that I'm aware of but you can drag the bottom of the window after it opens and it will persist between toggles.I'm using ctrl+` :
keybind = global:ctrl+grave_accent=toggle_quick_terminal
It was the first thing I made sure ghostty supported it before trying it.Setting the initial height of the quick terminal is under development: https://github.com/ghostty-org/ghostty/issues/2384
Lack of tab support in the quick terminal is a bummer, but it should come eventually: https://github.com/ghostty-org/ghostty/issues/2329#issuecomm...
For now, splits are the way to go in the quick terminal.
Note, if someone is trying this, that you need to grant accessibility permissions for it to work when Ghostty isn't focused.
Hmm any way for this to work in kde plasma wayland?
In yakuake they have to register the Open/Retract shortcut with KGlobalAccel [1] and I don't think global shortcuts are implemented otherwise
[1] https://github.com/KDE/yakuake/blob/164d24b8bad1175199260c62...
It's a macOS-only feature, for now.
Let's hope it will become available for Linux, too. I have been using Yakuake for over a decade now, mostly because I love how I can access the terminal everywhere with one button press.
At the same time, Yakuake seems to be in maintenance mode, and you should be happy when it works with new KDE versions.
Unfortunately no tab support yet in the quick terminal, and it does not work on top of fullscreen applications. Would be great if these things would work at some point.
Currently I am using Wezterm and iTerm2 for the quake style terminal, but using two different terminals is quite annoying. I really miss Visor and TotalTerminal.
About tab support, you mean pressing the tab key to, for example, autocomplete a command?
That seems to work for me (macOS 15.2 here)
GP means creating a new tab with CMD+T, which works in the normal ghostty terminal. iTerm2 does support tabs in its hotkey windows (~= ghostty's quick terminal).
Aaaaaah! Ok, what a confusion :D
This is the first thing I went looking for when looking at the docs, thank you.
what does quake mode do?
Comes from video games where you usually can hit ~ (tilde) or other character to make a in-game console appear, usually sliding down from above or at least in the top half/third/quarter of the screen. Popularized by Quake and games from that heritage (like Source engine) I suppose.
Desktop equivalent is that you have a terminal available at a short-cut/button-press that will always show it but not fully hide the rest, no matter what other context you're in. Pretty handy.
> a terminal available at a short-cut/button-press that will always show it but not fully hide the rest, no matter what other context you're in
I cant be the only person who uses Quake-style terminals at fullscreen. The second part of your sentence is the crucial bit: the ability to instantly conjure a persistent terminal regardless of whatever else I have on screen.
Can you then detach it to make it "non-quick", if you want to keep working on that separate context thing?
What I find annoying with my workflow (linux) is that starting a terminal and shell takes a lot of time. I wonder if it's possible to have a terminal always loaded so that my keybinding for creating a terminal would actually: move terminal in current workspace, focus it, then spawn another invisible terminal in the background.
I kind of use tmux for this, to have a persistent session. Even if my desktop manager (Gnome3) crashes, which happens sometimes when I run a bazillion VMs and run out of memory, my tmux session still survives and I can `tmux attach` once logged in again.
So the idea would be that you start tmux somehow/somewhere, then in your new shell you can do `tmux attach` to get into that session from anywhere, and if you close this new shell, you can still do `tmux attach` to get back to where you were.
Yakuake supports invoking the terminal in windowed-mode, if that's the profile you choose for it. I don't follow the purpose served by spawning an invisible background terminal; that doesn't seem to be common workflow, but I suspect you could wrangle it in your shell startup file so that the terminal self-invokes in hidden mode - but having 2 running copies (invisible and windowed) may result in both appearing when you press your global shortcut.
Yeah I have been using quake-style terminals (guake on linux, iterm2 on mac) for _years_. I never met another dev in person who also uses it.
I am a single massive monitor kind of person. Quake-style terminal + all apps in maximized window + multiple desktops (with a shortcut to switch between them) is so good. Pull up the same terminal no matter which desktop you are on.
TIL. thank you for taking the time to answer - wasnt obvious from above whether or not this was some kind of joke easter egg thing
Same. I have been using this in Yakuake since 5 years but I never knew it was called a "quake mode"
This is especially amusing to me given your choice of terminal.
Scroll down from top on any screen
Downside is that the quick terminal doesn't support tabs. Unfortunately that's currently a dealbreaker for me.
You can always run tmux inside. I personally don't use tabs in my terminal emulator at all, because I use tmux tabs for everything.
It may not work for you, of course.
Doesn't seem to like that keybind now, and searching the docs doesn't give me answer. Do you know if something still works?
Also, why cmd+space? That's the MacOS spotlight search binding.
I disable cmd+space for Spotlight in macOS System Preferences.
You could try another keybind:
https://ghostty.org/docs/config/reference#keybind
Also be sure to quit and reopen Ghostty or use the reload configuration option from the Ghostty menu.
Thank you! First thing I was looking for too. Cannot imagine trying a terminal without this.
Love me some quake style terminals, will check this out
Amazing, thanks! This is most of how I use a terminal. Will give it a go.
Does this work under Wayland? I remember that being an issue for Guake.
it should do. on Linux it uses GTK which supports Wayland these days
Where does one add this? Is there a config file?
https://ghostty.org/docs/config
On macOS, pressing ⌘+comma with Ghostty in focus opens the config file.
Quit and reopen Ghostty to load the updated config (or bind another key to the reload_config action: https://ghostty.org/docs/config/keybind/reference#reload_con... ).
Keybinds are explained here: https://ghostty.org/docs/config/reference#keybind
I just saw this https://ghostty.org/docs/config and was coming to update my post when I saw your comment.
Thank you!
Imma try out ghostty, WezTerm, and Rio thanks to this thread. And why not use them all. For terminal minded folks we are surely spoiled.
It also has reload config in the Apple menu items which I found handy as the default keybinds didn't seem to work for me.
And you can reload the config with Cmd+Shft+, so Cmd+, to open the config (standard mac shortcut) and then the same with Shift to reload it, it's genius.
Super handy!
Related. Others?
Ghostty 1.0 Is Coming - https://news.ycombinator.com/item?id=41914025 - Oct 2024 (32 comments)
Ghostty Devlog 004 - https://news.ycombinator.com/item?id=37709113 - Sept 2023 (2 comments)
Talk: Ghostty and Some Useful Zig Patterns - https://news.ycombinator.com/item?id=37491031 - Sept 2023 (2 comments)
Mitchell Hashimoto's Ghostty Devlog - https://news.ycombinator.com/item?id=36736686 - July 2023 (1 comment)
I couldn't find any screenshots, also, why is this being hyped so much? What have I missed?
I'm wondering about this too. I looked at it and don't see any reasons to switch away from kitty, which is just as fast, has more features, and has never given me trouble. Kovid is a fantastic developer who's very responsive and fixes bugs in sometimes literal minutes after they were reported.
I guess the hype is from the series of blogposts about the lengths they've gone to make it fast. Also it looks like mac doesn't get a lot of native terminals so this has them excited.
Just try it. I tried and the launch was so smooth that I'm keeping it a few days to test it. My current biggest problem is that I launch my terminal using the spotlight shortcut (⌘-space on mac) and while iterm2 is found when I search for term, ghostty isn't.
It took a minute for me, but it did find it. Something is off with macOS indexing. Any app that you install via brew takes a bit to show up.
I'm not complaining about the indexing (you can start the indexing by starting spotlight on and off). I'm complaining about having to search for "ghos..." instead of "term...". Because I don't don't like to remember the specific app name. But this complaint is the same for everything; when searching for Excel, I would like "Numbers" to also show up in the results. When looking for vscode I would like "Visual Studio code" to also show up, but I need to type either code, visual or studio.
Sounds like a feature request for spotlight to add aliases or tags. Personally I always keep a terminal open.
Huh, you've got me curious, and the Windows start menu does in fact launch Visual Studio Code when searching for "vscode." Color me pleasantly surprised!
I have found the following community site for generating Ghostty config quite helpful https://ghostty.zerebos.com/
Hey this is my tool, thanks for sharing! I've been very happy with how well received it has been so far!
Well, thanks! Sometimes GUI makes for easier discovery than a wall of text, even when the docs are good.
Great tool! Thank you.
This is great, thanks! It would be amazing if CMD + , would open this directly.
I uninstalled the app when I saw that Cmd+, opens an empty text file called config.
I'm not going to learn more configuration languages or type 30 characters (or paste them from the browser) to toggle a binary setting.
A GUI for settings is planned so you can try again in the future.
Interesting take. Settings are typically something I setup once and move on. A GUI is nice (I'm sure there will be one), but not required in a v1. One of Ghostty's stated goals is sane defaults that mostly work out the box. I just checked my settings file and I changed 3 things. I think they did a pretty good job with defaults.
Finally, somewhere else in this thread someone linked a web tool that will generate the settings if you absolutely can't look up the couple you need to change.
Aren't plaintext configuration files standard? It's how I configure most applications (and how I like it, because it makes the configuration shareable).
As a DSL, it's key-value pairs. It doesn't get much simpler than that.
It's a desktop/GUI application. It's definitely not a standard for those, no. I share the OPs frustation that I don't even know what I can configure and have to search web to be able to change something. And while the documentation is nice, it's not exactly great for this.
Also, having an explorable and searchable UI doesn't mean it's not saved in the same shareable and readable file.
That could have been acceptable. The problem is it's empty; it should instead contain the default configuration.
You can see the default configuration by running `ghostty +show-config --default`
The ultimate end format for the config stored on disc is completely irrelevant to how the config is created. Simple doesn’t mean easy to experiment with, simple to understand, fast to write and so on.
No one is confused as to how the ghostty config works. Key value pairs. Sure. A window full of GUI controls and system color pickers can create that config file, or I can manually by hand. I’d prefer the former.
no, especially for an app that boasts to be "native"
kitty has a nicely formatted config which lists all settings along with their default values and a very detailed description of each one. It's pretty much the same as having a GUI. Maybe Ghostty can adopt this?
Same here. I was curious, so I installed it. First thing I tried to do was to change the text color, and saw there was no settings UI. This is a bit baffling to be honest.
Uninstalled it right away, I'll keep using the default MacOS Terminal app.
I use Foot as my terminal and Niri as my WM. It’s a great combo. Niri handles splits for me, and I don’t need tabs. I also turn off all window decorations, so my terminal content gets 100% of the terminal’s screen real estate-- so I don't need a native UI. All that said, it looks like Ghosty can be configured to match this setup, so I’ll give it a try. I just wanted to mention Foot to anyone who is running Linux. Foot is a simple, focused project.
I am a happy foot user and I am considering switching from Sway to Niri. What has been your experience with Niri? One thing that concerns me about Niri is that it is not wlroots based. This means that many tools I accustomed to don't work with Niri. Do you have some dedicated tools for screen sharing, screen recording, screen printing, multi-monitor management, ...?
I absolutely love Niri. It has a built-in screen capture which is good enough for me. Screensharing works fine from Firefox (which is where I do all of my video conferencing). I stopped using multiple screens a long time ago, but I do occasionally hook my laptop up to my TV, and that works out of the box. Though, for stuff like that, I might log into to a Gnome + PaperWM session simply because I don’t remember how to fiddle with things, and I’m not generally trying to optimize for my workflow when I’m giving a live talk or watching TV.
What I like about foot is the heuristics governing text selection with the mouse. I find that more often than not, if I double click with the mouse on some text, what it ends up selecting is just the part I need.
Is it weird that I never considered foot because of the name? At least when you say "alacritty" i understand that it's a terminal. When I tell someone I use "foot"... I don't know, it doesn't give a good feeling.
What about when you tell someone you "cat" a file or use "sudo"? Who cares what normies think?
I initially scoffed when I read "platform-native UI" as I've found programs made in Electron typically proclaim something similar when they are anything but native, so when I saw it used GTK for Linux (SwiftUI for MacOS) my interests were piqued. Always fun to mess around with new terminal emulators.
edit: alas, it doesn't support bitmap fonts..
You can get pixel perfect bitmap fonts by using their TrueType conversions and using fractional point font sizes. There are dozens of bitmap enthusiasts that were in the beta and they're totally convinced because well... it's pixel identical.
I've noted before in issues I'm open to supporting bitmap fonts if someone contributes it, but not interested in adding it myself. The workaround above is very good.
When using the original Terminus font failed, I tried the TTF version (Terminess) which in VSCode at specific point sizes is crisp and sharp. But with Ghostty, it was blurry and hard to read. At that point I gave up trying.
The reason might be that you need to have an "anti-aliasing" checkbox to untick on MacOS (generally in the font selection menu). I switched from Terminal to iTerm for that reason, on my work MBP.
Looks like a very nice project overall. I was initially interested in the "native" UI but after trying Ghostty I think I've realised that in a terminal app I actually want all the UI to be terminal/TUI based within the terminal itself. This is a personal preference I've discovered rather than a criticism of Ghostty.
It seems fast and really nice otherwise, so I'll keep fiddling with it, but so far I still prefer, for example, the "non-fancy" tabs in WezTerm (where the tabs are just rendered as line of terminal cells at the top or bottom of the window rather than GUI elements), and the way that modals ("Really quit WezTerm?" etc.) are also rendered within the terminal.
I'd also struggle to live without quick select mode[0].
Yeah I also searched for a quick select in ghostty while checking now. I am probably too deep in wezterm with my lua configuration anyway, but still.
Thanks for this post, first thing I did was search "bitmap" in the thread. If I can't use Terminus (+Unifont fallback), it's not for me.
Curious as to how much it matters; if a TTF font looks similar and is fast?
> if a TTF font looks similar
It doesn't, especially on average DPI monitors. Oh, you mean the OTF trick.
It was the first thing I check whenever I try a new terminal. If Terminus doesn't work then the terminal doesn't work for me.
fyi, I have just tried Unifont and worked perfectly.
>it doesn't support bitmap fonts
Very disappointing. Not sure why people are trying to kill off bitmap support in everything these days. Will stick with foot.
IMO the main reason is high DPI screens. On macs it's essentially the default, and it'll probably become the default in the future for everything. Since bitmap fonts make much more sense with low pixel density I think it's not going to be a priority for any newly developed apps.
This feels like the Vagrant moment [1] again. Cant believe 15 years have passed already.
Together with Bun I believe that is two high profile open source software made with Zig.
Wayland WM "River" is great too.
I tried to install and play around with it, it's really nice.
Took a bit of tinkering to set a theme and my favourite Pragmata Pro, but what ultimately annoys me is the lack of 'turnkey' selecting for text.
When I run `Cmd + A`, I want my terminal to make a full text selection of an entered command, not of the screen content. Or when I run `Option + Shift + Arrow left/right`, I want to select words from an entered command, not to type '4D;4C;4D;4C'.
I'm not a vimer or emacser, I want to have normal macos experience. For this reason alone I thought it's too early to switch and Warp is still great for me.
Cmd+A to select the entered command isn't standard.
You could try:
- Ctrl+A: Move to the beginning of the line.
- Ctrl+E: Move to the end of the line.
- Ctrl+K: Cut the command from the cursor position to the end.
- Ctrl+U: Cut the command from the cursor to the beginning of the line.
- Ctrl+Y: Paste the text back.
This should work in all terminals.
Good ideas (and possible in Wezterm if shell marks the semantic zones, not sure whether possible if not), though not really a normal macos experience given mac's default terminal doesn't select of an entered command on Cmd+A
But `ghostty +list-themes` is damn impressive.
When I try to ssh into one of my servers using this terminal I get the following:
missing or unsuitable terminal: xterm-ghostty
Connection to xxx.xxx.xxx.xxx closed.
(IP address removed by me.)It turned out that this is associated with how I automatically run tmux by having the following kind of config for how I connect to that server.
Host server3000
IdentityFile ~/.ssh/host_specific/foo/bar/server3000/id_ed25519_baz
RequestTTY yes
RemoteCommand /usr/bin/env tmux new-session -A -s '%L'
Whereas if I outcomment the RemoteCommand setting in my ~/.ssh/config of the laptop I'm connecting form, I can connect fine even using Ghostty as my terminal and from env | grep ^TERM=
I get output TERM=xterm-256color
in the initial normal shell.And if I run tmux, then inside of it from
env | grep ^TERM=
I get output TERM=tmux-256color
So there seems to be some termcap stuff I'd have to figure out if I want to use Ghostty and still be able to run tmux automatically in the way I'm currently doing without problem when using the Terminal that ships with macOS and ssh'ing into my servers.Thank you. I’ll probably go with sticking their suggestion into my ssh client config
SetEnv TERM=xterm-256color
mentioned in the end of your link. I’ll put it next to the line where I set RemoteCommand and include a comment for myself that this SetEnv is for being able to still use RemoteCommand tmux thing even when using Ghostty.This is a neat blog post explaining part of the magic:
I have a traumatic experience with GPU-based GUI. Long time ago I tried to run Ubuntu in a VM, and they switched to GPU-based rendering. But as VM doesn't have a GPU, the system fell back to something called "llvmpipe". The result was that the widgets reacted approximately with 30 second lag to every action.
So what I am asking, if you are making a GPU-based rendering toolkit, please write also SIMD software fallback without shaders. Remember how fast Windows 95 was and make it a little bit faster.
I am asking this in good faith
Why would you not ssh?
Because I wanted to see how a new Ubuntu looked. Not to do something useful.
Also to SSH into a VM you need to setup a second network card and to do this you need at least log into a text console.
I went to ghostty.org and spent a long time staring at that animated ghost, and thought of clippy. Except this guy seems to have wider range of emotions.
Anyways, I eventually learned this was about a terminal emulator (which is awesome), but the ghost on the front page really inspired my imagination. I think it would be a good thing to have some kind of companion like that, when it's me, by myself, constantly surrounded by terminals all day. Is the choice of having the ghost be rendered in a text-mode terminal important? I think it is for me.
The author has a dev log I’d recommend if you’re curious about what makes it different + general goodies on Zig/terminal emulators.
Already in homebrew if you want to use that!
I'm very new to Ghostty and went looking for my favorite theme "Solarized Light"; it's listed as "iTerm2 Solarized Light" -- in contrast (heh) to "Solarized Dark"
Cool to finally see a 1.0 release of Ghostty! Will definitely check it out. One very strange and niche question though, do you support font switching with SGR escape codes? After the Monaspace font family was released I made a PR to Vim to support highlighting by font switching, but I've yet to find a terminal emulator to my liking that supports it. I'm building an eink laptop and its monochrome display requires some neat tricks like this to get the most out of the device.
I'm very excited to have this because it's the first bit of high quality open source software to hit the streets in a while.
I like where we're headed with tools like this and Ladybird[0] for hope of a subscriptionless future.
Thank you, Mitchell!
> I like where we're headed with tools like this and Ladybird[0] for hope of a subscriptionless future.
That's a weird statement. I've been running a free, open-source and subscription-less browser (firefox) and terminal emulator (many) for close to 20 years.
Actually I like what ladybird is doing in the browser space, given firefox is quite dependent on google cash. But this is just yet another terminal emulator in a sea of them. The only two distinguishing features I can see are hype and native UI (which mac users care about for some reason -- my native UI is a borderless rectangle in tiling WM).
native UI is so much more than how a border of a window looks like.
What is native UI in this context? My terminal emulator is also always basically a full-screen black textarea with white letters. No window borders, no tabs, no buttons, no menus, nothing else. Is there anything native UI would give me in this case (and what is a native UI, I can't find it defined anywhere)?
This gets brought up a lot, so I wrote about it here https://gpanders.com/blog/ghostty-is-native-so-what/
> This also means that native features like pressing Shift+⌘+\ open the tab overview, just as in other applications.
Ah, so this is a macos thing and not just Safari. Can anyone help me select a tab using a keyboard? I use the shortcut, type in the search box and...have to use the mouse :(
> The big picture of "native" is that Ghostty is designed to look, feel, and behave like you expect an application to behave in your desktop environment.
> On macOS, the GUI is written in Swift and uses AppKit and SwiftUI.
I'm using Linux with Xfce, but it seems to be locked into a Gnome-like look and feel, with header bars and CSDs that can't be disabled in favor of standard title bars and menus, so it's actually very inconsistent with the rest of my desktop environment.
Can't edit my post anymore so replying to myself with an addendum:
I wrote the comment in a rush last night and I think it sounds like I'm dumping on ghostty. That is not my intention, it looks very well made and a true passion project which I have lot of respect for.
I just took issue with GP adding yet more hype to this.
Your rebuttal is not mutually exclusive to the parent comment. They say it’s the first _new_ such thing in a while, not that there aren’t any in existence.
It does where it says they give hope for a wunsciptionless future. We've always had subscriptionless, and the software that was subscriptionless is still around.
>first bit of high quality open source software
That feels like an exaggregation. L High quality open source software is uploaded daily to GitHub.
What was the last one? Ghidra?
> Split Right | Split Down
Thanks for this. After 7 years of using iterm2 I still don't know what will happen with the ambiguous "Split Horizontally | Split Vertically". I know the issue is I'm thinking about it and should just learn it, but it would be more helpful if it was named "Split A | Split B".
(might be a non-native language problem)
I think it ambiguous. vim has vsplit ("Like |:split|, but split vertically.") that is "split right", however, wezterm has "Split Vertically (Top/Bottom). Split the current pane vertically into two panes, by spawning the default program into the bottom half"
I’m a native English speaker and I also have trouble with this. When the panes are arranged horizontally, the line dividing them is vertical.
So I will see how well it works on FreeBSD, but I love the development model, keeping it "closed" for the 1.0 (focus and polish), I have not tested it yet, but it already "feels" like professional engineering work.
source is open https://github.com/ghostty-org/ghostty
Only as of 1.0 release I believe was their point.
Any love for Windows. I'm getting restless to ditch putty but unable to find any good emulator that has select and login style of management screen.
When on windows I have been happy with WezTerm
I ditched putty a long time ago. Conemu is better than putty these days (latest Windows 10 or Windows 11 if you’re unlucky enough).
I don’t like the “feel” of the new Windows Terminal “app” but it is more “modern” and “capable” (running a newer conhost under the hood).
But if you’re willing to use non-standard software then WezTerm, Alacritty, and Kitty (WSL with an XServer) are all good options.
Apparently it works great on WSL
See this other user's comment: https://news.ycombinator.com/item?id=42518033
For the 10th time WSL is not windows, it's a Linux emulator.
> Windows support is planned after the 1.0 release.
This really does aim to be the terminal for all.
> For example, on macOS, Ghostty supports Quick Look, force touch, the macOS secure input API, built-in window state recovery on restart, etc. These are all native APIs provided by macOS that don't have equivalents in Linux desktop environments.
I believe window state recovery has some approximate equivalent in GNOME and KDE, but maybe not exactly the same (and I don't know how easy it is to integrate with).
On X11, Gnome and KDE Plasma supported session/state restore, but this was based on XSMP and couldn't be simply reused for Wayland.
There's an ongoing standardization effort to provide equivalent functionality for Wayland: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/m...
KDE Plasma provides a "fake session restore" for the time being: https://invent.kde.org/plasma/plasma-workspace/-/merge_reque...
Ah, good to know.
Everything about it is so polished, it’s hard to believe it’s just a v1.0.0 release!
The only thing I’m eagerly waiting for now is the implementation of search [1], but otherwise, it’s absolutely stellar.!
I set Ghostty as my default terminal emulator now.
Wow, I had no idea ghostty was this much of a big deal. Really cool!
I assume this is mostly a mac thing? The effort to get this up and running on debian appears to be a bit more work than normal.
I imagine package managers will start picking this up shortly since it just released publicly.
well you'll have to get a DD on board to do the work and zig isn't even in debian so that'd have to get there first and the person wanting the terminal probably doesn't want to maintain the programming language as well. So that probably means 2 DDs. Again, there is a non-normal distance here.
That seems like a very Debian problem.
Perhaps if one was inclined, Nix can provide immediate resolution, since it can be installed and used on Debian and ghostty project provides convenient flake.
Granted I'm on NixOS, but took me grand total of 60 seconds to update config and 8 minutes of actually building on a slow machine.
Non-DDs can get packages in too via the RFS process, there is a Zig package by a non-DD, not yet in Debian though.
https://mentors.debian.net/intro-maintainers/ https://bugs.debian.org/995670
$ git clone git@github.com:ghostty-org/ghostty.git
$ cd ghostty
$ zig build -Doptimize=ReleaseFast
$ ./zig-out/bin/ghostty
tried this doesn't work do i need some specific zig version?
0.13.0
https://github.com/ghostty-org/ghostty/blob/4b4d4062dfed7b37...
The full script is pretty much:
$ wget https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0....
$ tar xvf zig-linux-x86_64-0.13.0.tar.xz
$ git clone git@github.com:ghostty-org/ghostty.git
$ cd ghostty
$ ../zig-linux-x86_64-0.13.0/zig build -Doptimize=ReleaseFast
$ ./zig-out/bin/ghostty
Looks like there are a few deps needed:
sudo apt install libgtk-4-dev libadwaita-1-dev git
Otherwise you'll get this error: error: unable to spawn glib-compile-resources: FileNotFound
Build Summary: 78/83 steps succeeded; 2 failed (disable with --summary none)
install transitive failure
└─ install ghostty transitive failure
└─ zig build-exe ghostty ReleaseFast native transitive failure
├─ run glib-compile-resources (ghostty_resources.c) failure
└─ run glib-compile-resources (ghostty_resources.h) failure
error: the following build command failed with exit code 1:
/home/tlhunter/Downloads/ghosttty/ghostty/.zig-cache/o/57acb02f2b1ccf1b03b9597a8c5f2d09/build /home/tlhunter/Downloads/ghosttty/zig-linux-x86_64-0.13.0/zig /home/tlhunter/Downloads/ghosttty/ghostty /home/tlhunter/Downloads/ghosttty/ghostty/.zig-cache /home/tlhunter/.cache/zig --seed 0xb4306e7d -Z11426c6f3a70c8b9 -Doptimize=ReleaseFast
```I'm quite surprised they don't provide a .deb package as that checks off 90% of Linux users.
It's uncommon for upstream to provide .deb packages. That's not really how it's supposed to work. The Debian community creates Debian packages. Upstream's job is only to avoid making the Debian community's job more difficult than necessary. Unfortunately due to the decisions made by various popular Linux projects (mainly an obscene obsession with dynamic linking), it's not really feasible for upstreams to provide GUI applications on Linux. I hope someday this can change, but realistically there's not enough effort being put towards this goal.
Good point. I’m on pacman, but I remember installing adwaita last year when I started using Ghostty.
Zig 0.13 is required according to https://ghostty.org/docs/install/build
Funny to see a "doesn't work" response even on Hacker News, with no details or error messages.
It also seems to need a fairly new gtk4. At least the version in Ubuntu 22.04 is too old.
it's a Mac and Linux thing.
Yeah, it's not available in the Debian/Ubuntu package managers, but building from source is quite trivial.
- xterm still feel faster to me.
- some visual artifacts with the gtk menu
- sometimes prompt got clear when openning 2nd / 3rd windows
- cant get keybinding quick toggle to work
> - some visual artifacts with the gtk menu
You need a compositor. picom works.
For a proper "native i3 experience" I recommend setting gtk-titlebar=false and unbinding tab/pane management keybinds. I already have a window manager, I don't need a second one.
I also had to disable adwaita because when it's enabled closing a shell with ^D closes all open windows, sometimes it leaves an empty window instead.
> - xterm still feel faster to me.
lxterminal also launches 6 times faster, I guess on a slow laptop without a dedicated GPU these terminals are not the most efficient option.
In case you mean the quick terminal (ctrl+`):
keybind = global:ctrl+grave_accent=toggle_quick_terminal
doesn't work for me. i'm using i3.
olps, it's macOS only feature.
Have set it up with Nushell. It’s pretty fast while displaying really long log files. Going to sit alongside iTerm2 until I get comfortable with it.
The only things I miss are (1) right click to copy paste selection (akin to Putty), and (2) profiles (I work with different shells depending on my projects and use Profiles frequently on iTerm2)
My takeaway is that it's mostly useful for apple stuff-- why would "platform native" matter on Linux?
You should try it.
I'm on Linux, and first impression is ghostty is really good. Speed in particular is impressive.
Looks interesting. I'm playing around with it on Linux (with Xfce), but can't figure out how to get rid of the CSD header bar / hamburger menu and use a normal menu bar instead. I see Mac screenshots with a normal Mac-style menu bar, but I don't see how to enable the equivalent on Linux. The `window-theme` and `window-decoration` options do not seem to do anything.
They should work if you exit and restart ghostty.
Thanks, that worked. Apparently, the reload-config hotkey doesn't always work for certain changes. In this case, setting `gtk-titlebar = false` disabled the header bar -- only issue now is that there is no menu bar at all!
What am I missing? Can someone please explain what reason there is to switch/build a new terminal when we can use e.g. iTerm ?
I was using iTerm up until about a week ago when I unboxed a new Mac and decided to test out alternatives while setting it up. Ghostty wasn't out yet so I started with Wezterm, and was shocked to find how much it's speed improved my terminal experience. Typing latency is much better in nvim, and scrolling is vastly improved in nvim and tmux.
Ghostty feels like a Mac app like iTerm2 while being fast and having fewer features. Wezterm feels more like an app ported from Linux, but has a much richer config system and features like build-in multiplexing which means it's replaced tmux for me - while keeping all my tmux keybinds.
Is iTerm2 noticeably slow? I just use the built in Terminal app and I can’t imagine “speed” being a reason to switch away from it. (There is no lack of speed.)
The reason I switched from iTerm2 is it took multiple seconds to resize a window on macOS. I use Rectangle to resize windows, and by default my shortcut for "put this window on the left half" cycles through window sizes when the window is already on the left. So a common workflow is to tap Hyper-J to move a window to the left half, then make it the left third, then the left two thirds of the screen. This is fine for any text editor or browser, but iTerm2 would beachball while I waited multiple seconds for it to resize the window.
Wezterm moves instantly.
I’ve noticed that too when the scroll back buffer is particularly long. iTerm seems to then reflow from the beginning, which can take a while.
I keep using a lot of fresh tabs all the time and iTerm resizes instantly via Rectangle for me.
Ghostty was a bit more sluggish in resizing on an Intel Mac than iTerm in the current latest versions.
No, iTerm is not slow. Ghostty is not noticeably faster in any of my workflows. I am sure Ghostty is faster in some use case, but it's nothing I regularly do or have noticed.
Same, I use it all the time and never perceived it as slow. I am not a tmux user, maybe the speed is noticeable when using more complex terminal apps like that?
Do you have a lot of triggers set up in iTerm 2? IMO that’s what kills performance.
I can understand being frustrated about latency on older Macs — I used to run Alacritty for certain tasks on my Intel Macs for that reason. But on newer Macs like a new M4 Pro I’m back to 100% iTerm 2 again. I can’t fathom having latency problems with iTerm 2 on a new Mac you just unboxed.
Mitchell has a 5 min lightning talk discussing performance of ghostty which is worth a quick watch https://www.youtube.com/watch?v=cPaGkEesw20&t=3015s
It's one of those things that you don't realize how poor the performance is until you experience something better.
Mentioned from his blog: https://mitchellh.com/writing/ghostty-is-coming
> It's one of those things that you don't realize how poor the performance is until you experience something better.
No, it’s one of those things I’ve tested myself extensively and arrived at my own conclusion. Which I already mentioned in the comment you responded to.
The performance talk is about ghostty, which you did not mention trying. You mention alacritty, which is GPU based and offers good performance, but you're quick to rebuttal on unrelated projects.
I only settled on Alacritty after giving all the new and supposedly fast terminal emulators a spin (at least a day for various tasks).
I'm still using the built in MacOS terminal. What am I missing? I mostly do webdev - maybe terminal features are more important for other types of programming?
Apple Terminal has a lot of problems. As others have mentioned, it lacks support for 24 bit color, enforces minimum contrast ratios without any ability to disable them (meaning you cannot set arbitrary color themes), is hopelessly bad at Unicode rendering (particularly with multi-codepoint graphemes, see [1]), and in general misbehaves in other myriad ways [2][3][4].
With both Ghostty and iTerm2 now freely available, there's really no reason to use Terminal.app.
[1]: https://mitchellh.com/writing/grapheme-clusters-in-terminals
[2]: https://github.com/neovim/neovim/issues/26093
Personally, my main reason to prefer Kitty over Terminal.app are (I believe Ghostty support all of them as well, so looking forward to try it out):
- “Kitty Keyboard Protocol” means that a TUI app can detect all keybindings. For example, if you install kkp.el in Emacs, then Emacs running in a terminal will pick up ctrl+shift keys, super keys, etc. on par with a GUI app. I believe NeoVim supports this out of the box now as well, so if you ever felt like binding Cmd+S to :w<cr> you now can. - “Kitty Graphics Protocol” means that I can let e.g. Matplotlib show images inside a terminal, even over SSH connections. If you’re annoyed at pop-up GUI windows, or struggling with viewing remote images often, this is a nice workaround. There are even attempts at making terminal PDF viewers (like termpdf.py); IMO that’s a game changer, even though the app itself is still in a “proof of concept” stage IMO. - Terminal splits. If you work a lot in a terminal, it’s nice to be able to full-screen a terminal and view many different shells or processes side-by-side. Last I checked, Terminal.app just doesn’t have this feature. Sure, you could use multiple windows or a multiplexer like tmux, but that comes with different trade-offs; for example, a native terminal offers smooth scrolling with a trackpad whereas tmux doesn’t. Personally, I use tmux remotely, but stopped using it locally. - I see a lot of people mention 24-bit colors as a main reason to not use Terminal.app. For me, I’m actually pretending that I have a 16-color terminal, because I’m tired of having to theme every command-line utility individually, I’d rather they all just respect my 16 chosen colors instead. The only exception is my editor, just because there are unfortunately few good 16-color themes these days, so I instead change my terminal program to be consistent with my editor theme and then let every other TUI utility believe the terminal only supports 16 colors to match.
Built-in terminal doesn’t support truecolor. Many CLI programs rely on that to look good.
What CLI programs? I have yet to run into any issues after using the built in terminal for its entire lifespan.
As an example, here is the Helix editor (neovim looks just as bad) in Terminal.app vs. ghostty (would look just as good in any other modern terminal).
I appreciate you making an effort to visually display things, but FWIW I don't think that (or sibling) really gets to the root issue, which is less of capability then practical convenience and compatibility. Mac native Terminal perfectly well supports 256 colors (or arbitrary 16 colors with themes), which I've used, so you could absolutely make both sides look identical there. Unless someone is regularly viewing photos inside their terminal (which some do support and can actually sometimes be handy!) then it might not be immediately clear what 24-bit would bring to the table over 8-bit, regardless of editor or shell themes.
But in practice 24-bit was an easy lift for terminals under active development ages ago, and in turn made it trivial to have everyone across any platform specify exact colors more easily without any end user customization or arguments about "not quite what I wanted" in an 8-bit palette or whatever. Thus a lot of the ecosystem now makes use of it. Being able to replicate anything yourself, or get close enough, in a smaller colorspace is still extra grunt work for no particularly valuable reason, and could actually add up to be fairly significant work if one has a lot of more complex code coloring themes and such.
My example is precisely about practical convenience. If I try to do something very normal in Terminal.app, namely use a text editor with a theme, it will look like garbage.
You wouldn’t realize because 24-bit colors are silently dropped. You don’t get the full experience but you also won’t “run into any issues”, unless you start using something that relies on 24-bit color coding for core functionality, like my own log viewer.
Proper text-based configuration made me switch from iTerm to WezTerm, and i’ll give this a try as well :)
Why create new art when we already have galleries full of it?
Iterm is slow
Yeah or vscode integrated bash?
Is there a way to restore session (windows, tabs, paths) after (application) start? How is this not default everywhere is beyond me (looking at Firefox).
But my main point here would be that the lack of explorable configuration, and the docs not having any search, make it quite challenging search for this.
I wonder if there is any equivalent of 'iterm2 broadcast input' in ghostty. I use this pattern to deploy same application on multiple servers or checking logs on multiple servers for same service.
To people who tried using it, what are the reasons to use it over iTerm2?
It’s fast. In the same league as Alacritty and Wezterm, which is to say on the doom fire benchmark those terminals can do 500fps plus, where iTerm2 does 90fps on my M4 MacBook Pro. In practical terms if you use tmux or vim in the terminal, it makes a big difference for typing latency and scrolling.
The parent is probably referring to this benchmark: https://github.com/const-void/DOOM-fire-zig/
Thank you! Interesting, because I haven't perceived "terminal performance" as a problem before. I will try it out
Where should I look first if I only get around 160 fps, while WezTerm gets 400+ fps?
I am not a very adept terminal user. I just hook in to tmux. So all emulators are basically the same for me. Switching windows in tmux is much faster than clicking on tabs. ghostty at least looks much nicer. It has a lot of built in fonts and themes. Command line editing is similar. Man pages for some reason are very slow to open in iterm2, but that isn't the case here. The only deal breaker for me is that it takes up a lot of cpu (in macbook air). Unless there is a simple, non-consequential config to change that will fix this, I will stay with iterm for now.
> Switching windows in tmux is much faster than clicking on tabs.
Sure, if you're clicking tabs... A fairer comparison would be between the keyboard shortcut to switch windows in tmux and the native keyboard shortcut to switch tabs.
which is prefix+number in tmux. I don't know if you can easily jump to a tab with a visible index in ghostty.
On Mac at least it seems to be cmd+number
I tried it but I just can't jump since it doesn't have support the global hotkey to autofocus iterm that I'm so used to.
I tried using their toggle_visibility keybind but it's a bit wonky since it doesn't return focus back to another window when you toggle away.
I just use rcmd for that. But that iterm feature is nice.
In case anyone is wondering, this terminal appears to work just great on windows by using WSLg.
I installed on linux inside WSL, then launched it, and it looks/works great. Clipboard also works.
Thanks! I did it, but I'm having problems with window resizing and mouse selection. When I try to resize the window, the actual window is smaller than it appears. Did you encounter the same issue? Related issues:
https://github.com/microsoft/wslg/issues/1008 https://github.com/microsoft/wslg/issues/633
oh, it's actually a problem with ultra-wide screens and there is no simple resolution for this and I gave up https://github.com/microsoft/wslg/issues/590
Did you have to build it? On which OS?
I used Arch. It was already in the AUR, but I believe it did build from source
Does it support Ctrl+Scroll to zoom? Somehow I got used to this years ago and unfortunately not a lot of software supports it. Have been using Wezterm until now, which does.
That's usually a feature of the Desktop Environment. If you configure it there then it works everywhere.
Why is the CLI args so weird with the + sign?
Compiled ok but crashed upon execution:
info: ghostty version=1.0.1-main+a8e5eef1
info: ghostty build optimize=ReleaseFast
info: runtime=apprt.Runtime.gtk
info: font_backend=font.main.Backend.fontconfig_freetype
info: dependency harfbuzz=8.4.0
info: dependency fontconfig=21402
info: renderer=renderer.OpenGL
info: libxev backend=main.Backend.io_uring
info(os): setlocale from env result=en_US.utf8
info(gtk): GTK version build=4.6.9 runtime=4.6.9
info: optional config file not found, not loading path=/home/xxxx/.config/ghostty/config
info(config): default shell source=env value=/usr/bin/bash
"vulkan-disable" is only available when building GTK with G_ENABLE_DEBUG. See GDK_DEBUG=help
info(gtk): libadwaita version build=1.1.7 runtime=1.1.7
(process:164888): Adwaita-WARNING **: 19:33:13.357: Using GtkSettings:gtk-application-prefer-dark-theme with libadwaita is unsupported. Please use AdwStyleManager:color-scheme instead.
error(gtk): unable to get current color scheme: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such method “ReadOne”
info(grid): loaded OpenGL 3.2
warning(grid): OpenGL version is too old. Ghostty requires OpenGL 3.3
error(gtk_surface): surface failed to realize: error.OpenGLOutdated
info(sentry): sentry envelope does not contain crash, discarding
System: OS: Pop!_OS 22.04 LTS x86_64
Host: 20QVCTO1WW ThinkPad X1 Extreme 2nd
Kernel: 6.9.3-76060903-generic
Uptime: 2 hours, 20 mins
Packages: 5314 (dpkg), 22 (flatpak)
Shell: bash 5.1.16
Resolution: 3840x2160
DE: Plasma 5.25.5
WM: KWin
WM Theme: Breeze
Theme: [Plasma], Adwaita-dark [GTK2/3]
Icons: Papirus-Dark [Plasma], Papirus-Dark [GTK2/3]
Terminal: konsole
Terminal Font: JetBrains Mono 11
CPU: Intel i7-9750H (12) @ 4.500GHz
GPU: NVIDIA GeForce GTX 1650 Mobile / Max-Q
GPU: Intel CoffeeLake-H GT2 [UHD Graphics 630]
Memory: 6307MiB / 31738MiB
Also same issue. Seems it’s using a bleeding edge OpenGL ES that even nVidia drivers don’t support.
I raised an issue for this: https://github.com/ghostty-org/ghostty/issues/3435
You have OpenGL 3.2 but need 3.3
Error is a little misleading. OpenGL is likely much higher than 3.3 since op is using nvidia gpu.
Problem is that this application uses OpenGL ES for which 3.3 was only recently even finalized as a standard and most GPUs like nvidia don’t support.
I just want to say thanks for the minimum-contrast option: https://ghostty.org/docs/config/reference#minimum-contrast
I've grown so sick of tools/TUIs that output unreadable text (like Debian's ls that defaults to dark-blue-on-black for directories). I look forward to never manually theming a terminal app again!
Another goodie is selection-foreground and selection-background config to set the colour for highlight selection, makes a massive difference when it's something you can choose rather than the translucent crap on mac, or the defaults on Windows/Linux.
This is great. I’m middle aged and I’ve definitely noticed my eyesight needs more and more help in the contrast dept
thanks for sharing
Looks great. Eagerly waiting to be able to "Use Left Option as Esc+" like iTerm has. Without it, it is nearly impossible to use Emacs.
Look for `macos-option-as-alt`. The Ghostty docs use the term "Alt" here to mean using the key as a terminal input modifier rather than for macOS text input. This setting allows you to specify only one option key to use this behavior for.
Was just looking for how to configure this globally. You can create a keybind for every key[0][1] but that's a bit silly faff nonsense in current year 2024.
[0] e.g. `keybind = alt+f=esc:f`
[1] Which affects both option keys, sadly.
See `macos-option-as-alt`
Ah, damn it, I searched for "meta" and completely missed that. Apologies to Ghostty!
I have this as a system-wide mapping with Karabiner. Complex modifications, "Post esc if left_alt is pressed alone".
There's never a time when I wouldn't want this to work, may as well enable it everywhere.
Edit: It looks like I misunderstood what that setting in iTerm does. But hey if you do want left option to send Esc by itself, that's how to get it.
I've been using Alacritty so I can switch back and forth from my work's Mac to my own Linux, and share the config, but I'm testing Ghostty and I'm really liking it. And no silly closed AI somethingsomething integration.
Does Ghostty support TiteInhibit? The docs say "if xterm does something we should do it", but I don't see any mention of "tite".
It's the first terminal app that made me switch from Terminal.app on my Mac. It gets basically everything right, and doesn't try to have every feature. Fantastic work, thank you!
This product just breathes craftsmanship and love. Respect and thank you!
I'm excited about the fact that this is written in Zig. I'm a Kitty user at the moment, but if this delivers I'll change to Ghostty.
Congratulations!
I was hoping 1.0 would mean CMD+F search would work, but looks like that was pushed back to a later release unfortunately.
https://github.com/ghostty-org/ghostty/issues/189#issuecomme...
Just want to share what I just realised, but the author is no one else than the mitchell hashimoto from hashicorp, so not exactly a newbie ! Would it have killed you to let us poor 99% have a bit of fun releasing useful projects too? (And also reach a bit of your determination, skill and talent)? (no, really, kudos, well done and thanks)
This is very nice! How do I work around remote SSH shells complaining like `Error opening terminal: xterm-ghostty`?
Congratulations on making it to the launch!
I really appreciate the levelheadedness of your responses regarding Ghostty, and how clear you are to be speaking positively for your thing instead of negatively about anyone else's.
Going to build it at lunch today and give it a shot :)
I've tried it out and I can notice that ghostty is a little more snappy than Alacritty. I was happy with Alacritty, but I used a face a weird issue where the whole terminal freezes. I'm not sure if this is a Alacritty issue or tmux issue. I can only confirm this by using Ghostty and checking if the same issue happens.
Anyways this is a great piece of software. I've never been this hyped for a software ever before. Great work team.
Any Alacritry users have opinions on this? I've been waiting for its release and am looking forward to trying it. Wonder what the big differences are?
I mostly appreciate Alacritty's simplicity and use tmux to manage multiple windows/panes.
You should also check out Wezterm too and see which one you like more. I ported my tmux keybinds to Wezterm - including vim-tmux-navigator style ctrl+{h,j,k,l} for navigating between nvim splits and Wezterm splits, ctrl-a as tmux leader. Getting tmux out of the way between terminal and nvim noticably improved scroll feeling in nvim and just in shell scrollback too.
I styled Wezterm's tabs to look just like my tmux tab bar too, there's no visual difference for me between a Wezterm window with Wezterm tabs, and a Wezterm window with tmux tabs. If you're more of a terminal native than a Mac native, I think you'd enjoy it.
My wezterm config: https://github.com/justjake/Dotfiles/blob/new/config/wezterm...
Does wezterm (or any other terminal emulator) have some way to attach to a session over ssh or over multiple ttys? It's the main thing stopping me from jumping ship.
Yes, Wezterm has this. https://wezfurlong.org/wezterm/multiplexing.html
I haven’t used it yet, and it requires you install Wezterm on the remote. Ideally Wezterm could push a mux server executable to the remote host if needed.
I tested it out really quickly, and something is off with Ghostty's font rendering on my machine -- there's extra vertical space between lines. I didn't see any config options for adjusting the line height, just things like `adjust-cell-height`, which squished the whole font, and `adjust-font-baseline`, which moved everything up.
I tried a few searches ('line height', 'vertical spacing') on the GH issues for the project [1], but didn't see anything. I'm sure it's a simple config option or something with my font, but it works out-of-the-box on Alacritty + xterm and others.
I might file an issue if I can nail it down a bit more.
I was using urxvt for about 10 years and then I switched to alacritty about 5 years ago. Have had the best experience with alacritty- runs on all my systems, super fast, config is great. That being said, I’m gonna give ghostty a well-deserved test drive. I like it a lot so far. Love seeing more zig apps!
Urxvt causes(d) my laptop running Ubuntu to sporadically but spontaneously power cycle, presumably due to bugs in the graphics drivers. Iirc it happened under Nvidia and Intel.
In my experience, Alacritty had a few bugs / unimplemented features that broke certain TUIs. Ghostty seems to be the most complete / least broken terminal emulator.
I've been in the beta for quite a while, the only issues I had were resolved quite quickly. I never got to contribute that much in feedback since I honestly never had anything to complain about, outside of not being able to also use ghostty on Windows (lol).
Congrats on 1.0! It's been a joy to use I wish everyone can enjoy this wonderful piece of software as much as I have!
Congrats! I’m curious what the main reason is you ended up going with the MIT license over GPL. Is it because of potentially integrating Ghostty with VS Code like you mentioned during Zig showtime a year ago?
I'm also interested in why the MIT license was chosen. I guess it's because of the plan to create 'libghostty'?
I might give this a shot but using GTK4 makes me think this won’t live up to the “native” claim on Linux. It will likely feel out of place on non-GTK DEs with KDE being the big one. And yes, I did read the about page disclaimer about Linux but strongly disagree about calling GTK4 the closest thing. That’s a very GNOME-centric view (e.g., ignores the rest of the Linux ecosystem) and makes me worry that any issues on other DEs will be ignored/deprioritized. It’s possible that I’m wrong and that a sizable population of the closed beta Linux users we’re on KDE, but without knowing, I’m very hesitant and put back by the “native” claim (it feels disingenuous).
It is almost impressive how much worse a GTK4/Adwaita application is compared to a GTK2 application. I just tried this and it has a fucking hamburger menu in a desktop application. If that ever becomes what is considered "native" on Linux I will abandon it after using it for 25 years.
You are free to take libghostty and create an XApp app runtime for it, or even fork it and do what you want. Just because you don't like something does not make it worse.
Oh, GhostTTY is a great project. I also agree that some flavor of Gnome is the default out of the box on most distros. I'm bemoaning that fact, not the existence of an excellent terminal library and 3 frontends for it that I will never use.
FWIW I just tried on KDE (built from source on NixOS) and had some weird cursor dpi issues and GDK errors. Looks like it is tailored more for GTK-based DEs for now.
all GTK apps have the weird cursor issue on KDE if you're using scaling - I believe it's due to how GTK (and GNOME) handles fractional scaling as compared to QT (and KDE). Install the Bottles Flatpak and you'll see the same issue.
Does "native" exist on Linux, in your opinion? Feels to me like both QT and GTK (and maybe iced if cosmic comes to fruition?) could be considered native (or none of them can, depending on your point of view).
I’d answer this differently depending on when you ask. 10 years ago (random, but long enough number) I would have said an easy yes. Both GTK and QT would have been acceptable toolkits to use as the cross DE issues weren’t that many and bugs got fixed. Ask me a few years ago and I’d waver. It wasn’t clear how ecosystem friendly GTK4 would be, so I might have optimistically replied the same. But caveat it with a “maybe support both X11 and Wayland.” But ask me now and I’d say to earn the label *Linux native*, you would have to support a lot. GTK4 has proven to not play well with other DEs. The jump to Wayland has caused a fairly significant split in DEs (this year has greatly closed the gap with many showing great progress in supporting Wayland) which means some apps may not work on your DE of choice. And overall, I’d be hesitant to claim that any app is truly *Linux native* because installing an app no longer guarantees that it’ll just work and look and feel right. You’d need to have builds GTK4 & QT, and make sure that they work in both X11 and Wayland for the next few years. When I look for apps nowadays, I tend to append my DE and/or distribution to my search. I currently think it’s more truthful (on Linux) to say that an app is native to a DE instead of to Linux.
Note: I don’t think GTK4 is bad. One of the best parts of the Linux ecosystem is that we have a lot of great DEs that have gradually differentiated themselves by UX. GTK4 not playing well with others is in part due to how different GNOME’s UX is. The toolkit is meant to serve one DE paradigm now and that’s led to higher quality on that DE. The drawback to that diversification is that there is no easy way to support all DEs. Your toolkit drives what you support (unless you go out of your way to fix things that GTK4 isn’t fixing - which is why I put that bit about seeing how KDE issues would be addressed). The word “Linux”, now more than ever before, describes an ecosystem (or kernel) rather than an operating system.
> You’d need to have builds GTK4 & QT
Isn’t this just a long about way of saying “no”? Very few frameworks let you flip a switch and build against Qt OR Gtk.
Looks really out of place for me on KDE, big fat gnome title bar and buttons etc...
GTK-based desktop environments: GNOME, Pantheon, MATE, Xfce, Cinnamon
Qt-based desktop environments: KDE, LXQt
Iced-based desktop environments: COSMIC
By going GTK, you support 5 desktop environments. If you really don't like GTK, just build a Qt app runtime with libghostty. Lots of people want a Qt version.
Gnome is becoming the de-facto Linux DE. It's standard on Ubuntu, Fedora, RHEL, Suse and Debian.
KDE is standard on what, Steam deck? Every enterprise-y distro ditched it some time ago...
For Fedora, at least, there's been a recent proposal to upgrade KDE to the same status as Gnome.
Hasn’t Suse been KDE by default since… as long as I can remember? Debian defaults to GNOME but it lets you pick the DE in the installer IIRC (haven’t installed Debian in a long time since I just use it for servers). Last I heard, Fedora is making KDE an official supported DE. You’re also leaving out other popular user-centric distros like Mint which don’t use either DE (toolkit it GTK but the UX paradigms makes it so just about any toolkit means that it’ll look & feel right on Cinnamon).
Suse has had Gnome as the only supported DE for 5ish years now. They don't even support KDE at all. Talking Suse as in the commercial distros. OpenSuse has choice of DEs like most.
Gotcha. So you really meant enterprise only. Not a tongue in cheek answer (which I thought was a way of just grouping all suse-related distros). To me, that’s not the context for a user oriented product. Any reasonable person looking at a developer tool and listening to that pitch isn’t thinking pure enterprise. So I think that’s not a good interpretation of what I find disagreeable with calling a GTK4-only app “Linux native.”
Also, I thought opensuse (or whatever new name they’re using) was KDE default but with a choice (like Debian)? At least that’s what DE I got last time distro hopped to it. Which is why I don’t consider either as an example of why GNOME would be the “de-facto standard.”
It means what people actually develop, support and use in the real world. KDE has no real support. Suse, Red Hat/IBM and Canonical all develop and support Gnome which is largely what has made it so polished.
Also, I'd wager Gnome is absolutely used by 90% or more of Linux users.
> Also, I thought opensuse (or whatever new name they’re using) was KDE default but with a choice (like Debian)? At least that’s what DE I got last time distro hopped to it.
Depends "which" openSuse. OpenSuse Leap is going away since Suse (the corporation) is doing away with non-immutable distros. Whether it keeps KDE remains to be seen as MicroOS has lots of issues with KDE. Tumbleweed has KDE as the first choice still, but it's basically hobbyist-only from this point since there's no equivalent Suse distro. Aeon is Gnome-only.
KDE is standard in my house
i use the base mac/Windows terminals and have never had any issues. what are the main things that draw people to alternatives?
> what are the main things that draw people to alternatives?
Speed.
this is way better than using warp (ai gen terminal).
i'd rather use a nice-looking and well designed (UX) terminal than have to use a clunky ai native one.
Warp has been around since 2020, i.e. since before the generative AI craze took off.
Every HN thread about it that I've seen has been full of comments that boil down to "this seems cool but I refuse to use a terminal emulator that's full of telemetry and requires sign-in."
And of course the VC-funded terminal emulator has AI shoehorned in now. I shouldn't be so surprised.
tldr: you're setting a low bar
This happens to be exactly what I was looking for in a Terminal app. Native UI, fast, and native screen splitting, doesn't try to do too much. Five stars
As someone who uses the default terminal app, I'm curious to learn about other people's use-cases where the choice of terminal app makes a difference and how.
Very impressed with ghostty so far, but: Main reasons for sticking with ITerm2 (for the moment at least):
- "Seamless" cut & paste with paste on "2 X right click" + "Trim trailing LF"
- Quadruple click "Smart selection"
- Brillant search with highlighting in text and scrollbar
- Support for OSC-1 "icon titles" in tabs, as opposed to OSC-0 "header title"
My most used "unique" feture of WezTerm and one of the main reasons I'd struggle to move to any of the alternatives is quick select mode[0] which massively speeds up copying or typing file names, hashes, IDs, etc. from the output of commands.
Lack of true colour support was the first thing that got me looking at other options
This. I try to stick with the built ins, but lack of true color on Terminal.app is annoying. I wouldn't consider myself an advanced terminal person, but I do all my git interactions using the terminal and like it to look nice.
I really like to copy on select in the terminal. Terminal.app used to have a hack available to add this feature in, but since SIP days, it is no longer possible.
I am not sure how to answer this.
Why choose a non-default anything? It feels like deeper down, you’re asking why anyone chooses anything.
These terminal emulators all behave slightly differently and have different strengths and weaknesses. Some are configurable. Some are programmable. Some feel “right”. Others can be made to feel “right”. Etc.
Why use any non-default application? Same answer for terminal emulators.
> These terminal emulators all behave slightly differently
That's the point. Different browsers or word processors behave completely differently. They were asking what differences there are between this and other TEs.
This is a very specific question.
I would love to try but it doesn’t support Monterey
Since this has some plans for being the best, will it add the great unique feature of wezterm: scripting config support?
I love the terminal. But I'm seeing relatively high CPU usage. Maybe there's some non default setting that can reduce that?
Are you perhaps hitting this KDE bug? https://bugs.kde.org/show_bug.cgi?id=497341
I'm on macos
Great stuff! Does it have a Session/Workspace concept? Maybe we can learn from how Alacritty does it integrating with tmux?
nixpkgs PR: https://github.com/NixOS/nixpkgs/pull/368404
Corresponding Nixpkgs-Tracker link, to track if it's merged into your branches of interest: https://nixpkgs-tracker.ocfox.me/?pr=368404
> support native GUIs for configuration in line with our native UI philosophy
As a terminal emulator, running and building it from source in Wayland as a passive process that exists in the shell, while being a method of input-output system call management.
I wanted something as fast as Alacritty that had native tabs, could divide horizontal/vertical without tmux. And this seems like it!
Awesome, I have been waiting for this since you originally announced it. I also enjoyed the blog posts.
Has anyone put up an Arch Aur yet ?
AUR not even needed https://archlinux.org/packages/extra/x86_64/ghostty/
How... did that get in there so fast? I just updated a couple of hours ago and it wasn't there. Now it is.
I'm assuming it's been out for a while, but out of respect package maintainers waited to release it.
Note the AUR package was removed because it's since been packaged in the official Arch repos.
There is a ghostty-git AUR repo for tracking the main branch: https://aur.archlinux.org/packages/ghostty-git
Will Arch auto migrate the Aur package for me, or should I uninstall and install from the repo.
Thanks!
This is why I love HN. I had already installed from source, but this makes updating easier after all.
I wonder how the colour rendering is. Usually when I configure some editor in a terminal to use specific #rrggbb 24bit colours I like, the end result does not render the same as in non-terminal software (confirmed in the past with an eye-dropper tool).
Been trying it out for a few hours and love it! One feature that I do miss from Kitty is the cursor trail when your cursor moves in a buffer. Excited to see what Ghostty does in the future and thank you for a great new terminal!
Cursor trail?
I've been using Kitty since just about the beginning and didn't know it did that!
Edit. Oh I see it's a really recent addition. I'll definitely be taking that for a spin.
General question, how safe is it to use non-stock os terminals? In the end often they need to receiver super user at some point.
I would say it's about as safe as using any other program. On Linux, by default you will not get any isolation within the same user context. So if your account has access to sudo (regardless whether with password or not), assume that any program you've ever run on that account also has sudo access. There are sandboxes and selinux but neither is used consistently enough on consumer systems.
The default macOS terminal app has CMD UP/DOWN to move to previous prompts. This is one of my pet peeves about terminal apps, they seem to lack this command?
It works for me with cmd+shift+up/down. I had it set up with the iterm2 shell integration and it just worked.
Ghostty supports it (like many other terminals) - it is called shell integration and it is supposed to be enabled by default, just like in Terminal.app.
Not even cmd up/down, just hit up/down key, no cmd needed
There's a difference between moving the window and inserting text.
Oh i thought you meant "go through previously-entered commands"
Genuinely excited to see this land! Can't wait to try it out. This could be the last piece of the puzzle to a nearly flawless terminal experience
Warp has been meeting all my needs other than tab switching behavior. It's not open source but the UX is great.
Switched from WezTerm which was working cross platform but not quite as good.
Both are low latency and written in Rust.
Does this support the non-standard key-press, key-release, etc. events proposal by kitty project? They are necessary for nicer terminal UI projects.
Yes.
Cool. Thanks.
For some reasons, the font looks thinner compare to Kitty on macOS. Not sure if it is a bug or intentional.
Yes, it is. Try setting font-thicken = true https://ghostty.org/docs/config/reference#font-thicken
Thanks, that's exactly what I am used to!
Looks awesome, amazing work!
Any particular/strong reason for choosing Zig for this?
Check "Why Zig" slide from this talk
https://mitchellh.com/writing/ghostty-and-useful-zig-pattern...
Thanks!
This is such a cool project, looks amazing!
I tried and it looks really nice, best christmas gift this year
Real nice so far.
The fact it does its own window decoration is a bit of a turn-off, but:
A quick test of speed against wezterm and gnome-terminal show ghostty (on my laptop) to be around 3 times faster than both of the other.
Will definitely try it for a couple of weeks.
looks really cool! i'm gonna play with it, thanks for this awesome project
Will the eventual windows release support GPU shaders like Windows terminal does?
Startup time was very bad until I disabled adwaita with
gtk-adwaita = false
This sounds like an issue with your environment. For example, on my Fedora 41 setup Ghostty starts up pretty much instantly regardless of the value of this option.
text is missing left padding on macOS otherwise nice
There is a config setting for this “window-padding-x” I believe.
To be honest, I don't "get" ghostty. I am not really seeing how this is so much better than the GNOME terminal that ships with my Linux distro.
A lot of people are claiming that ghostty is "faster." I watched the lightning talk where the author claims that catting files and binaries is faster.
I tried this against ghostty itself after building with zig build -Doptimize=ReleaseFast, using: time cat ghostty.
In GNOME terminal, it took 3.340s. In ghostty, it took 16.947s. I must be doing something wrong?
The cool part is that you don’t have to “get” Ghostty, you can continue using whatever you prefer
Neat, this [1] looks like the project uses vttest [2] to test DEC VT terminal compatibility?
[1] https://github.com/ghostty-org/ghostty/blob/main/TODO.md
This is by far the best terminal emulator I've ever used.
Does this have sixel support?
No, and there are no plans to support it from the core developers. However, if there’s a PR, they might consider it. It supports Kitty Image Protocol
Congrats on the release! I'm excited to try this out.
Looks nice, but the Quick Terminal isn't instant, so I'll stick with iTerm2.
iTerm2 isn't instant either, but they feel about the same[0], although with iTerm2 the full screen Quake-mode (Quick Terminal equivalent) hides the MacOS menu bar, and Ghostty doesn't.
For my taste, I want a full screen terminal, with no menu bar, no delay, and no animations, which I can toggle with a global hotkey.
[0]: Actually, scratch that. I tested again, and iTerm2 opens more quickly.
Nice work! How does this compare to Warp?
- open source
- faster
- no AI bloat
- no telemetry
- no obnoxious warning banner if you run without admin access
- no VCs that will enshittify the app in a few years
- doesn't require an internet connection and an account to access motherfucking bash on your local machine
Preach!
Congratulations
I have honestly been so excited to try this after listening to several videos of mitchell talking about his work. What a christmas present!
A terminal is so dear to us software engineers, and this seems like such a love declaration to the terminal.
Time to spend hours tuning my config!
anyone know if this can be plugged into vscode to replace xtermjs?
no. it's planned for the future to make a libghostty that is embeddable, and it would be up to someone to make a modification for vscode to do that (not sure if it can be done with vscode's extension api)
VSCode would switch from xterm.js to a libghostty WASM build.
Nice addition.
Slightly more CPU heavy than Kitty.
in MacOS yabai tiling manager has problems dealing with native tabs, that's gonna annoy me like with Finder.
also in MacOS try pressing "Cmd + Shift + \", also works in Finder, it's there, it's cool, but I never use it.
That's neat but how do I select a panel afterwards? Arrow keys do nothing and hjkl start a search.
Could someone give me an idea why I would want to use this instead of any other terminal?
simplicity, feels zen-mode vs a lot of over-the-top-terminals these days
also (from the docs):
> Ghostty supports the Kitty graphics protocol, light/dark mode notifications, hyperlinks, and more. This lets terminal applications like Neovim, Zellij, and others do more than they could in other terminal emulators.
Application features are higher-level features that are useful for interacting with the terminal emulator itself. For example, Ghostty supports native tabs, splits, a drop-down terminal on macOS, theme switching on system dark/light mode, etc.
Same request. As someone who uses the standard Teriminal application on my MBP I'm wondering what benefits I might find from Ghostty
I think "vanilla" terminal users such as myself (e.g. I don't do a bunch of screen/tmuxing, I don't code in terminals etc) probably are not the target audience.
I've had zero issues with standard macos terminal ( once I realized how to speed up key repeat in system settings that is), so I assume I don't need this.
Same club here. I feel comfortable even with the crappiest terminal out there, as far as it allows me to write commands and read/copy output. Even the terminal in the Inferno OS felt good enough for me, like 20 years ago.
Makes a lot of sense, I fall into the same bucket as you so thank you for the response. I use the terminal to start up services and issue git commands. Beyond that, not too much.
any tips on how to install it if you have nix (without nixos)?
You can install it as a Flake using plain Nix. See: https://ghostty.org/docs/install/binary#nix-flake
nixGL is also likely required on non-NixOS Linux distros.
You can downvote this but Why they never put a single screen shots !
The whole home page is a screenshot and two buttons.
But not showing any of the native interface elements that are supposed to set this terminal emulator apart.
The home page is obviously going for 'quirky', but it's mad that it doesn't even say "...is a terminal emulator" anywhere. At first, I thought Ghostty was an ASCII animation library! I guess the name's suffix should've clued me in, but that's easy to overlook in a hurry.
Somebody please read this! I thought it was some goofy JavaScript demo or something. It wasn’t until I clicked on the download link that I realized it was something else entirely. I was thinking “why does this ghost JavaScript demo thing have a download link?” and I expected it to go to some GitHub page or something
The homepage is cool but on mobile it isn’t at all obvious this is software, let alone a terminal emulator. If this HN post didn’t already have like 1000 votes I probably wouldn’t have even bothered with testing the link. I would have said “cool ghost” and moved on with my day.
That being said, I am looking forward to trying this as an iterm2 replacement. Iterm2 has been my default terminal on Mac since forever… it was probably the first hit for “putty for mac” or something, and I probably installed it and never even considered trying something else. It’s always “just worked”.
I ran into some funkiness once I ssh’d into a FreeBSD box. The shell history was wonky, and goaccess wouldn’t launch at all, complaining about the terminal environment, which I’ve never seen. With that said, this looks like an awesome project and I’ll be following it closely!
any nix users aware of a derivation?
there's a flake in the official repo that works fine for me (nixos unstable)
Upon installing this, I went straight for this part of the documentation:
https://ghostty.org/docs/config/reference#macos-non-native-f...
Unfortunately the "tabs not working in non-native fullscreen" thing is a dealbreaker for me, so I will be switching back to iTerm 2.
But Ghostty as a whole looks promising. I like zig, zig-objc, MIT license, libghostty, config via text file. I will check back every month or so because I really want to use this. But my hate for macOS native fullscreen outweighs everything else.
Edit: Ok here we go, this is why it's not implemented: https://github.com/ghostty-org/ghostty/issues/392#issuecomme...
There's more than one workaround which is superior in my opinion: https://i.imgur.com/iWoqrM0.png
IIRC you can even use AppKit to remove the close/minimize/fullscreen buttons, so it would just be a blank bar.
You could go a step further and use private APIs / objc runtime voodoo to set the height of the titlebar to 0. That might outside your design philosophy though.
Also, FYI, clicking the green fullscreen button still uses macOS native fullscreen, so you definitely want to disable that button (which is a public AppKit API) when you have that option enabled
Overall nice, but I'm bummed to be running into some bugs regarding a few key binding assignments. Though, I could just be missing something due to the somewhat spartan docs.
Given all the time and hype, I'd have hoped that wrinkles like this would've been ironed out by launch time.
Back to Wezterm for now, but I'll certainly be checking back in at some point.
Is there a bounty for zero days?
Yes, your name will forever be on that pull request.
I’ve been very disappointed with Alacritty (no support for split term in favor of tmux) and WezTerm (insane config format, config has no business using a full fledged programming language) feature wise, so I have high hopes regarding Ghostty, can’t wait to try it!
Config being a programming language has insane advantages. Not only can I error check my config in vim or Visual Code, I can do insane things with logic that just don't work in other config file approaches. My laptop is connected to a 32" 4k monitor at work, standalone while traveling, and to a 27" 2k at home. WezTerm "knows" that, and sets things such as font size and line height automagically.
Even more, I can have split logic based on window size, window titles that show me who also checked out a file while I am inside an editor, even per-window color and font schemes.
All apps should use something like Lua for their config.
It's great that you (and many others) find it useful, but I genuinely have no idea what this is about. I switch my iTerm from my 13" MBP, 32" monitor, and iPad all the time, and I don't need any config to make it work. Maybe I just don't care enough about this stuff but I don't see what I would even configure this way.
Anyway, this is the reason I love the new wave of terminals, they bring new stuff on the table and anyone can find one they love. I just installed Ghostty and it works as I expect out of the box, with even less config (0) than I have on iTerm. And it's fast. Now I just hope they'll add a config UI some day (one of the reasons I prefer static config files: you can't really get a UI with a programming language) and I'll be in terminal heaven
If you don't care about this stuff you'll just as easily configure in a static key=value table whatever you like, lua doesn't limit you here. It's benefits are all optional
I've used wezterm for years and have never done anything fancy with the config, but this sounds awesome. I'd really appreciate it if you could link your config or a similar resource.
I just started using wezterm, my config isn't as mature or fancy, but I already found a spot where lua config is making me happy. I added a feature so I can command-click on Github PR numbers in Wezterm to take me to that PR on Github.com. Here's a permalink to the code: https://github.com/justjake/Dotfiles/blob/030c5d2b43e944df55...
The way this works in Wezterm is you can add regexes that match text in the terminal and format that text as links. So, I turn #(\d+) into "GITHUB_PR:$1" and then add a "on link clicked" callback to handle that special URL form by shelling out to `gh pr view --web $1` in the same working directory as the clicked pane.
I have a similar setup could you link your config? Id like to adapt it.
Hmmm this actually has me thinking of looking at WezTerm now hah
This is what I love about wezterm. I have a whole system that detects lightness and changes themes automatically, and also sends commands down to any open nvim instances to switch colourschemes there. The only downside is that there is no going back for me haha.
Lua is also simple enough that if you want to have a static config, you can have a single table that is very json-like.
> WezTerm (insane config format, config has no business using a full fledged programming language)
Insanely good ;)
Being able to quickly script minor functionality into my terminal emulator is my favorite thing about WezTerm
I solve that by using zellij locally (I use tmux remotely). Bonus points: I can close or upgrade Alacritty without losing session.
thanks Mitchell for all the hard work, it's nice to see quality and competition in this field
Best. Christmas. Gift. Ever.
For those who don’t have the background:
- created by Mitchell (founder of HashiCorp)
- it’s developed in Zig (and Mitchell recently pledge $300k to Zig foundation)
- uses native UI (which is super rare for cross platform app)
- amazingly performant. e.g. https://hachyderm.io/@mitchellh/111919642467789362
- has lots of amazing small details like below
https://hachyderm.io/@mitchellh/113330304084905500
https://hachyderm.io/@mitchellh/113443002518588524
https://hachyderm.io/@mitchellh/113166930440000852
This has been a passion project of his for the past 2-years and he’s completely MIT open sourced it. He’s spent a lot of time thinking and ensuring this project can persist in the future even without him.
Many people have tremendous respect for Mitchell’s technical abilities, as well as hugely respect how he operates (genuinely nice person and thinks about things long-term and does the hard work for sustainability).
Lots more to read at: https://mitchellh.com/writing/ghostty-is-coming
Ghostty, Mitchell, and the community around Ghostty, are all really amazing and pleasant to work with. I've had a lot of fun hanging out in the Discord, and sending in a couple of PR's. Everyone is really kind and accommodating. It's a pretty great example of how to run a community and open-source project, even this early on.
It doesn't work in Windows so how is it cross platform?
Also, I've been using terminals since DOS in 1990 and never once have I had to say, "I wish this terminal had more performance", so I'm not sure that performance is really relevant here. If I write a command to build my project which takes 10 mins to build, does it matter whether the terminal command ran in 10 milliseconds vs 1 millisecond?
In the linked speed demo one command was 8 milliseconds faster than another. Ok?
Is a terminal written in Zig better than one made in C++ or Rust? Again, unsure why its relavant at all.
> It doesn't work in Windows so how is it cross platform?
Linux and macOS are different platforms. Would calling it multi-platform make you happier?
> Also, I've been using terminals since DOS in 1990 and never once have I had to say, "I wish this terminal had more performance",
I remember the Windows terminal being unbearably slow in the past and wishing it had better performance.
Maybe this just isn’t for you.
If you use something like tmux you will notice higher latencies. Clearly, if you've been using terminals since DOS in 90s and the issue does not bother you, then you are likely happy with whatever it is you are using. If you want to look into the issue and read on methodology used before I recommend Dan Luu's from 2017 [1]
| In the linked speed demo one command was 8 milliseconds faster than another. Ok?
For day to day, ls'ing files that speed up won't matter too much. It is when you are tailing logs or working with multi-gig files that it matters.
are you still running DOS too?
Landing page and github README could improve:
- picture or gif is worth a thousand word
- it mentioned its cross-platform but I don't see support for Windows or Android - its better make it explicit it's only for macOS and Linux. Yesterday was looking for some nicer terminal on Android and was hoping ghostty could work.
- I like simple landing pages but this... is too simple and not much useful (only 2 buttons and ASCII image. Why even bother with such landing page and not just stick with github README?
- it doesn't provide me any fast information how to compares to different terminals and why I should switch from Warp
A noscript tag on the landing page with a link to the repository's readme would be appreciated (or ssr the react). There are a small number of users who don't enable javascript for every domain.
Cross platform doesn't mean every single platform, and it is not common of terminals supporting android
It's true that you wouldn't normally expect a terminal to support Android, but generally one does expect "cross-platform" to mean Linux, Mac, and Windows.
I disagree, the landing page is just fantastic.
I like the product as well, however, I need to use it for a week to comment.
I think it would help if there were more information about it, along with demos, to clearly communicate what it's about. At the moment I'm still confused because I see Ghostty has gotten so much attention, and I'm not clear why it's special.
I am sold thanks to the author's authenticity, but if I had not seen this, I wouldn't know what I'm looking at. So I think it would be very helpful if there were more info on the landing page.
Performance of course but native is a big part of ghostty’s appeal; there’s an article by a neovim dev that expands on that native part a bit - https://gpanders.com/blog/ghostty-is-native-so-what/
I have to enable JavaScript to make it load. It seems the animation on the page requires JavaScript. So, I agree with @pzo that a GIF would be better in this case.
I have been waiting to try this out for sometime now. I recently tried various terminal emulator tools and I settled on wave terminal. This is a list of these tools for reference. I would list tools that are on both MacOS and Linux which is comparable to this new emulator. But also because I did not try any on windows.
- Alacritty (https://github.com/jwilm/alacritty)
- waveterminal (https://github.com/wavetermdev/waveterm)
- Hyber (https://github.com/zeit/hyper)
- Kitty (https://github.com/kovidgoyal/kitty)
- Rio (https://github.com/raphamorim/rio)
- Tabby (https://github.com/Eugeny/tabby)
- Wezterm(https://github.com/wez/wezterm)
- Contour (https://contour-terminal.org)
- Extraterm (https://github.com/sedwards2009/extraterm)
- Warp (https://www.warp.dev/)
I didn't like that Warp is VC product as I don't like essential tool like a terminal in my workflow to be dependent on proprietary VC product.
We've added Ghostty to the terminals section of Terminal Trove for comparison.
https://terminaltrove.com/terminals/ghostty/
You can find all terminals for comparison below and also the list of terminals (including Ghostty)
How come TT's categories aren't listed alphabetically?
Do you mean here?
https://terminaltrove.com/categories/ (1)
Or any other category on the page? (2)
We can change (1) alphabetically if that is what you mean.
Yes, those categories. I should have been more explicit.
I found it confusing to look for a category among the unsorted boxes. It would help if they were sorted.
It is now sorted on the categories section.
The one feature I clicked for is RtL languages support, could that be added to your comparison table please
We will add this to the table, is there a quick test to check if a terminal has RtL / bidirectional language support?
If there are any other features you look for in a terminal not on the comparison table please let us know!
Thanks! Another important factor I find is weather the configurations is file based or menu based.
I dunno if this was obvious to everyone but OP is one of the founders of Hashicorp
[flagged]
Can you please greet the things that are new to you in a more welcoming spirit? At least as long as you're posting here. What we want on this site (other sites may differ) is a spirit of curiosity [1]. If you post in a "you're doing it wrong" or "you're not providing me with the information I deserve" spirit, that not only isn't the curiosity we're hoping for, it dampens the entire thread for everybody.
https://news.ycombinator.com/newsguidelines.html
[1] https://hn.algolia.com/?dateRange=all&page=0&prefix=true&sor...
Edit: I just saw https://news.ycombinator.com/item?id=42519739, which means you already covered the point, but I'll leave this up pour encourager les autres.
This isn't a company, I'm not trying to convince you to use it, this is more of a personal art project. If that doesn't vibe with you that's completely fine. You're happy to not use it. I'm happy whether you use it or not. It's all good mate.
(The first sentence in the docs page does explain what it is but if that's too much for you, it's all good.)
I had the same problem. I digged through it only cos it was #1 in HN so I knew something's up. If I had come across this any other way, I wouldn't bother looking past the home page. I don't think you have to be selling the project (financially or otherwise). But you will lose a lot of potential users cos you didn't add the description you have in docs right there in the home page.
> Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.
Now after reading it, the name makes so much sense as well. GhosTTY. My first thought was alternative to ghost.org or something.
But... don't you want people to use it? You seem passionate about it otherwise.
I'll admit, I almost didn't click past the animation either. I did, and the doc quickly answered "what is it?", but why not just put that sentence on the landing page? I don't get the unnecessary obscurity either.
Fair. And I'm not here to convince you to cater to everyone. The explanation might be on the first page of the doc, but unless you click on it, you won't know. My prior experience is that docs don't necessarily tell "what" but rather "how" which means that you need to know why you're there. Their weight also varies. Thus, I learned to not speculate how many clicks and real time it's going to take me to learn about the project. If the author doesn't want me to know it, I won't be digging into it.
I enjoy personal projects and if you're saying that this is your personal - all the best! Given high praise count it's likely very good.
I think the documentation does a very good job in the first sentence of describing the project. Not sure why the tone of the commenter was so offended they had to click on a single button to find that.
> You're happy to not use it. I'm happy whether you use it or not.
I think you misunderstood the OP. The criticism was about the landing page, not the project.
And fwiw, it's not unwarranted. Putting the words "terminal emulator" somewhere on the page would make less people bounce off. You may be fine with them bouncing off, but still, I think it was meant as constructive criticism.
> I hate things in "if you know then you know" category. This is one of them.
A little too constructive I guess.
You're right, maybe I read the post a bit too charitably.
It's constructive criticism. You don't have to respond with "Well get fucked then"
It's okay to filter people out who are too uninterested to click a "Documentation" link yet vocal enough to come post about it.
It works for https://www.midjourney.com/home and apparently this project too with its 1100+ upvotes.
No, it isn't okay to filter people out for giving helpful feedback solely because you don't like the feedback.
It's especially not okay to be so rude on HN. "Please don't post shallow dismissals"
I would think, or hope, that this guideline is geared towards protecting a years-long effort such as writing a performant, feature-rich terminal emulator, rather than a comment which takes 5 minutes max to draft.
Not clicking on a documentation link on a technical project is the definition of a shallow dismissal in my opinion.
No. The rule is about protecting a culture. Having a brief description on the front page is an eminently reasonable suggestion. Mitchell's response was a shallow dismissal of the person (calls out "you" five times in six sentences) and was against site guidelines.
Which culture would that be? Starting off a post with “I hate things… this is one of them”?
I think the discussion here would be different if the tone was more moderated. Seems like you’re dying on a hill for the right to be abrasive without consequence.
The original commenter posted a shallow dismissal by putting the effort into posting a comment without clicking a single button on the page :)
No. He didn't post any kind of dismissal at all.
The feedback provided wasn't helpful. You're absolutely correct in that shallow dismissals aren't kind, but you're wrong about who was shallow and who was not. OP didn't dismiss anyone, nor was their comment shallow. And they don't owe you or anyone else anything as far as "explanation" goes, and they can filter out whoever the hell they want. Click the link and look further, or don't.
Meanwhile, dr_ketyn's comment was both rude and not constructive in the slightest (here's a tip: starting feedback with "I hate this" isn't constructive or kind).
> I hate things in "if you know then you know" category. This is one of them.
> Documentation? Reading a manual for an unknown thing?
Well. Yes? Maybe I'm assuming too much, but I feel like the target audience here (terminal emulator 'enthusiasts') either know about this already or are totally willing to go over to the manual to read what it is. The very first section upon opening the documentation explains it succinctly: Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.
I wouldn't word it that strongly, however I would've like to see the first line of the documention on the homepage :)
I'll give it a spin later, looks interesting.
Well, it is named GhosTTY. TTY being in the end, it is a terminal emulator. That's obvious to me. Just like AlacriTTY, PuTTY, KiTTY, etc.
I swear this makes 1000% sense but it never occurred to me before.
I thought it was some modern cowsay with a ghost in the tty.
The description is in the documentation. What’s the trouble by clicking on it? It won’t take a second.
I don't know whether it's going to take a second or half a minute. I also don't know whether there will be an answer on the first page, or there's going to be a cute image and then I'll need to find "Getting Started" to learn how to get started with unknown project. My subjective experience on the internet is that if the gate isn't labelled, there's unlikely value on the other side.
> I don't know whether it's going to take a second or half a minute.
You know how you could find out how long it's going to take? By clicking the button. It's free. It's easy. Hell, it would've taken you less time to click that single button and read the first sentence than it would have taken you to post this comment.
You didn't even bother to spend half a second actually opening the documentation page and then you come here complaining about how you don't know whats in the documentation. This is entirely a problem of your own creation. What gives?
People who are interested in this are talking about it because they're interested in it. Nobody is trying to convert you.
People who are interested in things learn about them at different times. You make it seem like it's "learn about it at the outset or gtfo".
And it might be that next month there's a different homepage with more details. For a launch where all "marketing" has been via blog post, discord, and discussions across various nerdy social media sites…I'm more than happy for them to have some fun to celebrate this.
There are people who have been watching this for a few months waiting for it to go 1.0 — and, at least on day 1, "if you know, you know."
Whatever dude, you hating because of a missing label on the intro page.
Yeah I agree. To me the "If you know you know" mentality is a negative signal about something, suggesting that something is possibly seen as cool/trendy (which is a negative signal against being the most practical/utilitarian/unsexy solution).
Yeah I was wondering why there’s an ascii animation at #1 on HN. Flash back to 2008.
just different tastes i guess
midjourney still has the same thing on their homepage and i dig it
no windows version?
The little it says about what this even is seems to be wrong. This is not cross-platform at all
Windows is a third class citizen when it comes to the development world.
It's its own doing
Lmao this statement is so funny.
It works on both macOS and Linux.
Could GPT5 or Claude written this from scratch?
In the same sense that a million monkeys on typewriters could theoretically produce Shakespeare.
of course not
It's pretty slow and buggy for me idk
Is it mining cryto? Caused my mac to slow down, CPU usage shot up to 100%, and it dropped right down after I quit it.
Sadly another terminal that doesn't seem to support "Quake style" dropdown (that I can find)
Having my terminal session available on a hotkey has become a critical part of my workflow
except it does? View -> Quick Terminal.
I've built from source on Linux, I don't use MacOS.
This just doesn't seem to work :(
quick-terminal-position=top quick-terminal-screen=main quick-terminal-autohide=false keybind=f9=toggle_quick_terminal
Edit: Joined the discord, turns out this feature is MacOS only :/
It's a macOS-only feature, for now.
GTK does not support the Wayland protocol to implement a Quake style terminal.
I think this being part of the terminal is sort of weird. I've had this functionality in my window managers for years. First xmonad, now awesomewm. It's called scratch pads.
Should of used QT.
> error(gtk): unable to get current color scheme: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.portal.Desktop was not provided by any .service files
You would have the same problem with Qt. You don't have the xdg-desktop-portal and an associated backend running. If you're going to build your own Linux system, you should be aware of why something is broken before making a complaint to the wrong people. In this case, you misconfigured your own system.
Odd how a hundred other applications have no issues whatsoever then.
This Portal is something from flatpak btw, no other terminal depends on it.
This is likely some cancer from GTK that metastasized, anything using GTK has to lock it down tight to rely on the absolute minimum of "features".
Should have used a grammar checker.
You mentioned that Ghostty gets around 500 FPS, but I tested it myself and only got 160 FPS on M1 Pro (WezTerm gets 400 FPS). What can be the reason?
Am I the only person wondering why we need 100 terminal emulators when there are only 2 or 3 solutions to using command line tools more like a REPL? (to some degree warp, some bash support in hydrogen, advanced edit mode of powershell) I don't care for using "fancy" TUIs all i want is better tooling to interact with these that does not feel like 1970 and more like the chrome console.
> I saw tradeoffs that I didn't like. I saw features that I wanted. I saw performance that I could improve. I saw stagnation. There are many fantastic terminals out there and you should use them if they work for you. But I wanted something different and thought maybe others did too.
This motivation is pretty clearly stated in the article.
Some people use "fancy TUIs" (the famous editors vim and emacs surely count) and if you don't, feel free to ignore this new option.
> Ghostty is a fast, feature-rich, and cross-platform terminal emulator
Doesn't have a binary for Windows so it's not "cross-platform" yet.
The minimum number of platforms for “cross-platform” software is by definition two (2).