12 ms·
Show HN: Self-hosted email server for 2026 – single binary, CalDAV
Built this after getting frustrated with the paying to a google for email. Now running it for 1 months in production.
What it does:
- Full SMTP server (inbound/outbound, DKIM signing, SPF/DMARC checking)
- IMAP with IDLE support
- CalDAV/CardDAV (replace Google Calendar/Contacts)
- Web admin panel with Prometheus metrics
- Greylisting for spam prevention
- Auto-discovery (mail clients configure themselves)
- Audit logging for compliance
What it doesn't do:
- Webmail (use Roundcube, etc.)
- ML-based spam filtering (greylisting + basic heuristics only)
- Clustering/HA
- fenilsonani 9mo agoI built this after Google Workspace pricing jumped again and I wanted full control over my email stack. This is a self-hosted email server written in Go, shipped as a single binary. It supports IMAP (with IDLE), SMTP, DKIM, SPF/DMARC, and CalDAV, with modern defaults and minimal configuration. The goal is something you can run on a small VPS for personal or small-team use without vendor lock-in. I’d really appreciate feedback on the architecture, security model, and what you’d want to see next.
- slooonz 9mo agoWhy would I pick this over established players : Maddy, Mox, Stalwart ?
- fenilsonani 9mo agoHonestly if you need something battle-tested right now, those are solid choices. I built this because I had specific pain points - didn't want to set up Postgres or MySQL just for email metadata, wanted calendar and contacts baked in for a complete Google Workspace replacement, and wanted dead simple config that still does DKIM/SPF/DMARC properly. Future roadmap includes SendGrid-style stuff - API for transactional emails, webhooks. But the core idea stays: good architecture, solve real pain points, keep it simple and fast.
- atmanactive 9mo agoVery interesting, thanks for sharing. Looking at the /etc/mailserver/config.yaml example from README.md, I couldn't help but notice that the Bind-To Listening IP is missing. What happens if I have a multi homed machine with several IPs? Does the server gloom on all IPs?
- fenilsonani 9mo agoYeah you caught that - right now it just binds to all interfaces by default. Definitely need to add a bind_address option in the config. That's going on my list. If you're on a multi-homed setup right now, firewall rules would be the workaround, but I hear you - it should be in the config properly. Thanks for the feedback, this is exactly what I was hoping to get from posting here.