Rampart, a desktop mail client built for Stalwart.
Rampart is a desktop mail client for Windows and Linux that treats your mail server, not just your inbox, as part of the application. It is built first for Stalwart over JMAP, and it works against any IMAP and SMTP server too, with each missing capability degrading with a visible reason instead of an error.
Repo stats
Pulled hourly from the local checkout and the GitHub API, so these are live rather than a snapshot.
Why I built it
An IMAP client can move messages and very little else. It has no way to carry your filter rules, your aliases, your vacation responder, your app passwords or your server's own configuration, so every IMAP client, however good it is, leaves nine tenths of a modern mail server invisible and sends you to a browser for the rest. I wanted a client that closes that gap: type your email address, and it finds the rest, tries JMAP first, and falls back to IMAP.
Rampart is built for people who run Stalwart, because Stalwart speaks JMAP, and JMAP is what makes the second half of the app possible: your account settings and your server settings, managed from the same window as your mail. There is already a good native Android JMAP client, Sterna Mail, so I built Rampart for the two things that app does not do: a real desktop client, and real server administration.
[The personal reason I run my own mail server and wanted this specific tool, in Justin's words]
What it does
What ships today, from the repo's own README.
- Reading. Threaded conversations, a unified inbox across accounts, instant offline search, push over the JMAP WebSocket.
- Knowing what a message is. A word above anything that cannot prove who sent it, drawn from the SPF, DKIM and DMARC results the server already recorded. Trackers named rather than silently blocked.
- Writing. Formatting, recipient autocomplete from your address book and mail history, templates that fill placeholders from the recipient, read receipts answered as a draft rather than sent automatically, undo-send on a timer.
- Keeping a mailbox. Star, tag, archive, spam, trash, all undoable. Snooze a message until later. Filters as Sieve, built in the UI or written by hand.
- Calendar invitations answered in place, contacts on the server, a dashboard that counts what is already in the mailbox, and open tracking switched on one message at a time and never by default.
- Eighteen themes, keyboard shortcuts with the list on
?, a command palette on Ctrl+K, passwords in the operating system's credential store, and it updates itself.
Stack and architecture
Kotlin and Compose, built with the Gradle wrapper (JDK 21 is the only prerequisite). The account and server settings screens are rendered from Stalwart's own published schema at /api/schema (359 forms) rather than hand written, so they stay correct as Stalwart adds fields. The mail token and the admin token are two separate, separately scoped credentials, so a renderer bug in one cannot reach the other. The HTML reader runs no JavaScript and blocks remote content by default: jsoup cleans the HTML and Compose draws it, with no embedded browser engine in the process. Rampart builds on jmap-mua by Daniel Gultsch.
The optional open-tracking companion server lives in the repo's server/ directory as its own container with its own compose file, separate from the desktop app.
Status
Mail (read, write, send, search, file, offline) and account-level Stalwart features (Sieve filter rules with a builder, vacation responder, signatures, contacts, quota) work today. App passwords, API keys and aliases are being built next on the account side. Full server administration, accounts, domains, DKIM, the mail queue, certificates, TLS, listeners and logs, is being built. Windows and Linux ship; macOS is not built, because an unnotarized build is worse than none and notarizing needs a paid Apple developer account.