JW
Dossier Rampart
Hire me
Public project · Kotlin · Apache 2.0 · Windows & Linux
Built by Justin Willhite

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.

01

Repo stats

Pulled hourly from the local checkout and the GitHub API, so these are live rather than a snapshot.

226Commits
2026-09-16First commit
2026-09-28Last push
KotlinPrimary language
0GitHub stars
0.1.218Latest release
Also built with Python, PowerShell, Sieve and Dockerfile for the companion server and install scripts.
02

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]

03

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.
04

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.

KotlinComposeGradleJMAPIMAP / SMTPjsoupSieve

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.

05

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.

06

FAQ

What mail server does Rampart work best with?
Stalwart. It speaks JMAP, and JMAP is what lets Rampart manage your account and server settings, not just your mail, from the same window. Rampart also works against any IMAP and SMTP server that takes a password, with the server-administration features unavailable there because IMAP has no way to carry them.
Does Rampart run on macOS?
Not yet. An unnotarized macOS build is worse than none, and notarizing needs a paid Apple developer account.
Is there a Rampart mobile app?
No, and there is no plan to build one. Sterna Mail already covers native Android over JMAP and does it well, so Rampart is built for the two things that app does not do: a real desktop client, and real mail-server administration.
What does Rampart's optional companion server do?
It covers the one thing a desktop app cannot do alone: knowing whether a message you sent was opened. It is a small container plus a token that stores a random id, a timestamp, a user agent and a truncated network address per fetch. It never sees a message, a subject, a recipient or a password, and open tracking stays off unless you turn it on, per message.
Is Rampart free and open source?
Yes. Apache 2.0 license, source on GitHub.

← Back to Work