Hi all,
So I’ve been running Stalwart for a while now and I love it (migrate from Mailcow after several years), and the one thing that kept bugging me was the Android side: there’s basically no polished email client that speaks JMAP natively. You end up falling back to IMAP and missing the whole point. So… I ended up building one.
It’s called Sterna Mail. It’s a private, FOSS (GPLv3) Android client built for JMAP first with full IMAP/SMTP too, so you pick the protocol when you add an account. On a JMAP server like Stalwart you get the nice stuff: fast incremental sync, push without any Google services, less battery/data. No ads, no tracking, no analytics, nothing from Google in there.
A few things it does:
- Multiple accounts + unified inbox (mix JMAP and IMAP/SMTP if you want)
- Push for new mail (JMAP push, and IMAP IDLE for the legacy accounts)
- Offline cache, conversation threading, search
- Compose with attachments, drafts, signatures, schedule send + undo send
- Proper HTML rendering
- Folders, flags, archive, report-spam, configurable swipe actions
- Remote images / tracking pixels blocked by default, biometric app lock
- Material 3, follows your system light/dark theme, 9 languages
I test it against Stalwart myself (mail.* on my own box), so it’s not theoretical, it’s what I use daily. That said it’s young, and I’m sure there are JMAP edge cases I haven’t hit. If you run Stalwart and try it, I’d genuinely love bug reports.
Install right now via the APK on Codeberg (works nicely with Obtainium for auto-updates). It’s also in review for F-Droid at the moment.
- Source + releases: emon/sterna-mail: Private, native Android email client for JMAP and IMAP/SMTP — FOSS, no Google services, no tracking. - Codeberg.org
- Latest APK: And finds it has the message alongside instructions on how two trees must be set.
Anyway, happy to answer anything, and thanks to the Stalwart folks for the server, it’s been a joy to build against. ![]()
emon
PS: here’s a screenshot:
