
Mitchell Hashimoto
@mitchellh • 226,480 subscribers
Co-founder of @Superlogical. Creator of Ghostty. 👻 Prev founded @HashiCorp, created Vagrant, Terraform, Vault, and others.
Shorts
Videos

Quick Superlogical demo to end the week. This demo is just of the basic functionality, but I want to highlight just how FAST it is. There's a WHOLE lot more functionality already present and coming but I wanted to keep the demo short. But seriously, check out that speed. I'm showing the macOS app here and I get asked a lot so let me just say up front: its not macOS only. We're still figuring out exactly what platforms will be stable enough for the initial public release, but we're working on others. In particular, the web interface is very functional but I'll demo that another time (or someone else will). This is also all showing off the architecture I previously talked about for terminal multiplexing which is significantly different from other mainstream multiplexers: this is all a custom binary protocol where the server is maintaining N replica distributed terminal state machines. It works! Tons of hard work going into this by the team almonk Hector Simpson jack. Hope we can bring you something you can use soon. ❤️ Happy to answer questions in the replies.
Mitchell Hashimoto1,346,487 views • 5 days ago

A video explaining a handful of the tricks we use to optimize for memory within the Superlogical server: in-memory compression, moving file descriptors between event-driven and blocked threads dynamically, full terminal state binary snapshot/restore in microseconds, and more!
Mitchell Hashimoto48,741 views • 14 hours ago

Let's talk a bit about what makes the Superlogical multiplexer different architecturally from traditional terminal multiplexers! There's a lot (a LOT) more coming, but wanted to share a little bit about the terminal-specific part compared to tmux and zellij.
Mitchell Hashimoto546,454 views • 1 month ago

Work-in-progress: a new split layout framework for nearly all Apple platforms (macOS, iOS, etc.). A mix of SwiftUI and raw CoreAnimation. The goal is "every frame perfect" animation. Still very wip, but getting there! Goal is to bring it back to Ghostty eventually.
Mitchell Hashimoto340,745 views • 2 months ago

This is why PR diff speed matters. This isn't a dunk on GitHub specifically, because GitLab, Forgejo, etc. are all equal or worse. But this is the kind of thing that drives me nuts, because this is a core workflow and its slow enough I literally take my hands off the keyboard. Btw, when my mouse jiggles on the left, its because the page is literally skipping frames and I'm instinctively shaking my mouse to see if it'll respond. And on the keyboard input you can literally here me finish typing before a letter even shows up. For someone like me who is an expert at these tools, my brain navigates the tool dramatically faster than it can keep up, and that is not good. The tool should not get in the way.
Mitchell Hashimoto366,909 views • 3 months ago

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 Hashimoto166,874 views • 1 month ago

Ghostty nightly now supports the `click_events` extension introduced by Kitty and supported by Fish. If you're using Fish 4.1+, you can click (no modifiers!) anywhere at a prompt to move the mouse. I believe Ghostty is the first to support this extension outside of Kitty. As far as as I can find, the only shell to support this is Fish (4.1+) and the only terminal to support this previously is Kitty. It'd be great for more of both ecosystems to support this. Other terminals do support moving the cursor with the mouse to some extent (Ghostty included since 1.0), but do so by another, more fragile mechanism: when you click, it just best-effort calculates a number of synthetic left arrow key inputs to pretend to move your cursor. This is super fragile because it can't take into account shell behaviors particularly around indention, multi-line, and if you're not at a prompt at all... The `click_events` extension allows Ghostty to know when you're at a prompt line, and works by encoding a mouse click event while at a prompt line to the shell. The shell then takes over and handles all the logic of moving the cursor, which makes the most sense! PR:
Mitchell Hashimoto347,214 views • 7 months ago

Split layout framework update. Since the last video: focus views animate, corner drags can move both axes, cross-window drag and drop with animation, all animations backed by CoreAnimation, and full accessibility framework integration (e.g. compat with VoiceOver). The focus view work was the hardest and most complicated. We allow caller-provided SwiftUI views for the focus style, but have to drop that back to a native AppKit/UIKit hosted view for smooth CoreAnimation integration with our other animations so they move in lock-step with our other stuff. Lot of work to get that to work, but I think it turned out great. The caller lives in easy SwiftUI land we handle that complexity. The animation timings and curves need to be tweaked. I think some animations are too long or don't feel right. But thats just parameterization at this point...
Mitchell Hashimoto104,095 views • 2 months ago

Ghostty 1.3 is going to have a preview of AppleScript support. All windows, tabs, splits, terminals are exposed via AppleScript. For macOS users, this satisfies some of the most common requests: broadcast commands, automatic layouts, jump to working directory, etc. PR here: I also think this is an incredibly important feature to ship early/now so agentic tools like Claude and Codex can take advantage of a scriptable Ghostty on macOS. I still plan on a generic cross-platform scripting/plugin API (two separate things), but integrating with native features like AppleScript is entirely in scope of the Ghostty mission and like our Shortcuts integration it importantly lets you connect multiple sources since AppleScript can control multiple applications from one script. Note I normally don't ship features so down to the wire with a release, but this one is very isolated in its impact and I'm going to explicit document it in the release notes and website as a preview since I fully expect we're going to iterate a lot on the objects and commands exposed. From a security perspective, Apple already prompts for permission to control different applications so we're covered, but there is a master kill switch you can put in the config, too.
Mitchell Hashimoto182,058 views • 6 months ago

