Home / Compare / Mailstead vs mailcow

Mailstead vs mailcow

mailcow and Mailstead both end in a browser inbox. They do not start from the same machine. mailcow: dockerized is a mail server and groupware: SMTP, IMAP, POP3, antivirus, and a database stack you operate. Mailstead is one web application. Resend accepts and delivers the mail; Mailstead stores copies and shows them.

If Thunderbird, a phone’s mail app, or port 25 matters, start with mailcow or another real mail server. If those protocols are a burden you are trying to avoid, Mailstead exists for that case.

What you run

Mailstead default deploymailcow, from the project docs
ProcessesOne container. Jobs run in that process. No Redis or CeleryDocker Compose groupware. Docs name nginx, Postfix, Dovecot, Rspamd, MariaDB, Redis, and more
Minimum RAMNot published as a benchmark. The app is a Django service plus a volume6 GiB RAM and 1 GiB swap. 8 GiB recommended for about 5 to 10 users. A site with 15 phones on ActiveSync and about 50 concurrent IMAP connections should plan 16 GiB
Disk before mailVolume you attach. Railway Hobby allows up to 5 GB20 GiB without emails
ProtocolsHTTPS for the app. No SMTP, IMAP, or POP3 listenerPorts 25, 465, 587, 143, 993, 110, 995, 4190, plus 80 and 443
External dependencyResend API and webhooks, or mail does not flowYour own MTA. Docs also list update downloads, spam-list connections, and outbound SMTP
Licence costMIT, $0mailcow’s docs describe the software stack; this page does not restate a support contract

mailcow source: Prepare your system, checked 2026-10-14. The page says OpenVZ, LXC, and NAS appliances are unsupported, and that a correct DNS setup is required before installation. ClamAV can be disabled if RAM is tight. Those are mailcow’s words about mailcow.

Mailstead’s default path is the Railway template: a volume at /data, health check at /healthz, bootstrap, then DNS at Resend. Railway Hobby is $5 per month including $5 of usage (Railway pricing). That fee does not buy port 25, and many clouds block outbound port 25 anyway. Mailstead never needed it, because Resend sends the message.

Where each design fails

mailcow fails closed when you wanted “email” but received a mail system: firewall rules, IP reputation, certificate renewals, and spam updates. The docs are frank that this is groupware, not a tiny MTA. It is the better fit when IMAP or ActiveSync is a requirement, when mail must not depend on a third-party sending API, or when you already have a VM with the RAM above and an address that can speak SMTP.

Mailstead fails closed when Resend rejects the domain, the daily or monthly quota is exhausted, or you need a desktop client. Local junk handling is a filter rule plus DMARC-fail routing. It is not ClamAV or Rspamd. There is no claim of a tested ceiling at 50 users.

You can run Mailstead beside other Railway services and keep one volume. You should not expect to run mailcow inside a small application container. The mailcow docs tell you not to put it on container platforms that are not full virtualization.

A practical split

Use mailcow, or a hosted suite, when the mailbox has to speak IMAP. Use Mailstead when the mailbox has to be a website, the transport can be Resend, and the operator wants one service. The deploy guide is the Mailstead procedure. It will not install Postfix.

Sources

Deploy on Railway

Markdown version of this article