Try the demo
A working copy with an invented mailbox behind it โ no sign-up, nothing real, nothing kept.
# ihasmail
**Immutable webmail for [Stalwart Mail Server](https://stalw.art).** 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](https://ihasmail.org)** | What it is, what it looks like, the full feature list |
| ๐ **[docs.ihasmail.org](https://docs.ihasmail.org)** | [Installing](https://docs.ihasmail.org/install/) ยท [Configuring](https://docs.ihasmail.org/configure/) ยท [Using it](https://docs.ihasmail.org/using/) ยท [Shortcuts](https://docs.ihasmail.org/shortcuts/) ยท [Rebranding](https://docs.ihasmail.org/rebranding/) ยท [Troubleshooting](https://docs.ihasmail.org/troubleshooting/) |
| ๐ **[FEATURES.md](FEATURES.md)** | Everything it does, feature by feature, with the capability each one needs |
| ๐งช **[KNOWN-ISSUES.md](KNOWN-ISSUES.md)** | What was verified live, and where Stalwart departs from a spec |
| ๐ฃ **[ROADMAP.md](ROADMAP.md)** | What ihasmail does not do, and why |
## Screenshots
| | |
| --- | --- |
| **Inbox & conversation (dark)**  | **Inbox & conversation (light)**  |
| **Composer**  | **Calendar**  |
| **Contacts**  | **Sieve filter builder**  |
Taken against the built-in mock with sample data. More, including the phone
layout, on [ihasmail.org](https://ihasmail.org/#screenshots).
## 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
- **Ten interface languages and twelve themes** โ the nine translations are marked Beta until a native speaker has read them
- **Platform** โ installable PWA, Web Push, `mailto:` handler, no credentials in the browser, strict CSP
The long version is [FEATURES.md](FEATURES.md) and
[ihasmail.org](https://ihasmail.org/#features).
## Requirements
**Stalwart 0.16 or newer** โ sign-in refuses anything older, by name. Tested
against 0.16.22; what changed in each release is in
[KNOWN-ISSUES.md](KNOWN-ISSUES.md).
- **No Stalwart yet?** [ihasmail-oneshot](https://git.coffeylabs.org/coffey-labs/ihasmail-oneshot) deploys a new Stalwart and ihasmail together on one host, in one command.
- **On Stalwart 0.15?** [stalwart-migrator](https://git.coffeylabs.org/coffey-labs/stalwart-migrator) upgrades it in place, or stay on the [`stalwart-0.15-support`](https://git.coffeylabs.org/coffey-labs/ihasmail/releases/tag/stalwart-0.15-support) release.
## Quick start (Docker)
```bash
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](https://docs.ihasmail.org/install/) and
[Configuring](https://docs.ihasmail.org/configure/).
## Development
```bash
npm install
npm run dev:mock # built-in mock Stalwart (demo@example.com / demo)
npm test
```
Architecture, the mock's switches and how versions are numbered are in
[CONTRIBUTING.md](CONTRIBUTING.md#development-setup).
## Contributing
[CONTRIBUTING.md](CONTRIBUTING.md) ยท [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) ยท
[SECURITY.md](SECURITY.md) โ please report vulnerabilities privately.
## License
Copyright (C) 2026 Coffey Labs โ AGPL-3.0-or-later. See [LICENSE](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](https://docs.ihasmail.org/rebranding/).