Mitchell Hashimoto's banner
Mitchell Hashimoto's profile picture

Mitchell Hashimoto

@mitchellh226,480 subscribers

Co-founder of @Superlogical. Creator of Ghostty. 👻 Prev founded @HashiCorp, created Vagrant, Terraform, Vault, and others.

Shorts

Sharing some more UI previews for Superlogical, this time the "tab peek." If you three-finger swipe down, you can "peek" at the other session tabs. These are live-updating, metal-rendered previews including splits. If you keep dragging, you enter a "mission control" style mode. This is one of those UI patterns that once you get used to, you mindlessly find yourself doing it ALL THE TIME. It's a great way to quickly take a look at everything thats going on. You aren't reading the mini text of course, but the shape of it tells you a lot about where things are. The peek pushes the terminal down off screen, it doesn't resize it, so it doesn't force any weird reflow or anything either. There's a lot more to talk about, especially about how this interacts with how we expose what needs attention so you can easily find the terminals/sessions/etc. that require your attention. Of course, you'll be able to drive this with the keyboard too. :) As always, a disclaimer: this is all early work subject to change, just trying to share some of what we're building in public. A lot of the UI experiential design is almonk so follow him for more updates too!

Sharing some more UI previews for Superlogical, this time the "tab peek." If you three-finger swipe down, you can "peek" at the other session tabs. These are live-updating, metal-rendered previews including splits. If you keep dragging, you enter a "mission control" style mode. This is one of those UI patterns that once you get used to, you mindlessly find yourself doing it ALL THE TIME. It's a great way to quickly take a look at everything thats going on. You aren't reading the mini text of course, but the shape of it tells you a lot about where things are. The peek pushes the terminal down off screen, it doesn't resize it, so it doesn't force any weird reflow or anything either. There's a lot more to talk about, especially about how this interacts with how we expose what needs attention so you can easily find the terminals/sessions/etc. that require your attention. Of course, you'll be able to drive this with the keyboard too. :) As always, a disclaimer: this is all early work subject to change, just trying to share some of what we're building in public. A lot of the UI experiential design is almonk so follow him for more updates too!

349,243 views

Ghostty (and libghostty) now fully implement the Kitty clipboard protocol to allow apps to read/write non-textual data (like images!). Ghostty is the first to implement the full protocol outside Kitty. The biggest program to support this is probably Claude Code. Demo below. This will be part of Ghostty 1.4, available in nightly now. Available in libghostty now.

Ghostty (and libghostty) now fully implement the Kitty clipboard protocol to allow apps to read/write non-textual data (like images!). Ghostty is the first to implement the full protocol outside Kitty. The biggest program to support this is probably Claude Code. Demo below. This will be part of Ghostty 1.4, available in nightly now. Available in libghostty now.

98,686 views

Here's the ATC audio clip of my final landing ever. From humble beginnings in a DA40 to ~600 hours in a Vision Jet at 31,000 feet, I love to fly. Due to my growing personal and professional obligations, my final and best ADM decision as a PIC was to stop. This was my toughest landing. The skies were clear. The wind was straight down the runway. It's my home field I've landed at hundreds of times. But I knew it was my last. You can't hear it in the clip but my voice felt shaky. I'm doing my best to focus on a safe landing but I knew that was the last "cleared to land" readback I'd ever give. The landing was smooth. I parked the jet, locked her up, and gave her one last pat on the nose. We had good times. I'm no longer a pilot. Locking in for what's next. 🫡

Here's the ATC audio clip of my final landing ever. From humble beginnings in a DA40 to ~600 hours in a Vision Jet at 31,000 feet, I love to fly. Due to my growing personal and professional obligations, my final and best ADM decision as a PIC was to stop. This was my toughest landing. The skies were clear. The wind was straight down the runway. It's my home field I've landed at hundreds of times. But I knew it was my last. You can't hear it in the clip but my voice felt shaky. I'm doing my best to focus on a safe landing but I knew that was the last "cleared to land" readback I'd ever give. The landing was smooth. I parked the jet, locked her up, and gave her one last pat on the nose. We had good times. I'm no longer a pilot. Locking in for what's next. 🫡

