Elektrine
Log in Register
Paige Chat Timeline Gallery Friends Email Drive DNS Private DNS Domains VPN Kairo Nerve
Remote

Mitchell Hashimoto

@mitchellh@hachyderm.io
mastodon 4.7.3
  • Open on hachyderm.io

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

8781 Followers
56 Following
50 Posts
Joined December 18, 2022
Website:
https://mitchellh.com
GitHub:
https://github.com/mitchellh
Email:
m@mitchellh.com
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 4mo ago

I strongly believe there are entire companies right now under heavy AI psychosis and its impossible to have rational conversations about it with them. I can't name any specific people because they include personal friends I deeply respect, but I worry about how this plays out.

I lived through the great MTBF vs MTTR (mean-time-between-failure vs. mean-time-to-recovery) reckoning of infrastructure during the transition to cloud and cloud automation. All those arguments are rearing their ugly heads again but now its... the whole software development industry (maybe the whole world, really).

It's frightening, because the psychosis folks operate under an almost absolute "MTTR is all you need" mentality: "its fine to ship bugs because the agents will fix them so quickly and at a scale humans can't do!" We learned in infrastructure that MTTR is great but you can't yeet resilient systems entirely.

The main issue is I don't even know how to bring this up to people I know personally, because bringing this topic up leads to immediately dismissals like "no no, it has full test coverage" or "bug reports are going down" or something, which just don't paint the whole picture.

We already learned this lesson once in infrastructure: you can automate yourself into a very resilient catastrophe machine. Systems can appear healthy by local metrics while globally becoming incomprehensible. Bug reports can go down while latent risk explodes. Test coverage can rise while semantic understanding falls. Changes happens so fast that nobody notices the underlying architecture decaying.

I worry.

1406
76
830
19
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Boosted by @hypebot@goingdark.social
Ghostty is leaving GitHub. I'm GitHub user 1299, joined Feb 2008. I've visited GitHub almost every single day for over 18 years. It's never been a question for me where I'd put my projects: always GitHub. I'm super sad to say this, but its time to go. https://mitchellh.com/writing/ghostty-leaving-github
Mitchell Hashimoto

Ghostty Is Leaving GitHub

836
62
627
18
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 3mo ago
My family is donating another $400,000 to the Zig Software Foundation. Zig is exceptional software. I use AI every day. Zig has one of the strongest anti-AI policies in open source. We disagree on some things, but respect doesn’t require agreement. https://mitchellh.com/writing/zig-donation-2026
mitchellh.com
202
2
77
2
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 2mo ago
The Ghostty non-profit has signed our first long-term paid contributor via a 12-month agreement with @vancluever@hachyderm.io. He's a top-quality engineer, has been part of the Ghostty community for years, and has consistently demonstrated an extremely high quality and judgement bar. He is the creator and maintainer of z2d, the vector graphics library that Ghostty uses. He has contributed upstream to Zig and Arocc dozens of times. The way Ghostty contributor contracts work is that there is no stated or mandated area of focus. I trust Chris to work on worthwhile tasks, and Chris has demonstrated he does so far, so there's no need to push him one way or the other. He chooses what to work on and describes his work to the non-profit (so it's all aligned and legal to compensate). As I spend more time focused on libghostty, I want to ensure that the broader Ghostty project continues to be staffed and healthy. We'll be signing more contributor contracts soon!
74
3
25
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 3mo 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: https://www.youtube.com/watch?v=ZVAnhimPh8k

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.

110
1
45
1
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago

Our family grew yesterday to 2 kids! A healthy baby boy and healthy wife post labor. ❤️

272
56
12
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 2mo ago
Boosted by @trending@homestead.social
Ghostty and libghostty are now on Zig 0.16! This was done by a [paid!] contributor over a few weeks. Through this process, the Ghostty non-profit also paid for hours to contribute over a dozen patches upstream to Zig, translate-c, and arocc which help the entire ecosystem. Really amazing work (not by me!) and happy to be upgraded. :) translate-c: https://codeberg.org/ziglang/translate-c/pulls?q=author%3Avancluever&type=all&sort=relevance&state=closed&labels=&milestone=0&project=0&assignee=0&poster=714165&archived=false arocc: https://github.com/Vexu/arocc/pulls?q=author%3Avancluever+is%3Aclosed
codeberg.org
75
0
29
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 2mo ago
Wrote up a practical introduction to SIMD using a real example from Ghostty. SIMD has a reputation for being complex, but the common case follows a simple, repeatable shape and shouldn’t be scary! Everyone should know at least this much. https://mitchellh.com/writing/everyone-should-know-simd
Mitchell Hashimoto

