Bulwark: webmail for Stalwart Mail Server. Mail, calendar, contacts and files in one browser client.

latest release  docker: ghcr.io/bulwarkmail/webmail  license: AGPL v3  Discord members online

Website · Documentation · Live demo · Releases · Discord

Bulwark Webmail is a self-hosted webmail client for Stalwart Mail Server, built with Next.js on the JMAP protocol. Mail, calendar, contacts and files share one login, one settings store and one admin dashboard.

Contents

Screenshots

Mail view
Calendar Contacts
Calendar – month, week, day, and agenda views with drag-to-reschedule, iMIP invitations, and CalDAV subscriptions. Contacts – multiple address books, groups, vCard import/export, and autocomplete in the composer.
Themes Plugins
Themes – bundled color themes or upload your own as ZIP bundles; admins can enforce presets. Plugins – extend the client with bundled or third-party plugins installed from a .zip file.
Light mode Settings
Light mode – full theme support, remapping HTML email colors by luminance so dark-on-dark text stays readable. Settings – appearance, identities, filters, templates, security, and more.

Features

  • Mail – threading, unified inbox, cross-account views, full-text search, Sieve filters, S/MIME, templates, scheduled send
  • Calendar – month/week/day/agenda, recurring events, iMIP invitations, CalDAV subscriptions
  • Contacts – multiple address books, groups, vCard import/export
  • Files – Stalwart's JMAP FileNode storage with previews, sharing and folder upload

Across all four: single sign-on and 2FA, multiple accounts, 27 languages, PWA install and web push, themes, plugins and keyboard shortcuts.

The complete list is on All features.

Bulwark comes in two editions: the full edition, a Node.js server with the admin dashboard, OAuth, plugins and settings sync; and Bulwark Lite, the same client as static files that any web host, or Stalwart itself, can serve.

Quick start

docker run -d -p 3000:3000 ghcr.io/bulwarkmail/webmail:latest

Open http://localhost:3000 and the setup wizard walks you through connecting your Stalwart server. The installation guide covers the details, and Stalwart setup covers the mail server side.

Other ways to install

Method Guide
Docker Compose Compose
Behind a reverse proxy or on a sub-path Reverse proxy
From source, without Docker Manual install
Lite on any static host Static hosting
Lite as a container Container image
Lite served by Stalwart Install on Stalwart

To move to a new version, see Updating.

Configuration

Most installs are configured in the setup wizard on first launch and then in the admin dashboard. Environment variables work too and suit immutable infrastructure better; a variable always wins over the admin-managed value.

JMAP_SERVER_URL=https://mail.example.com
APP_NAME=My Webmail
Topic Guide
Overview, config files and precedence Configuration
Every variable Environment reference
OAuth2 / OIDC and single sign-on Authentication, Embedded SSO
Several JMAP servers, custom endpoints Multi-server deployments, Custom endpoints
Branding, logos, per-domain branding Customization
Anonymous telemetry (off by default) Anonymous usage stats

Documentation

Everything lives at bulwarkmail.org/docs:

The pages are Markdown in the website repository; corrections are welcome there.

Development

git clone https://github.com/bulwarkmail/webmail.git
cd webmail
npm install
cp .env.dev.example .env.local   # built-in mock JMAP server, no mail server needed
npm run dev
npm run typecheck
npm run lint
npx vitest run             # unit tests
npm run test:integration   # Stalwart in Docker + Playwright

The contributing guide covers tests, translations, code style and pull requests; Architecture explains how the code fits together.

Built with Next.js 16 and React 19, TypeScript, Tailwind CSS v4, Zustand, Tiptap, next-intl, Tabler Icons, and a custom JMAP client (RFC 8620). Tests run on Vitest and Playwright.

Community and support

License

GNU AGPL v3. This repository preserves the original MIT attribution for the fork lineage in NOTICE.

Acknowledgments

Thanks to root-fr/jmap-webmail and @ma2t for the groundwork this project builds upon.

S
Description
Self-hosted JMAP webmail for Stalwart Mail Server. Mail, calendar, contacts, and files in one client.
Readme Multiple Licenses
77 MiB
Languages
TypeScript 98.3%
JavaScript 0.9%
CSS 0.4%
Shell 0.3%