Instant, because it’s synced
Message metadata is mirrored into Spindle in the background. Lists, conversations and search read local data, so you never wait on a provider.
Your IMAP accounts in one stream
Spindle syncs your mailboxes into one unified inbox you can drive from the keyboard. Lists and search read mail that is already synced, so they never wait on your provider.
JKmove Earchive Zundo ⌘Kcommands
Features
Message metadata is mirrored into Spindle in the background. Lists, conversations and search read local data, so you never wait on a provider.
Every connected account merges into one paginated inbox. Filter to a single account or folder when you need to.
Archive, trash, pin, mute, snooze and batch-select at full speed. Mail actions can be undone for five seconds.
Rich text, drafts that sync to your provider, real reply threading, reply-all, formatted forwards, per-account signatures, Send later and an optional five-second cancel window.
IMAP IDLE watches your inbox between regular checks, and changes stream to every open tab as soon as they are synced.
One responsive app with semantic controls, visible focus and keyboard access. There is no separate mobile site to fall behind.
Keyboard-first triage
Single-key shortcuts cover the work you do all day. Mail actions can be undone for five seconds, so you can move fast. Press ⌘K to find any command.
Security & privacy
Your mailboxes hold your whole life, so Spindle is built in layers. If one layer fails, the others still protect you.
Email HTML is sanitized, then shown from a separate content origin that never receives your app cookies.
Remote images are blocked by default. Allowed images use Spindle’s privacy proxy by default. Settings let you choose automatic loading or direct browser loading.
IMAP and SMTP passwords are encrypted at rest with a versioned key ring kept apart from the database.
IMAP and SMTP must use implicit TLS or required STARTTLS. Spindle never sends a login in cleartext.
Every mailbox belongs to exactly one person. There are no shared inboxes, and admins get no access to your mail.
Files you send are checked by a private ClamAV scanner first. Failed or unavailable checks block sending.
Hosted or self-hosted
The hosted beta is invite-only. Use the address that received your invitation, verify it, then connect your accounts.
# 1. Get the source and set your secrets
git clone https://github.com/staplett/spindle
cd spindle && cp .env.example .env # set AUTH_SECRET
# 2. Start Postgres, Mailpit and ClamAV in Docker
npm ci && npm run db:up
npm run db:migrate && npm run dev
# Bring your own Postgres 17 (Node 24)
git clone https://github.com/staplett/spindle
cd spindle && npm ci
cp .env.example .env # set DATABASE_URL and AUTH_SECRET
npm run db:migrate
npm run dev
Runs on Postgres. Packaged releases and the full guide for OAuth apps, the reverse proxy, TLS and backups are still in progress.
Yes. Spindle keeps message headers, flags and folders in its own database so every view opens instantly. Message bodies and attachments are downloaded when you first open them, then cached within storage limits. Disconnecting an account deletes its local copy and never deletes mail from your provider.
Any IMAP/SMTP server that supports TLS, including Fastmail, iCloud and Yahoo with an app password. Native Gmail and Microsoft 365 connections are planned but not available yet.
Spindle watches your inbox with IMAP IDLE where the server supports it and checks every account about once a minute. Synced changes stream to your open tabs straight away.
Read, archive, trash, move and restore actions show an Undo option for five seconds. Undo send adds a five-second cancellation window when enabled. Turn it off in Settings to make immediate sends eligible without that delay.
Node 24, Postgres and an SMTP relay for sign-in email. Running the optional ClamAV service enables outgoing attachments.
Yes. The same app adapts to your screen, from a phone to an ultrawide monitor.