Everyone Should Know SIMD

72
1
42
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 2mo ago
RE: https://hachyderm.io/@mitchellh/116993012549857824 If you're interested in "how" or "why": the major culprit is that each row in Alacritty has 32 bytes of metadata and each cell is 24 bytes. In Ghostty, every row and cell is represented by exactly 8 byte each. How? The first major culprit is styles. Alacritty stores the full cell style alongside each cell (foreground, background, underline, etc.). Ghostty stores a 16-bit style ID and de-dupes all styles into a look-aside custom reference-counted hash table. Next, codepoints. Alacritty stores multi-codepoint graphemes (like, Emoji) by having an 8-byte nullable pointer to a `Vec`. This hurts doubly: (1) its almost always null (because multi-codepoint is rare) yet you pay an 8 byte cost on every cell and (2) every multi-codepoint grapheme triggers a heap allocation to make that Vec. Ghostty stores single codepoints inline, but multiple codepoints in a look-aside table. The memory for this table uses a custom bitmap-tracked chunk-allocator (since grapheme frequency follows a measurable curve we calculated by scanning various online texts). The presence of graphemes is marked by a 2-bit content tag in our packed 64-bit cell. To keep the key small in the hash table, its limited to a 16-bit unsigned int that is an offset from a base pointer. Okay, the astute systems programmer will quickly notice there are a lot of 16-bit integers and ask: so this is all limited to a max of ~65K values? Nay. We maintain our grid using a linked list of contiguous ~400KB memory chunks (which themselves are in a memory pool using a custom allocator to speed up alloc/free). Each memory chunk is limited to 2^16. If/when we reach a limit, we move to the next page. In practice, this really doesn't happen except under pathological cases... the important point is we handle it. Lots, lots, lots more details, but thats a 10,000 foot view. These things alone account for ~95% of the difference of our uncompressed vs. Alacritty's uncompressed memory usage. (Theres also a reason why Alacritty's data structures aren't trivially compressable but thats a whole other topic)
hachyderm.io
61
3
21
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 2mo ago
LLVM21 is a stinker and has worse codegen in general, and a bug forced disabled loop auto-vectorization. Turned out to be a blessing: we clearly identified areas we were over-reliant on implicit compiler optimizations and were able to explicitly restructure our code to what we really wanted. The result is that we now have clean generic SIMD subroutines in places we previously relied on auto-vectorization. And we did it better and as a result produced faster code (see below). Pure ASCII throughput improved more than 20% (30% on Linux) which is insane and is purely because we wrote better SIMD than an auto-vectorizer can. Lit. We also found it stopped inlining automatically in certain places which destroyed some benchmarks based on real world corpuses. As a result, we now explicitly inline those backed by benchmarks. Wonderful. "Exotic"-sized integers (e.g. u13) also cause poor LLVM codegen and some performance pitfalls were fixed by adding padding to power-of-two sizes. I know Zig is working on a sema fix for this to avoid LLVM ever seeing these. Note when I said "in general" above I mean that this was consistently across macOS aarch64, Linux aarch64, and Linux x86_64. Just across the board bad codegen. Some things slowed down more than can be attributed to noise. I'm looking into that now but they're minor benchmarks. The important ones are parity or better.
45
3
11
1
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
AI slop is good, actually. Slop is what enables fast parallel experimentation. The etiquette and skill is understanding the boundaries of where slop exists and the extent to which it should be cleaned up and how. A few examples: I’m working on the internals of some system right now. The API and GUI of this thing is fully zero shame slop. It’s horrible. But it lets me focus on the core quality while shipping a usable piece of alpha quality software to testers (transparent about the slop frontend). Similarly, this system has plugins. We sent agents in Ralph loops overnight to generate dozens of plugins. The plugins are slop. The quality is bad. The plugin API/SDK is absolutely not done. But we can test a full GUI with a full plugin ecosystem. When we change the API, we can regenerate them all. The cost of change is just tokens, the velocity is incomparable to before. I built Terraform. We tested and shipped TF 0.1 with about 3 very weak providers. Because we ran out of time. Building was slow. And when we changed our SDK the cost was immense. Totally different today, 10 years later. Today, I would’ve slop generated 100 providers (again, with transparency and cleanup later, but just to prove it out). As an anti example, I would not PR this (without prior warning) to another project. I would not throw this onto customers without full review or transparency (as I’m already doing). I would not accept first pass slop. It’s almost never right. Slop is a tool. And like anything else it’s not blanket bad or good. The context is everything.
94
10
27
1
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago

