Fast mail client with Vim-inspired hotkeys, plain-text-first reading, and offline-capable PWA support.
🚧 WIP — This is early-stage software. Mail sync and sending are not yet implemented.
Esc back-stack, and a ⌘K command palette.f overlays single-letter badges on visible rows; press a letter to jump./folder/:id, /folder/:id/message/:id, /search?q=…), browser back/forward, reload-safe.mailbrus message search / message read with text, json, and toon output formats.mailbrus-server sidecar.flowchart LR
user(["User"])
subgraph frontend["Frontend (TypeScript)"]
spa["SvelteKit SPA<br/>+ Service Worker (PWA)"]
end
tauri["src-tauri<br/>desktop shell"]
cli["mailbrus-cli"]
subgraph rust["Rust workspace"]
server["mailbrus-server<br/>axum HTTP + JSON API"]
core["mailbrus-core<br/>Maildir / notmuch / SMTP"]
end
store[("Maildir + notmuch<br/>on disk")]
user --> spa
user --> tauri
user --> cli
tauri -- embeds --> spa
tauri -. spawns sidecar .-> server
spa -- HTTP/JSON --> server
server --> core
cli --> core
core --> store
The SPA is the only UI; it runs either in a browser as a PWA or inside a Tauri window where the desktop shell spawns mailbrus-server as a sidecar. The server and CLI both go through mailbrus-core, which talks to a local Maildir indexed by notmuch.
mailbrus-core builds on the excellent io-email and io-maildir coroutine libraries; SMTP sending is planned on io-smtp. Huge thanks to the Pimalaya project.notmuch Rust crate.mailbrus-core, mailbrus-cli, mailbrus-server, and src-tauri. Server uses axum on tokio; messages are parsed with mail-parser.Mailbrus ships a hermetic Playwright suite that drives the real SPA against a real mailbrus-server backed by a real notmuch index — one freshly cloned mailbox and its own server per test, with guaranteed teardown. Nothing is mocked: every test exercises the browser → HTTP → notmuch → Maildir path end to end.
nix develop # notmuch + Playwright browsers
deno install # hydrate node_modules
deno task test:e2e # headless run
deno task e2e:ui # interactive UI mode
See docs/e2e-testing.md for the full architecture, fixture model, and trace-debugging workflow.
Requires Nix with flakes enabled.
# Run directly (ephemeral)
nix run github:antono/mailbrus
# Install to your profile
nix profile install github:antono/mailbrus
mailbrus --help
See docs/development.md for server usage, CLI flags, and debug logging.