Benchmarks
How fast is Spool?
Spool, Apple Mail, MailMate, Thunderbird and Canary on the same Mac, reading the same 50,000-message mailbox from the same local server. The times are taken from the screen: from a click or keypress until the pixels stop changing.
Spool 0.1.11Apple Mail 16.0, MailMate 1.13.2, Thunderbird 144, Canary 5.26Mac Studio (M1 Ultra), macOS 15.4Lower is better throughout.
Open a message
Click a conversation in the list until it has finished drawing.
- Spool55 ms
- Thunderbird56 ms
- Apple Mail73 ms
- MailMate150 ms
- Canary181 ms
Next message
Press ↓ until the next message has finished drawing.
- Spool55 ms
- Apple Mail77 ms
- Canary181 ms
- Thunderbird305 ms
- MailMate423 ms
Search
Type a word until the results have finished drawing.
- Spool61 ms
- Apple Mail120 ms
- MailMate185 ms
- Thunderbird372 ms
- Canary519 ms
Launch
Open the app until the inbox is on screen and still.
- Spool282 ms
- Canary1,620 ms
- Apple Mail1,691 ms
- MailMate1,909 ms
- Thunderbird2,171 ms
Quit
Quit until the process has exited.
- Spool28 ms
- Canary44 ms
- Thunderbird97 ms
- MailMate196 ms
- Apple Mail218 ms
Scroll
Thirty notches of the scroll wheel until the list stops moving.
- Canary305 ms
- Apple Mail306 ms
- MailMate319 ms
- Spool324 ms
- Thunderbird571 ms
Memory
Physical footprint after use, including WebKit helper processes.
- Spool144 MB
- MailMate219 MB
- Apple Mail260 MB
- Canary407 MB
- Thunderbird1,148 MB
Idle CPU
Share of one core used while sitting idle.
- MailMate0.2 %
- Spool1.1 %
- Apple Mail1.7 %
- Canary2.1 %
- Thunderbird4.1 %
Where Spool does not win: scrolling finishes about one frame (18 ms) behind Canary and Apple Mail, and MailMate uses less CPU sitting idle. Both are on the list.
At 250,000 messages
The same measurements against a mailbox five times the size, with 150,000 messages in the inbox. Opening a message and moving to the next take exactly as long as they do at 50,000. Search, launch and memory grow with the mailbox, but slowly: five times the mail costs a search 70 ms and launch 18 ms.
| Spool 0.1.11 | 50,000 messages | 250,000 messages |
|---|---|---|
| Open a message | 55 ms | 55 ms |
| Next message | 55 ms | 55 ms |
| Search | 61 ms | 131 ms |
| Launch to a usable inbox | 282 ms | 300 ms |
| Quit | 28 ms | 41 ms |
| Memory | 144 MB | 183 MB |
| First sync, empty to complete | 8 s | 39 s |
How this was measured
- One mailbox for everyone. A generated mailbox of 50,000 messages (threads, lists, HTML and plain text) served by Dovecot over IMAP on the same Mac, so no client is helped or hurt by a network. Every client synced all of it before anything was measured.
- Measured from outside. A small tool posts a real mouse or keyboard event and watches the window through ScreenCaptureKit. It knows nothing about the app under test and needs no cooperation from it, which is the only way to put five different apps in one table.
- “Finished”, not “started”. Each time is from the event until the window stopped changing. An app that paints a spinner quickly and the message slowly gets the slow number.
- Medians. 20 runs for each action (10 for scroll, 5 for launch and quit), median reported. Same window size and position for every client.
- The instrument adds about 28 ms to every time taken from the screen, the same for every app: one or two frames of a 60 Hz display, plus capture. The fastest an action can measure here is around 45 ms. Quit is timed to the process exiting, not from the screen, so it carries none of that.
- Memory is physical footprint, the number Activity Monitor shows, including the WebKit processes each client renders HTML mail in. Idle CPU is ten seconds of the client doing nothing.
- Search includes typing the query (about 80 ms of it). MailMate searches when Return is pressed, so its time includes the Return. Thunderbird’s Quick Filter, its search-as-you-type, looks at sender, recipients and subject by default but not the message body, which is less work than the others do; the rest search the full text.
- Each client as it ships, with two exceptions: Canary’s Copilot panel was closed and its “Discover” cards dismissed, so its reader had the same room as everyone else’s. Thunderbird keeps no offline copy of Junk and Trash by default; the other 95% of the mailbox it had in full.
- Launch is warm: the app has run before and macOS has its files cached, as it does for an app you use every day. “Ready” is when the message list stopped changing.
Not the same numbers as the Spool page
The microseconds on the product page are the app timing its own work from inside — a frame build, a query against its own index. Nothing like them can be taken out of another client, so they are not in any comparison here. These are milliseconds because they include the input stack, the window server and the display: everything between your hand and the pixels, which is the part a person actually waits for.
Measured October 2026. The harness and the mailbox generator are part of Spool’s source, which is private for now — until it is published, the way to check these numbers is to run Spool next to the mail app you use.