Libghostty can now be used to fuzz TUIs, thanks to Oskar and 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. https://wickstrom.tech/2026-04-30-bombadil-terminal-experiment.html

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.

wickstrom.tech
94
2
28
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

It's so insanely disrespectful for an AI agent to talk to real people without consent or at least disclosure. This is the type of stuff I'm hugely supportive of government regulation. The FCC must expand the definition of robocalling and TCPA-style regulation to online AI.

142
5
40
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

Ghostty just surpassed Terraform in stars (my previous most-starred project I started). It took Terraform 12 years to reach 48K. Ghostty did it in 1 year. It's bigger than Terraform in active usage, too. I take it personally when people doubt I can outdo my past.

I can take credit for starting both, but not for ongoing development (for the successes and failures). Neither project is a solo endeavor. I'm still extremely actively involved with Ghostty, but there's also a team of a dozen maintainers. Terraform I stepped back and stopped working on it directly like 6 or more years ago.

I consider stars a vanity metric and I don't care about it at all except in this narrow case. I'm a super competitive person (in general), but particularly/especially against my past self. There's no one I like "winning" more against than my past. So, this is my one exception for caring about stars.

71
7
10
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago

A couple months in and Vouch in Ghostty is working extremely well. Our PR quality is up and the rate of PRs has not gone down at all. Getting a vouch is easy, and the minimal barrier to entry easily filters most. Look at this 5min interaction that saved hours of future anguish.

49
3
9
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 3mo ago

Ghostty is now indisputably the fastest terminal emulator at IO throughput, by a very large margin. On ASCII, Unicode, and CSI tests, Ghostty is more than 2x (double!) faster than any other leading "fast" terminal. These changes are directly in libghostty, too, so everyone wins.

time cat 150MB_ascii.txt:

  • Ghostty nightly: 575ms
  • Ghostty 1.3.2: 1.5sec
  • Alacritty: 1.2sec
  • Kitty: 1.7sec
  • Warp: 3.8sec
  • iTerm2, Terminal: stopped after 60s

time cat 150MB_unicode.txt (mixed languages):

  • Ghostty nightly: 536ms
  • Ghostty 1.3.2: 1.22sec
  • Alacritty: 1.05s
  • Kitty: 1.35s
  • Warp: 3.4s
  • iTerm2, Terminal: stopped after 60s

DOOM-Fire-Zig (an IO test):

  • Ghostty nightly: 842fps
  • Ghostty 1.3.2: 532fps
  • Kitty: 485fps
  • Alacritty: 593fps
  • Warp: 577fps
  • iTerm2, Terminal: 60fps (yes, 60)

