jcoffey-dev 2e7fd9be76
ci / node (push) Skipped
ci / version (push) Skipped
ci / stalwart (stalwartlabs/stalwart@sha256:c429b311c93db5606598abc1c68225a85a6953183848ae01bee9c6a98885836c, 0.16.27) (push) Skipped
ci / docker-build (push) Skipped
ci / publish (push) Skipped
github/ci (branch) GitHub Actions
ci / github (push) Successful in 2m25s
ci / stalwart (stalwartlabs/stalwart@sha256:baafeacd6cbde77acdd94af49972d41c6709e54a376df48e18a9fe3f445eb3d5, 1.0.0) (push) Skipped
Merge pull request 'Calendar: search events from the search bar' (#70) from feat/calendar-search into main
2026-11-06 18:24:33 +00:00
2026-09-22 09:02:57 -07:00

ihasmail

Try the demo
A working copy with an invented mailbox behind it — no sign-up, nothing real, nothing kept.

License: AGPL-3.0-or-later Supports Stalwart 0.16.27 and 1.0 Documentation: docs.ihasmail.org by Coffey Labs Forum: community.coffeylabs.org Chat on Discord

ihasmail

Note

Development happens on git.coffeylabs.org/coffey-labs/ihasmail; the copy on GitHub is a read-only mirror. Report issues at git.coffeylabs.org/coffey-labs/ihasmail/issues, join discussions at community.coffeylabs.org, or chat on Discord.

Immutable webmail for Stalwart Mail Server. Mail, calendars, contacts, files and filters in one app that works as well on a phone as on a desktop — and a container with nothing to persist.

ihasmail talks only JMAP to Stalwart. There is no database, no IMAP or SMTP, and with IMMUTABLE=1 no writable filesystem either: everything durable, settings included, belongs to Stalwart, so the container is disposable.

🌐 ihasmail.org What it is, what it looks like, the full feature list
📘 docs.ihasmail.org Installing · Configuring · Using it · Shortcuts · Rebranding · Troubleshooting
📋 FEATURES.md Everything it does, feature by feature, with the capability each one needs
🧪 KNOWN-ISSUES.md What was verified live, and where Stalwart departs from a spec
🛣 ROADMAP.md What ihasmail does not do, and why

Screenshots

Inbox & conversation (dark) Inbox, dark theme Inbox & conversation (light) Inbox, light theme
Composer Composer Calendar Calendar
Contacts Contacts Sieve filter builder Filters

Taken against the built-in mock with sample data. More, including the phone layout, on ihasmail.org.

What's in it

  • Mail — conversations, labels, search operators, keyboard shortcuts, scheduled and undo send, invitations and RSVP, filters made from a message
  • Calendar — month, week, day and agenda views, recurrence, attendees and free-busy
  • Contacts — address books, groups, vCard import and export
  • Files — browse, upload, move, share
  • Signature checking — S/MIME signed mail verified as you read it
  • Settings that follow the account, kept in the account's own storage on Stalwart
  • On a phone — swipe to archive or delete, pull to refresh, hold to select
  • Administration — a dashboard, accounts, groups, mailing lists, roles, tenants and domains, each shown only when the Stalwart role allows it
  • Eleven interface languages and twelve themes — Dutch and Turkish come from native speakers; the other eight translations are marked Beta until one has read them
  • Platform — installable PWA, Web Push, mailto: handler, no credentials in the browser, strict CSP

The long version is FEATURES.md and ihasmail.org.

Requirements

Stalwart 0.16 or newer — sign-in refuses anything older, by name. On Stalwart 1.0 you need ihasmail v2026.10.30 or newer. Which versions are supported is under Support; what changed in each Stalwart release is in KNOWN-ISSUES.md.

Support

ihasmail is in maintenance mode. It gets security fixes, dependency updates and bug fixes, but no new features.

Stalwart Status
1.0.x Supported, with ihasmail v2026.10.30 or newer
0.16.27 Supported
0.16.0 – 0.16.26 Signs in, but isn't tested. Upgrade to 0.16.27
0.15 The stalwart-0.15-support release, with no further fixes

Every pull request runs ihasmail's own requests against real Stalwart 0.16.27 and 1.0.0 servers. When Stalwart puts out a new release, we test against it and fix what breaks. If a release would need more than a bug fix to support, support stops at the last Stalwart version that works, and this table will say so.

Quick start (Docker)

cp .env.example .env
# edit: STALWART_URL=https://mail.example.com  and  APP_SECRET=$(openssl rand -base64 48)
docker compose up --build -d
# → http://localhost:8080 — put a reverse proxy in front for TLS

Or pull the published image, registry.coffeylabs.org/coffey-labs/ihasmail. Releases are weekly, so it is usually a few days behind main.

People sign in with their Stalwart mailbox credentials. An account with two-factor authentication needs an app password, created in Stalwart's own settings.

Everything else — TLS, running immutably, several Stalwart servers, settings the installation decides, every environment variable — is in Installing and Configuring.

Development

npm install
npm run dev:mock     # built-in mock Stalwart ([email protected] / demo)
npm test

Architecture, the mock's switches and how versions are numbered are in CONTRIBUTING.md.

Contributing

CONTRIBUTING.md · CODE_OF_CONDUCT.md · SECURITY.md — please report vulnerabilities privately.

License

Copyright (C) 2026 Coffey Labs LLC — AGPL-3.0-or-later. See LICENSE.

If you run a modified ihasmail, set SOURCE_URL to your own repository: the sign-in page and Settings › About both show it. See Rebranding.

S
Description
Immutable webmail for Stalwart Mail Server: mail, calendars, contacts, files and filters over JMAP, in a container with nothing to persist.
Readme AGPL-3.0
7.5 MiB
2 Stars 1 Watchers 0 Forks
v2026.10.30
Latest
2026-10-30 20:29:36 +00:00
Languages
TypeScript 94.9%
CSS 2.9%
JavaScript 1.6%
Python 0.3%
Shell 0.2%