What Is Listmonk?
Listmonk is a high-performance newsletter and mailing list manager. Written in Go, backed by PostgreSQL β it handles millions of subscribers on a single server. 16K+ GitHub stars.
Listmonk vs Mailchimp vs Kit.com
| Feature | Listmonk | Mailchimp | Kit.com |
|---|---|---|---|
| Self-hosted | β | β | β |
| Subscribers (free) | Unlimited | 500 | 10,000 |
| Monthly emails | Unlimited | 1,000 | Unlimited |
| Price | $0 + SMTP | $13-350/mo | $0-29/mo |
| Template editor | β HTML + WYSIWYG | β | β |
| Segmentation | β SQL-powered | β | β |
| Analytics | β Opens/clicks | β | β |
| Automation | β οΈ Basic | β | β |
| Landing pages | β | β | β |
| Data ownership | β | β | β |
Architecture
βββββββββββββββββββββββββββββββββββββ
β Listmonk (Go) β
β β
β βββββββββββββ βββββββββββββββ β
β β Web UI β β REST API β β
β βββββββ¬ββββββ ββββββββ¬βββββββ β
β β β β
β βββββββΌβββββββββββββββββΌβββββββ β
β β Core Engine β β
β β β’ Campaign Manager β β
β β β’ Template Renderer β β
β β β’ Subscriber Manager β β
β β β’ Queue + Rate Limiter β β
β βββββββββββββββ¬βββββββββββββββ β
β β β
β βββββββββββββββΌβββββββββββββββ β
β β PostgreSQL β β
β βββββββββββββββββββββββββββββββ β
β β
β SMTP: SES, Mailgun, Postmark β
βββββββββββββββββββββββββββββββββββββDocker Deployment
version: "3.9"
services:
listmonk:
image: listmonk/listmonk:latest
ports:
- "9000:9000"
environment:
- TZ=Europe/Amsterdam
volumes:
- ./config.toml:/listmonk/config.toml
depends_on:
- db
db:
image: postgres:16-alpine
environment:
- POSTGRES_USER=listmonk
- POSTGRES_PASSWORD=listmonk
- POSTGRES_DB=listmonk
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:config.toml
[app]
address = "0.0.0.0:9000"
admin_username = "admin"
admin_password = "your-secure-password"
[db]
host = "db"
port = 5432
user = "listmonk"
password = "listmonk"
database = "listmonk"
# Amazon SES
[smtp.ses]
enabled = true
host = "email-smtp.eu-west-1.amazonaws.com"
port = 587
auth_protocol = "login"
username = "YOUR_SES_KEY"
password = "YOUR_SES_SECRET"
max_conns = 10
max_msg_retries = 3
idle_timeout = "15s"Performance
Listmonk is written in Go β itβs incredibly efficient:
| Subscribers | Send Rate | Server Requirements |
|---|---|---|
| 10K | 500/min | 1 CPU, 1GB RAM |
| 100K | 5,000/min | 2 CPU, 2GB RAM |
| 1M | 50,000/min | 4 CPU, 8GB RAM |
| 10M | 200,000/min | 8 CPU, 16GB RAM |
Compare: Mailchimp charges $350/month for 100K subscribers. Listmonk handles it on a $10/month VPS.
SMTP Provider Costs
| Provider | Per 1K emails | 100K emails/mo |
|---|---|---|
| Amazon SES | $0.10 | $10 |
| Mailgun | $0.80 | $80 |
| Postmark | $1.25 | $125 |
| SendGrid | $0.75 | $75 |
Total cost for 100K subscribers: Listmonk ($0) + Hetzner VPS ($8) + SES ($10) = $18/month vs Mailchimpβs $350/month.
Key Features
SQL-Powered Segmentation
-- Target subscribers who opened last campaign but didn't click
SELECT * FROM subscribers
WHERE id IN (
SELECT subscriber_id FROM campaign_views
WHERE campaign_id = 42
)
AND id NOT IN (
SELECT subscriber_id FROM link_clicks
WHERE campaign_id = 42
);Template System
{{ template "header" . }}
<h1>Hello {{ .Subscriber.FirstName }}!</h1>
{{ if eq .Subscriber.Attribs.plan "pro" }}
<p>As a Pro member, here's your exclusive content...</p>
{{ else }}
<p>Upgrade to Pro for exclusive access.</p>
{{ end }}
{{ template "footer" . }}REST API
# Add subscriber
curl -u admin:password http://listmonk:9000/api/subscribers \
-d '{"email":"new@user.com","name":"New User","lists":[1]}'
# Send transactional email
curl -u admin:password http://listmonk:9000/api/tx \
-d '{"subscriber_email":"user@domain.com","template_id":1,"data":{"order_id":"12345"}}'When to Use Listmonk
- β Budget-conscious (under $20/mo for any scale)
- β Data ownership requirements (GDPR, regulated industry)
- β Developer-friendly (API-first, SQL segmentation)
- β High volume (millions of subscribers)
- β Non-technical team (no landing page builder)
- β Need complex automation sequences (use n8n + Listmonk)