To quickly address the "cat speed doesn't matter" naysayers: this is a direct test of how many bytes/second you can push through a terminal. It doesn't cover just "read big file" but also "how much can a TUI do". The tests above test various shapes of inputs (plain ascii, unicode/wide chars, csi-heavy loads, etc.). IO throughput is incredibly important.

Most of these improvements apply to libghostty-vt consumers too, so any libghostty-based terminals will instantly see huge throughput improvements by simply upgrading (ABI compatible).

I'll cover the exact improvements in a blog post in the future. These results are the result of 6 separate optimizations.

17
0
9
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

From empty repo to a functional minimal standalone terminal based on libghostty in less than 2 hours, presenting Ghostling! ~600 lines of C and you get extremely accurate, performant, and proven terminal emulation. Every program on earth that needs any subset of terminal functionality and can now easily get it.

https://github.com/ghostty-org/ghostling

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. 😎 https://github.com/ghostty-org/ghostling

github.com
63
0
30
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

libghostty for Rust! Some Ghostty maintainers came together and made a really high quality Rust crate in front of libghostty-vt. The repo includes a full port of Ghostling (full terminal in a single Rust file!). The API is beautiful. https://github.com/Uzaaft/libghostty-rs/

github.com
50
0
14
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago

Love this post by Antirez on developing Redis Array support. Its a great showcase of thoughtful AI usage and how AI can empower even the best developers while still producing high quality work. https://antirez.com/news/164

antirez.com
29
0
5
2
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago

Huge W for Zig from the Kimi K2.6 announcement. https://www.kimi.com/blog/kimi-k2-6

kimi.com
29
2
5
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

Libghostty now fully exposes the Kitty Graphics Protocol. This may be the first native embeddable terminal to support this. I added a full Kitty graphics renderer to Ghostling (the libghostty demo project) in ~270 LoC.

Ghostling PR: https://github.com/ghostty-org/ghostling/pull/13
C API Docs: https://libghostty.tip.ghostty.org/group__kitty__graphics.html
C PR: https://github.com/ghostty-org/ghostty/pull/12145
Zig PR: https://github.com/ghostty-org/ghostty/pull/12144

Ghostty GUI has supported Kitty graphics since version 1.0 and I believe we have one of the most comprehensive Kitty graphics protocol implementations besides Kitty itself.

For example, we support unicode placeholders which lets the protocol work in tmux, which is -- I think -- only supported by Ghostty besides Kitty.

Now this robust, real world proven implementation is available to anyone embedding Ghostty. Enable it with a few lines of code and build a renderer with a couple hundred as shown in Ghostling. Amazing.

github.com
33
2
9
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

Btw, for Ghostling (libghostty demo), I didn't write a single line of... anything. Agents wrote 100% of everything you see incl. Nix flakes, CI jobs, etc. I reviewed every line of code manually and constantly nudged the agents in the right direction. I used a mix of Opus+Codex.

I went from empty repo to functional terminal that could run Neovim with keyboard, mouse events in ~80 minutes. Pretty sweet.

Note: libghostty itself is of course heavily hand written (with agent assistance all over too, though). I'm just talking about Ghostling itself.

Even for CI setup (GitHub actions), I had the agent sit in a `gh` CLI loop watching failures, fixing, pushing, fixing, pushing, etc. Doing GHA with agents are the only way I stay sane, honestly.

I just re-read the full main.c from top to bottom and I'm very satisfied. I would've done some things differently but if an engineer I worked with PRed all this, I would've accepted it. Its good enough.

Some people have pointed out the commenting is over the top and indicative of AI. This is actually my personal comment style, and I told the agent to comment heavily (its even in the AGENTS.md, look for yourself!). Anyone who has worked with me professionally or in OSS knows that I comment everything all the time.

33
4
3
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

One of my favorite things is that libghostty really forces us to better our core. For example, we recently made stream processing infallible (sending arbitrary user input into Ghostty). External input can't be trusted, so it must never cause our core to fail. Now it doesn't.