105,414 views

Jump to any open terminal by title, working directory, or tab color. A little highlight animation shows the terminal you jumped to so you can find it more easily. Available very soon in nightly macOS builds.

Jump to any open terminal by title, working directory, or tab color. A little highlight animation shows the terminal you jumped to so you can find it more easily. Available very soon in nightly macOS builds.

227,602 views

Ghostty on macOS now also has native GUI for showing progress bars reported by OSC 9;4. This is, as far as I know, the first macOS terminal to support this (will be part of Ghostty 1.2, coming soon. Available now in tip releases). Esc sequence and script in quoted post.

Ghostty on macOS now also has native GUI for showing progress bars reported by OSC 9;4. This is, as far as I know, the first macOS terminal to support this (will be part of Ghostty 1.2, coming soon. Available now in tip releases). Esc sequence and script in quoted post.

179,650 views

Still a lot of polish to go, but soon update popups will never show up in your demos again Romain Huet or anyone else. 😎

Still a lot of polish to go, but soon update popups will never show up in your demos again Romain Huet or anyone else. 😎

148,609 views

Ghostty on macOS now copies multiple formats into the clipboard. If you paste into rich text apps now, it'll preserve formatting! If you paste plain text, that'll work too. I think Ghostty may be the only macOS terminal other than the built-in to do this. Coming soon to GTK.

Ghostty on macOS now copies multiple formats into the clipboard. If you paste into rich text apps now, it'll preserve formatting! If you paste plain text, that'll work too. I think Ghostty may be the only macOS terminal other than the built-in to do this. Coming soon to GTK.

139,752 views

The macOS unobtrusive update feature is now shipped to tip releases (aka. OpenAI Demogate). Demo shows a real update! Beyond visuals, also mproved functionality, e.g. tip updates will now link to a GH compare view between your commit and the latest in lieu of release notes.

The macOS unobtrusive update feature is now shipped to tip releases (aka. OpenAI Demogate). Demo shows a real update! Beyond visuals, also mproved functionality, e.g. tip updates will now link to a GH compare view between your commit and the latest in lieu of release notes.

119,195 views

Ghostty now has scrollbars for macOS drawn using native macOS GUI widgets of course! Available now in tip releases. GTK will follow very shortly. 50% of Ghostty memes now dead.

Ghostty now has scrollbars for macOS drawn using native macOS GUI widgets of course! Available now in tip releases. GTK will follow very shortly. 50% of Ghostty memes now dead.

108,811 views

Work in progress, but too excited not to share. The upcoming Ghostty website homepage. Colors are not final. The vibe is final though.

Work in progress, but too excited not to share. The upcoming Ghostty website homepage. Colors are not final. The vibe is final though.

150,352 views

Ghostty now has a keybinding system powerful enough to enable a "vim mode." This is built by composing multiple Ghostty features together, meaning you can create any modes you want (emacs, tmux, whatever). We'll keep adding more bindings to make these even more powerful! The config:

Ghostty now has a keybinding system powerful enough to enable a "vim mode." This is built by composing multiple Ghostty features together, meaning you can create any modes you want (emacs, tmux, whatever). We'll keep adding more bindings to make these even more powerful! The config:

68,592 views

Getting close with this one! Initial merged work will only support moving splits to other split locations, but eventually will support dragging out to new windows and tabs. This isn't merged, there's still polish to do (it is on a pushed branch though). Drag source had to be AppKit (NSDraggingSource) but drop target and all the drop zone overlays I was able to use SwiftUI completely.

Getting close with this one! Initial merged work will only support moving splits to other split locations, but eventually will support dragging out to new windows and tabs. This isn't merged, there's still polish to do (it is on a pushed branch though). Drag source had to be AppKit (NSDraggingSource) but drop target and all the drop zone overlays I was able to use SwiftUI completely.

59,618 views

Command palette coming to Ghostty, implemented with native UI of course. macOS initially but GTK will follow and be part of the same tagged release, since there's already a mostly complete open PR. Almost all keybinding actions available, will be able to customize entries too.

