Nouvex Mail. Stack and specification.
An open-source mail client that brings every mailbox into one inbox. A sync engine in Go keeps the accounts up to date on your own server, and the apps on the web, iPhone, iPad and Mac fetch only what changed.
In development
As of October 2026
Apps
Web · iPhone · iPad · Mac
API
Hono · WebSocket
NATS
Commands · events
Sync engine
Go · IMAP · SMTP
Mail server
your provider
At a glance
The key figures of Nouvex Mail, backed by the code.
Stored encrypted
Every message with its own key, sealed for its owner
Sealed storage
Web and Apple
One inbox on the web, iPhone, iPad and Mac, Android planned
Web app and Apple apps
AGPL-3.0
Server, engine and apps open source, SDK and components under Apache-2.0
Licence
From the mailbox to the app
From a new account to the reply that leaves.
Add an account
Add an account
Enter the IMAP and SMTP access, with presets for Gmail and iCloud on the web. The mailbox password is stored encrypted with the server's key.
Sync
Sync
The engine fetches the mailboxes and keeps a connection open with IMAP IDLE, so new mail in the inbox arrives at once.
Seal
Seal
Every message gets its own key and is stored encrypted for you, subject, sender and attachments included.
Fetch
Fetch
The apps only ask what changed since they last looked, and open the mail on the device.
Sort
Sort
One inbox for every account. A small model per user sorts mail into tabs, and snooze is a folder that other mail apps see too.
Reply
Reply
Mail is written as plain text. Sending can be taken back for up to 30 seconds or scheduled for later.
The stack
Six parts with clear boundaries: the engine talks to the mail servers, the API to the apps.
Apps
Web with React, Vite and TanStack, the mail in the browser's database. iPhone, iPad and Mac with SwiftUI and GRDB.
API
Hono on Bun, the interface as OpenAPI from Zod schemas; the Swift client is generated from it. Events arrive over WebSocket.
Sync engine
Go with go-imap and go-smtp. The only service that talks to mail servers and writes mailboxes.
NATS
API and engine never call each other directly: commands go through a JetStream work queue, events via pub-sub.
Storage
PostgreSQL 18 for metadata and the change log, S3-compatible storage for bodies and attachments.
Sealing
HPKE per RFC 9180 with X25519 and AES-256-GCM. What the engine has stored, it cannot open itself.
Every mailbox.
One inbox.
Encrypted for you.
Specification
Accounts
- Protocols
- IMAP and SMTP
- Connection
- encrypted only, TLS or STARTTLS
- Presets
- Gmail and iCloud with an app password, in the web app
- New mail
- at once via IMAP IDLE, in the inbox
- Sign-in with OAuth
- for GmailPlanned
Inbox
- Accounts
- one list for all
- Tabs
- People, Updates, Newsletters, Promotions, Social
- Sorting
- a small model per user, on the same server
- Groups
- several accounts as one inbox, with focus times
- Snooze
- as a folder on the server, visible to other mail apps
- Search
- on the device, in subject, preview and sender
- Filters
- from:, to:, after:, before:, is:unread, is:starred, has:attachment, in:archived
Reading
- HTML mail
- sanitised with DOMPurify, without scripts
- Dark mode
- for the mail itself too, original on request
- Unsubscribe
- in one click per RFC 8058
- Codes and meetings
- briefly as a card in the sidebar
- Pictures
- through a proxy, optionally only after asking
Writing
- Format
- plain text, forwards keep the original
- Attachments
- up to 25 MB per message
- Undo
- up to 30 seconds after sending
- Send later
- with an outbox
- Drafts
- in the mailbox's Drafts folder
- Signatures
- per account
Security
- Storage
- one key per message, sealed for its owner
- With the server key
- mailbox passwords, outgoing mail, sorting model
- Password
- never leaves the device, PBKDF2 with 600,000 rounds
- Sign-in
- password, passkeys, TOTP
- Accounts
- set up by the operator, you choose the password
- What the server sees
- mail passing through, metadata, remote images, all named in the security doc
Platforms
- Web
- in the browser, mail stored locally
- iPhone and iPad
- iOS 18 and later, with push for new mail
- Mac
- macOS 26 and later, with a menu bar item and notifications
- Android
- laterPlanned
- Interface language
- English
Architecture
- Engine
- Go
- API
- Hono on Bun, 34 operations
- Messaging
- NATS JetStream
- Database
- PostgreSQL 18
- Storage
- S3-compatible
- Operation
- self-hostable with Docker
Licences
- Server, engine and apps
- AGPL-3.0
- SDK, components, rich mail
- Apache-2.0
- Source code
- public on GitHub
Status
- Done
- web app, sync engine, sealed storage
- In testing
- iPhone and iPad app through TestFlight, version 0.1.0
- Open
- stable release
- Planned
- Android, sign-in with OAuth, embeddable component
Questions about Nouvex Mail
Answered briefly; the details are in the specification.