Zig's error system makes this easy and obvious. Previously, errors would bubble up from handlers through to the stream processor. The practical effect is that if a sequence failed, it could cause partial processing of terminal sequences. I never heard of this happening in practice, but the API allowed it.

Now, we force all error handling to happen at the handler level. If an error happens, the handler must deal with it and guarantee that the terminal is in a coherent state. The stream processor WILL move forward.

This was critical because when designing the C API, we needed to determine what possible errors could be returned from `ghostty_terminal_vt_write`. On reflection of the Zig API, I realized... none can. No possible errors can (or should) occur. I was able to fix this through the type system in Zig and now the C API is a `void` return type with zero allocation. Hurrah!

PR: https://github.com/ghostty-org/ghostty/pull/11468

GitHub

terminal: make stream processing infallible by mitchellh · Pull Request #11468 · ghostty-org/ghostty

The terminal.Stream next/nextSlice functions can now no longer fail. All prior failure modes were fully isolated in the handler vt callbacks. As such, vt callbacks are now required to not return an...

34
2
5
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

Ghostty 1.3.1 is now out, most importantly fixing the phantom mouse drag/select/scroll events on macOS. This release also includes improvements to AppleScript support and a couple dozen bug fixes. https://ghostty.org/docs/install/release-notes/1-3-1

ghostty.org
34
2
12
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

The libghostty C API is functionally super stable, because its the same core thats been powering Ghostty for years. But the ABI is not yet stable. In this video, I talk about what an ABI is and the plans we have to ensure libghostty ABI compatibility once we tag a release. https://www.youtube.com/watch?v=VAGNcyo8hqs

29
1
3
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

There's such a deep misunderstanding out there about tmux and zellij and I get so many absurd issue reports demonstrating that. So many don't realize that using them is like running a Windows VM on your Mac device, and complaining to Apple that iCloud sync isn't working from the VM.

They are super powerful and have their use and I am happy to support them in any way I can. I'm not anti-multiplexer, but I wish more people understood the architecture a bit more.

29
7
2
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

libghostty is FAST! Here's a look at vtebench with Ghostling. Reminder: Ghostling is single threaded + blocking render + blocking IO. The point is, you get comparable speed to the fastest dedicated terminals in an embeddable lib! Had to pull out iTerm2 because its so slow.

Warning: Ghostling is purple in the first chart but green in the second. Sorry for the confusion.

Also, the Unicode results are not correct for Ghostling because Ghostling is getting stuck on worst case "glyph not found" since we only embed one font. So the results are wildly skewed poorly. A result integrator of libghostty would have significantly better performance here.

I haven't fully profiled the libghostty C API yet. I think there will be obvious wins to be had. This was just my first check and I am very happy with the results.

Comparing libghostty/Ghostling to dedicated terminals is a bit unfair, since dedicated terminals can get away with a lot of performance tricks to go faster that a reusable general purpose terminal emulation library can't do as well. But, I wanted to show this comparison to show that despite that, libghostty still does SUPER well, comparable, and even best-in-class in a couple categories.

This is all to say, every embedded terminal experience on earth can be nearly as fast as the fastest native desktop terminals. There are no more excuses. The tide will rise!

Full Ghostling source (single ~600 line C file): https://github.com/ghostty-org/ghostling

github.com
23
2
6
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

I shook off some of the dust and wrote Go for the first time in 3 years and built some libghostty bindings for Go. Its cgo but since libghostty can be fully static and only depends on libc, mixing cgo + Zig as the C compiler lets you cross compile easily. https://github.com/mitchellh/go-libghostty

github.com
19
2
3
1
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

We now build binary "xcframework" packages for libghostty on every commit for macOS and iOS. They're available via GitHub releases and blob storage. Just drop them into Xcode or in a Package.swift and you're ready to go. No Zig headaches. No build step. https://github.com/ghostty-org/ghostty/pull/12149

github.com
19
0
2
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago

I've contributed a patch to the venerable simdutf library by @lemire@mastodon.social so that it can now be used with no dependency on libc++ at all. Libghostty is already updated so it now only depends on libc. I blogged about it here: https://mitchellh.com/writing/simdutf-no-libcxx

