 |
 |
| 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 – 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 – full theme support, remapping HTML email colors by luminance so dark-on-dark text stays readable. |
Settings – appearance, identities, filters, templates, security, and more. |
## What Bulwark includes
Bulwark is a full webmail suite. It bundles the four apps most self-hosters end up wanting:
- **Mail** – threading, unified inbox, cross-account "All accounts" views, full-text search, Sieve filters, S/MIME, templates
- **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 and folder upload
They share one login, one settings store, and one admin dashboard. SSO, 2FA, multi-account, 27 languages, PWA install, themes, and plugins apply across all four.
Full feature list: **[FEATURES.md](FEATURES.md)**.
---
## Quick start
### Docker
```bash
docker run -d -p 3000:3000 ghcr.io/bulwarkmail/webmail:latest
```
Or with Docker Compose:
```bash
docker compose up -d
```
On first launch, open `http://localhost:3000` and the setup wizard takes over. Installs that already define `JMAP_SERVER_URL` skip it and keep the env-managed flow under [Configuration](#configuration).
### From source
```bash
git clone https://github.com/bulwarkmail/webmail.git
cd webmail
npm install
npm run build && npm start
# Then open http://localhost:3000 to run the setup wizard
```
### Static Lite build
Bulwark Lite is the same client exported as static files: no Node.js process, upload the folder to any static host (nginx, Caddy, Netlify, Cloudflare Pages, GitHub Pages, an S3 bucket). Mail, calendar, contacts and files talk to the JMAP server straight from the browser, so the only server-side requirement is CORS on the mail server (`http.permissive-cors = true` in Stalwart).
Every release ships `bulwark-lite-