
Mitchell Hashimoto
@mitchellh • 202,103 subscribers
Creator of Ghostty. 👻 Prev founded @HashiCorp, created Vagrant, Terraform, Vault, and others.
Shorts
Videos

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 Hashimoto362,273 views • 14 days 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 Hashimoto346,812 views • 4 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 Hashimoto181,166 views • 2 months 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 Hashimoto69,985 views • 1 month 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,194 views • 3 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 Hashimoto111,397 views • 2 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,340 views • 6 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 Hashimoto155,122 views • 5 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,060 views • 2 years 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 • 11 months 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,530 views • 5 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,086 views • 5 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 Hashimoto115,724 views • 11 months ago

Have you ever wanted your terminal to look like an authentic CRT? Of course you have. Well, LOOK NO FURTHER because the future (or is it the past?) is now. And people ask why you'd ever need a GPU-rendered terminal.... HAH! My yak has no more hair to shave. This demo is crazier than it seems: you can actually specify any custom shader, and the shader API is compatible with ShaderToy, so you can take any off-the-shelf shader from ShaderToy and this works. The tech behind this is super over the top. Ghostty is cross-platform and uses Metal directly on macOS and OpenGL on Linux. Metal and OpenGL use different shading languages. No problem! You specify the custom shader in GLSL (OpenGL language) and it’s automatically translated to SPIR-V (binary IR) then automatically translated to MSL (Metal language). That all happens at runtime because why not. Yeah but this has to kill your battery right? Nope! <1% CPU and <1% GPU because computers are fast (especially when you're working at a relatively low level).
Mitchell Hashimoto200,095 views • 2 years ago

This is legitimately very good. This is how voice assistants should be! Fairly responsive, very natural, can interrupt freely. I am extremely skeptical about anything AI tells me but boy I really wish Siri or Alexa was like this. (Location isn’t secret, I’m not usually here)
Mitchell Hashimoto70,234 views • 10 months ago

Let's talk about scrollbars in Ghostty. Didn't have time to blog, so decided to record a ~10 minute video describing the background on this problem and walk through how I modified the core of Ghostty to support scrollbars (coming soon!) If you like this content let me know.
Mitchell Hashimoto49,709 views • 7 months ago