Mitchell Hashimoto

Simdutf Can Now Be Used Without libc++ or libc++abi

16
10
5
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

The Building Block Economy. https://mitchellh.com/writing/building-block-economy

The most effective way to build software and get massive adoption is no longer high quality mainline apps but via building blocks that enable and encourage others to build quantity over quality.

mitchellh.com
17
1
4
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

Updated the libghostty-vt CMake files to make cross-compilation as easy as one (or a few lines). Since libghostty only depends on libc/c++ and Zig bundles libc when used as a c/c++ compiler, you can get full cross-compilation easily. The Zig toolchain is paying huge dividends!

This would've been true even if libghostty wasn't written in Zig, its just a fun coincidence that its written in Zig too. But Zig the C/C++ compiler on its own is amazing (a frontend for clang but with a ton of extra work done by the Zig team to make cross compilation easy).

More details in this commit: https://github.com/ghostty-org/ghostty/commit/7127abfe285014c62bc1f9b24d4e038af7f94afa

github.com
14
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 7mo ago
Replying to
@rmondello First of all, big fan of the work you do I’ve seen your commentary pop up a lot and of course I consume it within the Apple ecosystem daily. Thank you. Second, thank you! Yes, I noticed 26.2 (I think) reintroduced this. I previously had a very bad workaround. Let me read this doc and do the right thing. Thank you.
16
2
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

The libghostty Zig and C API as well as the Ghostling demo application have all been updated to support "effects", or the ability for libghostty to now handle side effects (bell, titles, etc.) and responses (size reports, etc.).

Here's a devlog about it: https://www.youtube.com/watch?v=X2d0CxwrJJQ

Links to examples below:

Zig PR: https://github.com/ghostty-org/ghostty/pull/11787
C PR: https://github.com/ghostty-org/ghostty/pull/11814
Ghostling commit: https://github.com/ghostty-org/ghostling/commit/be529b5f76e894afcc5ccbf34bb53d1b83cf6667

14
0
1
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

With Ghostty 1.3 out the door, my focus is now on completing the libghostty C API (Zig API is already complete). Just added the groundwork for exposing full terminal state and formatting it as plain text, VT, or HTML. https://github.com/ghostty-org/ghostty/pull/11506

