JOE DESIGNS

A dev shop in Albuquerque New Mexico.

I Ran Out of Mail Clients, So I Built Spool

Filed under "code" on 10/1/26

There's a point in every power user's life when you run out of email clients to switch to. I hit that point. So I built one.

It's called Spool. It's a Mac email client written in Rust on gpui, it's in public beta, and this post is the long version of why it exists.

Spool — a quarter-million messages, nothing slows down

The tour

I've used pretty much all of them. In roughly the order I gave up on them:

  • Apple Mail. The default. It's already on your Mac, which is most of its sales pitch.
  • Gmail. In a browser tab, which meant my email lived next to forty other browser tabs and got about that much of my attention.
  • Superhuman. This is the one that taught me speed is a feature, something you design for and not just a nice side effect. Keyboard everything, nothing makes you wait. It ruined slow email for me permanently.
  • Airmail. Pretty, and configurable in every direction.
  • MailMate. More on this one in a second.
  • A few others that didn't last long enough to make the list.

Each one had something I loved and something that eventually sent me looking again.

MailMate, the one that stuck

MailMate lasted the longest by far. It's a power user's mail client in the best sense: IMAP done properly, keyboard-friendly, plain text first, built by people who obviously care about email as email. I liked it a lot. I still respect it a lot.

But every mailbox I added made it a little slower. Not broken, just heavier. A little more lag here, a little more waiting there, a little worse every few months as more accounts and more years of mail piled in. And when it's a tool you open a hundred times a day, "a little slower" turns into a tool you resent.

I don't know MailMate's internals, but I know the shape of that problem. When the work a mail client does grows with the amount of mail you have, every new account makes every click a bit more expensive. Most people never notice because most people don't have the inbox I have. I have the inbox I have.

So the question became: what if a mail client didn't care how much mail you had?

What if Zed were an email client?

That's literally the question at the top of Spool's README.

Zed is a code editor, and it's fast in a way that changes how you work. It's built on gpui, a UI framework the Zed team wrote in Rust that draws the entire interface on the GPU. No web view wrapped around the app, no Electron, no JavaScript runtime sitting between your keystroke and the pixels. You describe the window in Rust, and gpui turns it into rectangles and glyphs on the graphics card.

That seemed like exactly the right foundation for a mail client, so that's what Spool is: Rust end to end, on gpui. (HTML email does get a sanitized web view inside the reader, because a lot of email is basically a web page now. The app around it isn't one.)

One rule

Spool is built around a single rule: how fast it feels can't depend on how much mail you have.

A few decisions keep that true:

  • The message list is virtualized. gpui only builds the twenty or so rows actually on screen. Forty messages and four hundred thousand cost the same per frame.
  • Drawing never touches the database. Every query runs on a background thread and hands its result back. A slow query can delay a sync. It can't drop a frame.
  • Work happens once, at the right time. Snippets are computed when mail arrives, not every time a row is drawn. Bodies are parsed when you open them. Archive or flag something and the row updates immediately, and the server finds out in the background.
  • Everything is local. Your mail lives in SQLite with a full-text index on your own machine, so search doesn't round-trip to anyone.

And because "it feels fast" is easy to say, Spool can generate a seeded quarter-million-message demo mailbox and benchmark itself against it. Here's what that looks like on an M-series MacBook:

250,000 messages
Building a frame85µs
Opening a message120µs
Full-text search15.2ms

At 120Hz a frame gets 8,333µs. With a quarter-million messages loaded, Spool uses about one percent of that. Scrolling, selecting and typing in the search box don't get slower as mail piles up, because the work per frame doesn't depend on how much of it there is. That's the whole point. That's the thing I wanted from MailMate and couldn't get.

What it does today

It's a real mail client and not a benchmark with a window around it:

  • Three panes, driven entirely from the keyboard: j/k through the list, e to archive, r to reply, ⌘K for a command palette that can reach everything
  • Multiple accounts with a unified inbox. Gmail is one button, and everything else is just an IMAP server
  • Conversation threading, plus search operators like from:, is:unread and has:attachment
  • HTML mail rendered the way the sender laid it out, with remote images blocked until you allow them
  • Compose, reply, reply all and forward, with attachments, signatures and drafts that survive a restart
  • One-click unsubscribe wherever a list offers it
  • Optional AI writing tools to rewrite, proofread or change the tone of a draft
  • Sandboxed WebAssembly extensions that can badge and filter the list
  • Signed, notarized, and it updates itself when you say so

It keeps getting better

Spool went into public beta on Monday. As I write this on Thursday it's had seven more releases: drag-and-drop attachments, a pile of composer fixes, better keyboard handling inside HTML mail, and a long list of small things that only come up once you actually live in an app all day.

That's the part I like most about building my own. When something bugs me, I don't file feedback into the void and wait a year. I fix it, and it ships that afternoon.

It's still a beta, and I'm upfront about that on the Spool page. Point it at an IMAP account whose server still has a copy of everything, because mail is the one thing you can't re-download. There's a list of what isn't done yet on that page too, because a product page that only lists the good parts isn't telling you the truth.

Try it

Spool is free while it's in beta. It needs macOS 13 or later and runs natively on both Apple silicon and Intel.

Spool

A Mac email client written in Rust on gpui. A quarter of a million messages loaded, and it still doesn't flinch.

Download the latest build, or read the whole tour on the Spool page, with every keyboard shortcut, the search operators, and how it's put together.

If you've been through the same tour I have, from Apple Mail to Gmail to Superhuman to Airmail to MailMate and back around again, give it a shot. And if it does something dumb with your mail, tell me. I'll probably have it fixed by the afternoon.