Docs / Getting StartedEdit on GitHub

Editions

There is one client and two ways to ship it. Bulwark runs as a Node.js service, usually in a container, and its server does the things a browser cannot do on its own. Bulwark Lite is the same client exported as static files, served by whatever already serves your HTML, with the browser talking JMAP to Stalwart directly.

The toggle at the top of every page on this site switches the documentation between the two. Pages that apply to one edition only are hidden in the other, and say so if you land on one.

Side by side

BulwarkBulwark Lite
Runs asNode.js process (Docker image, standalone tarball, or npm start)Static files on any web host
Installdocker run, then a web setup wizardUnzip, edit config.json, upload
ConfigurationWizard and admin dashboard, or environment variablesconfig.json, plus LITE_* build inputs for baked-in defaults
Mail, calendar, contacts, filesYesYes
Global search, threads, filters, S/MIME, templatesYesYes
Several accounts at onceYesYes
LoginPassword + TOTP, OAuth / OIDC, SSO, embedded SSOPassword + TOTP
"Remember me"Encrypted server-side cookieStalwart refresh token in the browser
ThemesYes, including uploaded ZIP bundlesYes
Plugins and sidebar appsYesNo
Admin console and setup wizardYesNo
Settings sync across devicesYesNo (export / import by hand)
Account security tab (password change, TOTP enrolment, app passwords)YesNo
iCal / webcal URL subscriptions, CalDAV discoveryYesNo (.ics import still works)
Office document editing (WOPI)YesNo
Sender favicons as avatarsYesNo (initials)
Register as the default mail app (mailto: handler)YesNo
PWA installYes, with service worker, web push and unread badgeManifest only; no service worker, no push
Update noticeYes, red for security releasesNo; re-download the zip
Anonymous telemetryOpt-inNone (nothing to send it)
Deep linksYesYes, via host rewrite rules or the 404.html replay
Mail server requirementStalwart with JMAPStalwart with JMAP and http.permissive-cors = true
Release artifactghcr.io/bulwarkmail/webmail, bulwark-standalone-<v>-linux-<arch>.tar.gzbulwark-lite-<v>.zip

How to choose

Not sure? A few quick questions give you a recommendation.

Pick Lite if the row that matters to you is the first one: you don't want another process to run. A static folder is easier to host, back up and roll back than a service, and for a password-login deployment nothing is lost.

Pick Bulwark the moment you want something from the "No" column. OAuth and SSO, plugins, and settings sync are the usual reasons. The admin console is another: it is where per-hostname branding, the extension marketplace and the settings policy live.

Both editions build from the same repository and the same commit, so a feature that is browser-side in one is browser-side in the other. Switching later means swapping the deployment, not the data: mail, calendars and contacts live on Stalwart either way, and the only thing you'd carry over is the branding.

Where each is documented