Command palette coming to Ghostty, implemented with native UI of course. macOS initially but GTK will follow and be part of the same tagged release, since there's already a mostly complete open PR. Almost all keybinding actions available, will be able to customize entries too.

103,142 views

Getting closer now. Navigable search results are now in. The last hard problem is done. I'm now starting the macOS GUI for all of this (GTK will follow).

Getting closer now. Navigable search results are now in. The last hard problem is done. I'm now starting the macOS GUI for all of this (GTK will follow).

61,166 views

Even with close confirmation I sometimes close my terminal and think "OH FUCK NO." Coming soon to Ghostty, you can undo that. 🥰 (Technical details: we keep the terminal running for a configurable time in the background before terminating for real, similar to email undo send). (macOS only for now, AppKit APIs provide a nice undo manager implementation that eases this quite a bit. I still have to do research on GTK for Linux.)

Even with close confirmation I sometimes close my terminal and think "OH FUCK NO." Coming soon to Ghostty, you can undo that. 🥰 (Technical details: we keep the terminal running for a configurable time in the background before terminating for real, similar to email undo send). (macOS only for now, AppKit APIs provide a nice undo manager implementation that eases this quite a bit. I still have to do research on GTK for Linux.)

87,223 views

They said it couldn't be done!* But it's getting close! Search match styling will change, and there is no GUI for this yet. But we now have an end-to-end connection between the renderer, input stack, and search internals. *: Nobody said it couldn't be done.

They said it couldn't be done!* But it's getting close! Search match styling will change, and there is no GUI for this yet. But we now have an end-to-end connection between the renderer, input stack, and search internals. *: Nobody said it couldn't be done.

51,572 views

Cursor position and color uniforms are now available to custom shaders in Ghostty, enabling cursor animations (and other effects). Video below is a rough demo of something simple. Can't wait to see what the custom shader community does with this. :) Docs:

Cursor position and color uniforms are now available to custom shaders in Ghostty, enabling cursor animations (and other effects). Video below is a rough demo of something simple. Can't wait to see what the custom shader community does with this. :) Docs:

70,117 views

First major Tahoe PR for Ghostty, first addressing the most visually obvious things: titlebar/tab styling. Everything adapts except `titlebar-style = tabs` looks pretty different. I think it's kind of nice, though! Ignore the bg color glitches, they're just screenshot artifacts. There's definitely some readability issues, and glass doesn't look great when there's nothing actively animating underneath it. Those are both not currently my problem, though, and I hope that Apple addresses them in future betas.

First major Tahoe PR for Ghostty, first addressing the most visually obvious things: titlebar/tab styling. Everything adapts except `titlebar-style = tabs` looks pretty different. I think it's kind of nice, though! Ignore the bg color glitches, they're just screenshot artifacts. There's definitely some readability issues, and glass doesn't look great when there's nothing actively animating underneath it. Those are both not currently my problem, though, and I hope that Apple addresses them in future betas.

60,010 views

Videos

mitchellh's profile picture

Ghostty is getting automatic scrollback compression, resulting in 70 to 90% less physical memory usage. It happens incrementally when idle, so it had no measurable effect on IO throughput. I'm not aware of any other mainstream terminal that does this. Demo video below! The gains let us increase the default scrollback limit from 10MB to 50MB, because on average a full scrollback will still compress smaller than the prior limit. More history, for free. ("Unlimited", disk-paged history is on the roadmap too) Let's talk about cool implementation details, cause this was fun. First, the data structure and memory layout ("PageList") I wrote two years ago finally pays off! One of its traits is that screen memory is backed by a linked list of page-aligned, page-sized (or page-multiple-sized) blocks. Because each block is page-aligned and page-sized, we can use madvise to discard its physical backing while keeping the virtual address space reserved. Compressed pages therefore disappear from resident memory, but decompression is still guaranteed because the address space remains valid and we simply fault new pages back in as needed. We use the same trick for our memory pools, too. Unallocated pool pages don't count as resident memory, saving another couple of MB per terminal. This functionality is also available to libghostty-vt consumers via new `ghostty_terminal_compress` APIs. The consumer decides when the appropriate time to compress is and the APIs advise on compressability.

Mitchell Hashimoto

166,874 views • 1 month ago