Benchmarks
How fast is Spool?
Spool, Apple Mail, MailMate, Thunderbird, Canary and Mailflare 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.11, Apple Mail 16.0, MailMate 1.13.2, Thunderbird 144, Canary 5.26, Mailflare 1.6Mac Studio (M1 Ultra), macOS 15.4Lower is better throughout;the best in each test.
Open a message
Click a conversation in the list until it has finished drawing.
- Spool55 ms
- Thunderbird56 ms
- Apple Mail73 ms
- MailMate150 ms
- Mailflare151 ms
- Canary181 ms
Next message
Press ↓ until the next message has finished drawing.
- Spool55 ms
- Apple Mail77 ms
- Canary181 ms
- Mailflare273 ms
- Thunderbird305 ms
- MailMate423 ms
Search
Type a word until the results have finished drawing.
- Spool61 ms
- Apple Mail120 ms
- MailMate185 ms
- Thunderbird372 ms
- Mailflare428 ms
- Canary519 ms
Launch
Open the app until the inbox is on screen and still.
- Spool282 ms
- Mailflare521 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
- Mailflare48 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
- Mailflare321 ms
- Spool324 ms
- Thunderbird571 ms
Memory
Physical footprint after use, including WebKit helper processes.
- Spool144 MB
- Mailflare158 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 %
- Mailflare3.4 %
- 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.
- Mailflare held 300 messages. Mailflare is not doing the same job. It fetches only the newest 50 messages in each folder and fetches older mail from the server as the list is scrolled, where the others had all 50,000. During these tests it held 300 messages, the newest 50 in each of six folders. So its memory and launch are those of a small local copy, not of this mailbox; its search looks at subject, sender and preview in those messages only, never the full text or the server, and waits 200 ms after a keystroke before it starts; its idle CPU includes re-checking the newest 50 messages in every folder once a minute; and opening a message downloads the body from the server the first time, where the others already have it.
Spool 0.1.11, Apple Mail 16.0, MailMate 1.13.2, Thunderbird 158, Canary 5.26, Mailflare 1.6Mac Studio (M1 Ultra), macOS 15.4Lower is better throughout;the best in each test.
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
- Mailflare158 ms
Next message
Press ↓ until the next message has finished drawing.
- Spool54 ms
- Canary171 ms
- Apple Mail180 ms
- Thunderbird339 ms
- MailMate454 ms
- Mailflare507 ms
Search
Type a word until the results have finished drawing.
- Spool134 ms
- Apple Mail254 ms
- Thunderbird433 ms
- MailMate440 ms
- Mailflare458 ms
- Canary524 ms
Launch
Open the app until the inbox is on screen and still.
- Spool321 ms
- Mailflare520 ms
- Apple Mail724 ms
- Canary1,737 ms
- MailMate3,376 ms
- Thunderbird3,603 ms
Quit
Quit until the process has exited.
- Mailflare40 ms
- 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
- Mailflare331 ms
- MailMate337 ms
- Apple Mail343 ms
- Thunderbird580 ms
Memory
Physical footprint after use, including WebKit helper processes.
- Spool129 MB
- Mailflare143 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 %
- Mailflare0.9 %
- 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%). Mailflare quits 2 ms sooner, within a frame, with a few hundred messages to put away rather than 250,000. 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.
- Mailflare held 600 messages. Mailflare is not doing the same job. It fetches only the newest 50 messages in each folder and fetches older mail from the server as the list is scrolled, where the others had all 250,000. During these tests it held 300 at the start and 600 by the end: scrolling the inbox made it fetch 300 more. So its memory and launch are those of a small local copy, not of this mailbox; its search looks at subject, sender and preview in those messages only, never the full text or the server, and waits 200 ms after a keystroke before it starts; its idle CPU includes re-checking the newest 50 messages in every folder once a minute; and opening a message downloads the body from the server the first time, where the others already have it. Because it holds about the same few hundred messages at either size, its numbers here and at 50,000 differ by noise and by things not yet pinned down, not by scale: moving to the next message took 507 ms here against 273 ms at 50,000, and we do not know why.
- 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, except Mailflare, which keeps only the newest few hundred messages (see below).
- 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 six 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. Mailflare searches subject, sender and preview in the messages it has downloaded, and nothing else. 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.
- Mailflare is not doing the same job, so read its numbers with care. By design it fetches only the newest 50 messages in each folder, and older mail as the list is scrolled; the others had the whole mailbox. That shapes nearly every number it has — memory, launch, search and idle CPU most of all — and makes its 50,000 and 250,000 results the same few hundred messages twice. The notes under each mailbox say what it held and how.
- 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.