This is all just writing C ABI compatible APIs to the already-existing and heavily real-world proven Zig APIs. For example, the formatter API is how our copy/paste works (the HTML format is the source of truth for Ghostty 1.3's rich text copy). And of course, the terminal API is literally the core Ghostty terminal emulator!

The major API I need to do next is the "render state" API. Formatters are made for infrequent point-in-time snapshots; they aren't particularly performant. The render state is a stateful API for building high performance render loops and its what the Ghostty GPU renderer is built on top of. Will come soon...

github.com
15
0
2
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago

Simdutf released v9 which includes the ability to use it without libc++ at runtime (via a cleanup of my work). Really glad I could help get this upstream, a big win for all libghostty-vt users as we eliminate a major dependency for free. https://github.com/simdutf/simdutf/pull/962

github.com
9
0
1
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

Devlog about the recently added Kitty graphics protocol support to libghostty, highlighting how kept libghostty to zero runtime dependencies, how libghostty is secure by default for the protocol, and showcasing the Ghostling implementation. https://www.youtube.com/watch?v=biZ4HywLxZY&feature=youtu.be

10
0
3
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to
@andrewrk @lemire Ah yeah, I think we actually do that in Ghostty's CI now to ensure it doesn't link to libc++, but might make sense to switch the PR to simdutf to do that too.
4
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to
@thejacenallen@mastodon.social Yep. Pretty much a non starter if that’s a blocker for you. The local models like Qwen and Gemma are actually very usable now though! I’ve gotten a ton more value out of those recently. Frontier for deep thinking and planning and then local for execution (has to run way longer to produce equivalent results though). I test every local for that reason. I have a Mac Studio and my house has been net positive power generation for over 10 years now (even charging two cars!). So local models are totally free (ignoring training of course but I’m a glass half full kind of guy, progress is progress!)
3
1
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago
Replying to
@andrewrk Even Ghostling with its dogshit renderer can maintain like 50 FPS updating images, so probably. lol. This is also a horrendously under-optimized path in Ghostty and I'm excited for libghostty to force us to take a look at that.
4
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 7mo ago
Replying to
@rmondello Thanks for the background! This is now done: https://github.com/ghostty-org/ghostty/pull/11351 Question: my heads spinning around ideas where terminal apps could use a sequence to advertise that they're awaiting a one time code, and I could dynamically shift my content type. Is this something that could be done or is this being cached so hard that its not feasible?
github.com
5
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to
@audiodude It varies, but usually crashes/hangs. The input is "random" but there's a really deep body of research on finding "interesting" inputs and avoiding non-interesting ones. Usually paired with tracing so inputs that exercise the same execution paths are less interesting than inputs that exercise new ones. Deep hole of studying here: https://github.com/AFLplusplus/AFLplusplus
github.com
3
1
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to
@andrewrk Incredible, love the spotlight!
3
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to
@thejacenallen@mastodon.social I don’t use any AI for writing or any social media content. This is hand typed
2
2
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to
@koichi@hachyderm.io @HugeGameArtGD@mastodon.gamedev.place Matters on the tech. Right now I'm doing a bunch of Go, and I try to restrict slop to package boundaries even if it's not super ergonomic (force all slop in one package with exported APIs). Then as I clean it up I convert one bit at a time, when we don't call the slop package anymore just delete it.
1
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to
@dolmen unclear yet, I optimistically scoped it for all. But I dunno.
1
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago
Replying to
@thejtoken Like I said I do blog about it I lot if you’re curious. I think I’m a much more nuanced AI user than most. I use it when and where it makes sense in a capacity that fits the requirements
1
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 6mo ago

@thejtoken@hachyderm.io been blogging and talking about this stuff for over a year now at least. Been a daily user ever since.

1
0
0
0
Open post
Mitchell Hashimoto @mitchellh@hachyderm.io
· 5mo ago
Replying to

@HugeGameArtGD@mastodon.gamedev.place Sorry a quick follow up, the example I gave here is good with more detail:

I built (not slop) the plugin system and SDK. I think it's good. But I don't know. I launched a handful of ralph-loop agents overnight while I slept to produce plugins with a variety of examples.

I woke up, the plugins worked (mostly). The code was terrible. But I could immediately find two things:

  1. Common patterns a lot of the plugins repeated that I could think about whether made sense in the formal SDK (cleaned up)

  2. Using the plugins in a working but hypothetical environment to really "feel" if this was directionally good or if there was something lacking. For example, one thing I took away was that plugin installation was way too burdensome when you had a lot you wanted to get up and running with quickly.

Clean that up, work on that throughout the day, plan my next evening. Rinse, repeat.

0
1
0
0
Back
313k7r1n3
Elektrine

Tor hidden service

elekhj7afj4qnrr4yd3bkzslsyo5jgfxw3orgjkhlcxifueodybyiiad.onion

I2P eepsite

j6b6cyk6gjmepjih7jjadxgxvvf3lzzujljuu2v4biemzpg3naya.b32.i2p

Platform

  • Email
  • Chat
  • Timeline
  • VPN
  • DNS

Company

  • About
  • Contact
  • FAQ
  • Lite (no JS)

Legal

  • Terms of Service
  • Privacy Policy
  • Transparency Report
  • Report Abuse
  • Warrant Canary
  • VPN Policy

Support

  • support@elektrine.com
  • Report Security Issue
Mail client setup IMAP mail.elektrine.com:993 POP3 mail.elektrine.com:995 SMTP mail.elektrine.com:465
© 2026 Elektrine. All rights reserved. Server: 21:30:13 UTC