satchel.email Get it

satchel.email › Open source

A program that holds your mail should be one you can read.

satchel.email is open source, top to bottom. Your mail lives in a database on your own computer, and every line that touches it is on GitHub.

Local first

Mail, calendars and contacts sync straight from your provider into SQLite on your computer, with full-text search built in. Gmail and Microsoft sign in through your browser and hand the app a token, and every password and token is kept in your system keychain.

There's no satchel.email server in the middle: no account with us, no copy of your mail, nothing to breach. Changes you make are saved locally first and queued for the server, so the app works offline and never waits on the network to show you something.

A hosted version may come later, for people who want it. The desktop app will stay local first.

Desktop app Tauri
Web UI vanilla TypeScript
CLIMCPAI folder
One command surface Rust core
Your disk SQLite + full-text search
IMAP · SMTP · JMAP · Gmail · Graph · CalDAV · CardDAV

How it's built

A Rust core

Sync, storage, search, the outbound queue and proposals, shared by every way in.

One command surface

The app, the CLI and MCP all send the same commands. Agents get a smaller set, checked in one place.

Vanilla TypeScript

The interface has no framework: small, fast to load, and easy to read.

Few dependencies

iCalendar, vCard and HTML-to-text are our own code. Libraries only where they pay: MIME, recurrence rules, TLS, IMAP, SMTP, HTTP and HTML sanitizing.

Tested against real servers

A local mail server with seeded accounts runs the integration tests, with no Docker.

Decisions written down

Every significant choice has a short record of what was decided and why. There are 58 of them.

Run it yourself with satchel serve for the web UI, satchel mcp for agents, or satchel call to send any command from a script.

Licenses

PartLicense
The app: core, sync, MCP, CLI, desktop and web UIAGPL-3.0
satchel-mime, satchel-ical, satchel-apiMIT or Apache-2.0
The satchel.email name and logoTrademark policy

The app is AGPL so that anyone who runs a changed copy as a service has to share their changes too. The libraries are permissive so you can use them in anything, open or closed.

Libraries you can use today

satchel-mime

Parse and build MIME messages. Sanitize HTML mail, strip trackers, turn HTML into readable text, quote replies, and spot deceptive links and failed authentication.

satchel-ical

Parse and write iCalendar, expand recurrence rules with their exceptions, handle invitations and replies (iTIP), alarms, and vCard.

satchel-api

The command and event schema every satchel.email client speaks, for building your own front end or tools.

Contributing

satchel.email is maintained by one person, so the process is small. Bug reports and ideas are welcome as GitHub issues. For anything bigger than a small fix, open an issue first so we can agree on the approach. Your first pull request asks you to sign a short contributor agreement: you keep the copyright in your work.

Found a security problem? Please don't open a public issue. Use Report a vulnerability on the repository's Security tab, or email hello@satchel.email (details).