
Mitchell Hashimoto
@mitchellh • 233,530 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,428,445 görüntüleme • 1 ay önce

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 Hashimoto549,325 görüntüleme • 2 ay önce

New week new demo! Today I want to showcase the CLI to control the Superlogical multiplexer. The CLI is an extremely powerful tool for automation and hooking into other tools like editors, agentic coding tools, and more. And, it's super fun! Everything you can do in the GUI, you can do via the CLI. Actually, you can do more in the CLI. You can create sessions, run commands, make splits, move things around, change focus, simulate any input device (key/mouse/etc.), wait on scripts, and more. There are a couple unique parts of Rex I'm showing off here too: our streaming event system that any client can hook into (or script). And the terminal-specific API to retrieve information like a JSON object of the running process. I hope this demo lets your imagination run free of where you might slot something like this into your existing tools.
Mitchell Hashimoto205,352 görüntüleme • 1 ay önce

A quick look into remote persistent sessions with Superlogical! Not just remote sessions, but some functionality like remote directory lists, too. Superlogical can actually be a full SSH replacement (I don't run SSH on my servers anymore), and I talk about that briefly, too.
Mitchell Hashimoto197,201 görüntüleme • 1 ay önce

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 Hashimoto342,014 görüntüleme • 3 ay önce

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 Hashimoto367,684 görüntüleme • 5 ay önce

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 Hashimoto91,105 görüntüleme • 1 ay önce

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 Hashimoto167,505 görüntüleme • 3 ay önce

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 Hashimoto348,109 görüntüleme • 8 ay önce

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 görüntüleme • 3 ay önce

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,356 görüntüleme • 7 ay önce

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 Hashimoto175,446 görüntüleme • 8 ay önce

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,943 görüntüleme • 10 ay önce

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,702 görüntüleme • 10 ay önce

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,220 görüntüleme • 7 ay önce

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,302 görüntüleme • 2 yıl önce

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 görüntüleme • 1 yıl önce

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 görüntüleme • 5 ay önce