Benchmarks
How fast is Spool?
Spool, Apple Mail, MailMate, Thunderbird and Canary on the same Mac, reading the same mailbox from the same local server — once at 50,000 messages, and again at 250,000 with 150,000 of them in the inbox. 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.
Spool 0.1.11Apple Mail 16.0, MailMate 1.13.2, Thunderbird 158, 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.
- Spool56 ms
- Thunderbird74 ms
- Canary121 ms
- MailMate139 ms
- Apple Mail154 ms
Next message
Press ↓ until the next message has finished drawing.
- Spool54 ms
- Canary171 ms
- Apple Mail180 ms
- Thunderbird339 ms
- MailMate454 ms
Search
Type a word until the results have finished drawing.
- Spool134 ms
- Apple Mail254 ms
- Thunderbird433 ms
- MailMate440 ms
- Canary524 ms
Launch
Open the app until the inbox is on screen and still.
- Spool321 ms
- Apple Mail724 ms
- Canary1,737 ms
- MailMate3,376 ms
- Thunderbird3,603 ms
Quit
Quit until the process has exited.
- Spool42 ms
- Canary74 ms
- Apple Mail116 ms
- Thunderbird128 ms
- MailMate341 ms
Scroll
Thirty notches of the scroll wheel until the list stops moving.
- Spool321 ms
- Canary328 ms
- MailMate337 ms
- Apple Mail343 ms
- Thunderbird580 ms
Memory
Physical footprint after use, including WebKit helper processes.
- Spool129 MB
- Canary318 MB
- Apple Mail344 MB
- MailMate548 MB
- Thunderbird1,040 MB
Idle CPU
Share of one core used while sitting idle.
- MailMate0.1 %
- Spool0.6 %
- Thunderbird2.5 %
- Apple Mail24.3 %
- Canary163.0 %
Where Spool does not win: MailMate uses less CPU sitting idle (0.1% of a core to Spool’s 0.6%). At this size Spool is first at everything else, though scrolling is close — Canary finishes 7 ms behind, less than a frame.
- One client at a time. Each was the only mail client running while it was measured, after it had finished checking the server on launch.
- Idle CPU was taken straight after the tests. Apple Mail and Canary were both still working at that point — Apple Mail at a quarter of a core, Canary at more than one and a half — and the numbers say so rather than waiting until they stopped.
- An empty Drafts folder. The server has one, as a real account does; without it Canary stops at a dialog asking for one.
Spool from 50,000 to 250,000
Five times the mail. Opening a message and moving to the next take the same time at both sizes; search, launch and quit grow with the mailbox, but slowly.
| Spool 0.1.11 | 50,000 messages | 250,000 messages |
|---|---|---|
| Open a message | 55 ms | 56 ms |
| Next message | 55 ms | 54 ms |
| Search | 61 ms | 134 ms |
| Launch to a usable inbox | 282 ms | 321 ms |
| Quit | 28 ms | 42 ms |
| Memory | 144 MB | 129 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, or 250,000 for the larger run (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.