Ghostty will now auto-generate a full, cohesive 256-color theme from just the base 16-color palette. This makes it significantly easier to make custom themes that are beautiful (just define 16 colors). See the demo below showing multiple themes fully generated. Thanks to Jake Stewart who contributed this to Ghostty and made a nice write-up explaining the background and approach:
Mitchell Hashimoto174,683 views • 6 months ago

Well, it has happened. Ghostty on macOS now has search. This is now in tip releases, I'm certain there's a bunch of polish and bugs to work through over the next months, but more than enough time for it to be rock solid for 1.3 next year. GTK to follow soon. Gobble, gobble. 🦃🦃
Mitchell Hashimoto221,773 views • 9 months ago

From empty repo to a functional minimal standalone terminal based on libghostty in 2 hours, presenting Ghostling! ~600 lines of C and you get extremely accurate, performant, and proven terminal emulation. Feature list: - Resize with text reflow - Full 24-bit color and 256-color palette support - Bold, italic, and inverse text styles - Unicode and multi-codepoint grapheme handling (no shaping or layout) - Keyboard input with modifier support (Shift, Ctrl, Alt, Super) - Kitty keyboard protocol support - Mouse tracking (X10, normal, button, and any-event modes) - Mouse reporting formats (SGR, URxvt, UTF8, X10) - Scroll wheel support (viewport scrollback or forwarded to applications) - Scrollbar with mouse drag-to-scroll - Focus reporting (CSI I / CSI O) - And more. Effectively all the terminal emulation features supported by Ghostty! The libghostty C API is not formally released, but I built this project to prove its ready to go. 😎
Mitchell Hashimoto112,161 views • 5 months ago

The lack of "feature design" is why so many products over time feel hollow or messy. This isn't visual design. This isn't architectural design. I thought that a short video lecture of what feature design is and a real case study of applying it in Ghostty would be helpful. Feature design is the planning step behind how you're going to solve one or more user problems with a product feature: what that feature looks like, how it feels, and not just how its going to tactically solve these specific problems, but how that solution is going to interface with the edges of other features that currently exist or are planned to exist in the future.
Mitchell Hashimoto156,462 views • 8 months ago

First I optimized CPU, then memory, now I'm onto the renderers (Metal first). Scrolling Neovim now sustains ~175fps easily (vsync off of course). More room for improvement, but this is already best-in-class (I can't find a terminal at the moment that does better on macOS). The road to get here was long. To quote Thorsten Ball I've been "moving the chess pieces into place over the past few months." I'll write about it in a devlog, eventually. And, people will inevitably say "high fps doesn't matter for a terminal." And yeah, maybe, but what's the fun in that. My answer to "why" is "because I can!" (Disclaimer: I use the Japanese bible as a sort of stress test for certain IO tests. I'm not religious and there isn't meant to be any sort of hidden message in this.)
Mitchell Hashimoto374,209 views • 2 years ago

Libghostty can now be used to fuzz TUIs, thanks to Oskar Wickström + Antithesis. They already found bugs in multiple including btop. I always imagined libghostty would be useful for testing TUIs, super happy to see this is both practical and valuable. This is another example of where speed matters! "Why does Ghostty need to be so fast?" Well, if you're running hundreds or thousands of unit tests that each use a clean in-memory terminal, you want that to be fast. If you're fuzz testing and trying to push an unlimited amount of data through a terminal, you want that terminal to be fast. So many people got hung up on "why does my terminal _GUI_ need to be fast" without connecting one more dot and realizing the GUI is only fast if the core is fast, and the core being fast unlocks a hell of a lot more. Like this.
Mitchell Hashimoto72,127 views • 4 months ago

Ghostty's icon is now Tahoe compatible: supports Liquid Glass, light/dark mode, and tinting. We had to lose a tiny amount of detail but very hard to notice, and the new effects make it look super clean. Videos of the various styles and effects attached. Icon by Michael Flarup.
Mitchell Hashimoto184,561 views • 1 year ago

Here's a short video (4m) that goes into more detail on how "vim mode" works in Ghostty and the multitude of features that are composed together to make it all work. This showcases how powerful Ghostty's keybinding system is getting! And don't worry, I plan on shipping a built-in "vim mode" table (unbound by default) so you can bind an opinionated "vim mode" with a single line in your config. But, if you want to modify it in any way, that's completely possible because this all works via standard config.
Mitchell Hashimoto87,952 views • 8 months ago

Ghostty on both macOS and Linux now support marking a terminal as read-only. In this mode, you can still search, scroll, and select text, but no input is sent to the running program. If you have something scary you really don't want to mess up, this is perfect! You can toggle this with the command palette, a keybinding (bind "toggle_readonly"), the context menu, or the main menu.
Mitchell Hashimoto89,312 views • 8 months ago

The non-native mind can't comprehend this level of platform integration. Ghostty is the only terminal on macOS other than the built-in one that provides any Shortcuts. Also, reminder that Ghostty is actually cross-platform with Linux too. (Sound on for explanation)
Mitchell Hashimoto116,208 views • 1 year ago