Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

Mailcow vs Stalwart vs Mailu at 10,000 Mailboxes: What Holds Up in Production

Description and use

Stalwart was chosen for migrating 10,000 university mailboxes due to its JMAP support, external PostgreSQL and MinIO storage, and clustering capabilities. The configuration model changed in v0.16, requiring a datastore JSON file and database‑based settings.

Problem

Migrating a university email system to 10,000 mailboxes while ensuring high availability, scalability, and manageable administration.

Outcome

Stalwart provided a scalable, cluster‑ready mail solution that met the university’s 10,000‑mailbox requirement, with external PostgreSQL and MinIO storage, JMAP support, and manageable administration via web UI and API.

Workflow

  • 1. Evaluate each candidate based on documentation and production experience.
  • 2. Choose Stalwart for its Rust binary, JMAP support, and clustering model.
  • 3. Configure PostgreSQL for metadata and MinIO for message blobs.
  • 4. Replace the old config.toml with a datastore JSON file and use the web admin/API for settings.
  • 5. Set up NATS for inter‑node coordination and HAProxy as a front‑end.
  • 6. Create a shared PostgreSQL replica and MinIO distributed mode for redundancy.
  • 7. Import accounts from LDAP/AD and migrate mail with imapsync, calendars and contacts with a custom script.
  • 8. Apply per‑user send‑rate limits via webmail layer and reverse proxy.
  • 9. Test failover by shutting down a node and verifying continuity.
  • 10. Monitor performance and adjust resources as needed.

Evidence

We run Stalwart for a university with 10,000 mailboxes

Source

Stalwart is a single binary written in Rust that speaks every mail and groupware protocol itself

Source

We keep metadata and settings in PostgreSQL and message blobs in S3-compatible object storage (MinIO)

Source

Version 0.16 changed the configuration model. There's no big config.toml anymore

Source

We wanted a server‑side send rate limit per user, so a compromised account talking raw SMTP couldn't blast out mail

Source

  • Record date: 2026-10-08T13:40:54.029Z