Deploy Listmonk — Open Source Mailchimp Alternative on Railway
Launch a Self-Hosted Newsletter with Listmonk on Railway
Just deployed
/var/lib/postgresql/data
Listmonk
Just deployed
/listmonk/uploads

Deploy and Host Listmonk
Self-host Listmonk on Railway and get a fully production-ready, open source newsletter and mailing list manager — no per-subscriber fees, no data lock-in. Listmonk is a single Go binary that handles millions of subscribers, high-volume email campaigns, transactional messages, and detailed analytics. This Railway template wires up listmonk/listmonk:latest alongside a managed PostgreSQL database, auto-installs and migrates the schema on first boot, and exposes the dashboard via Railway's edge SSL — ready to send campaigns in minutes.
Getting Started with listmonk on Railway
After your Railway deploy completes, navigate to your public Railway domain (e.g. https://listmonk-production.up.railway.app) and log in with the admin credentials you set in LISTMONK_ADMIN_USER and LISTMONK_ADMIN_PASSWORD. Head to Settings → General and confirm the Root URL exactly matches your domain with no trailing slash — every subscription confirmation link, unsubscribe URL, and open-tracking pixel is built from this value. Next, go to Settings → SMTP and configure your outbound email provider (Amazon SES, Mailgun, Brevo, Postmark, or any SMTP server). Once SMTP is verified, create your first mailing list under Lists, import subscribers via CSV or the API, and send a test campaign.

About Hosting listmonk
listmonk is a self-hosted, open source newsletter and mailing list manager built in Go with a Vue.js frontend. It is the tool used by Zerodha to send millions of emails per campaign on modest hardware. Its only dependency is a PostgreSQL database — no Redis, no separate worker process, no external queue.
Key features:
- High-volume campaigns — multi-threaded, multi-SMTP queues with throughput and sliding-window rate limiting
- Subscriber management — millions of subscribers across single and double opt-in lists, custom JSON attributes, SQL-based segmentation
- Transactional messages — send arbitrary messages via API using pre-defined templates (email, SMS, WhatsApp via Messenger webhooks)
- Visual email builder — drag-and-drop builder, WYSIWYG editor, Markdown, raw HTML, or plain text (added in v5)
- Go templating — 100+ functions available in subject lines and content
- Analytics — campaign performance, bounces, top links, open rates, click-through rates
- REST API — full API coverage for all dashboard features
- OIDC SSO — single sign-on with granular roles and permissions
- Media library — S3-compatible backend for image and file uploads
Why Deploy Listmonk on Railway
One-click deploy gets you a production Listmonk instance without touching Docker config, Postgres setup, or SSL certificates.
- No subscriber limits or per-send pricing — pay only for Railway infrastructure
- Managed Postgres with private networking pre-wired, no connection string juggling
- Auto schema install and migration on every deploy via
--install --idempotent - Railway edge TLS and custom domains out of the box
- Vertical scaling via Railway dashboard — no infra changes needed
- Persistent media uploads via Railway volume mount at
/listmonk/uploads
Common Use Cases
- Creator newsletters — indie developers, bloggers, and content creators replacing Mailchimp or Substack to eliminate per-subscriber costs at 5k+ subscribers
- SaaS transactional email — sending onboarding sequences, password resets, and product notifications via the listmonk REST API without a third-party service
- Internal company communications — teams broadcasting product updates or announcements to employees while keeping subscriber data fully private
- High-volume marketing campaigns — e-commerce and B2B teams sending segmented promotional campaigns to large lists with full bounce and click tracking
Dependencies for Listmonk
- listmonk —
listmonk/listmonk:latest(Docker Hub · GitHub) - PostgreSQL — Railway managed Postgres (≥ v9.4 required; Railway provides v15+)
Environment Variables Reference
| Variable | Description | Required |
|---|---|---|
LISTMONK_ADMIN_USER | Initial super admin username (first deploy only) | Yes |
LISTMONK_ADMIN_PASSWORD | Initial super admin password (first deploy only) | Yes |
LISTMONK_app__root_url | Full public URL used in all email links — no trailing slash | Yes |
LISTMONK_app__address | App listen address inside container — keep as 0.0.0.0:9000 | Yes |
LISTMONK_db__ssl_mode | Postgres SSL mode — use require for Railway managed Postgres | Yes |
PORT | Port Railway routes public traffic to — must match app listen port | Yes |
LISTMONK_db__max_open | Max open DB connections (default: 25) | No |
LISTMONK_db__max_lifetime | Max DB connection lifetime (default: 300s) | No |
Deployment Dependencies
- Database: PostgreSQL ≥ 9.4
- Docker image:
listmonk/listmonk:latest
Minimum Hardware Requirements for listmonk
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 0.5 vCPU | 1 vCPU |
| RAM (app only) | 128 MB | 512 MB |
| RAM (app + Postgres) | 512 MB total | 1 GB+ |
| Storage | 1 GB | 5 GB+ (for media uploads) |
| PostgreSQL version | v9.4+ | v14+ |
On Railway, the default Hobby plan resources comfortably run listmonk for small to medium lists. Scale up via the Railway dashboard as your subscriber count grows.
Self-Hosting listmonk
Docker (quickest path):
docker run -d \
-p 9000:9000 \
-e LISTMONK_app__address="0.0.0.0:9000" \
-e LISTMONK_db__host="your-postgres-host" \
-e LISTMONK_db__port="5432" \
-e LISTMONK_db__user="listmonk" \
-e LISTMONK_db__password="yourpassword" \
-e LISTMONK_db__database="listmonk" \
-e LISTMONK_db__ssl_mode="disable" \
listmonk/listmonk:latest \
sh -c "./listmonk --install --idempotent --yes --config '' && ./listmonk --config ''"
After startup, set Root URL in Settings → General to your public domain before going live.
Is listmonk Free?
listmonk is 100% free and open source, licensed under AGPLv3 — no tiers, no subscriber limits, no paid features. On Railway, your only cost is infrastructure: the listmonk service and managed Postgres billed at standard Railway resource rates. There is no listmonk cloud-hosted version or commercial offering from the maintainers. Compare this to Mailchimp at $78/month for 5,000 subscribers, or Brevo's paid tiers above send limits — listmonk eliminates both entirely.
listmonk vs Mailchimp vs Sendy
| Feature | listmonk | Mailchimp | Sendy |
|---|---|---|---|
| Open source | ✅ AGPLv3 | ❌ | ❌ |
| Self-hostable | ✅ | ❌ | ✅ |
| Pricing | Free (infra only) | From $20/mo | $69 one-time + SES costs |
| Subscriber limits | None | Plan-based | None |
| Transactional email API | ✅ | ✅ (paid tiers) | ❌ |
| Visual email builder | ✅ (v5+) | ✅ | Limited |
| SQL-based segmentation | ✅ | ❌ | ❌ |
| Marketing automation | ❌ | ✅ | Limited |
| Full data ownership | ✅ | ❌ | Partial |
listmonk wins on cost and data ownership at any list size. The main gap versus Mailchimp is visual automation workflows — listmonk has none. If automation is a hard requirement, consider Mautic instead.
Migrating to listmonk
Most developers arrive from Mailchimp, Substack, or Buttondown. listmonk supports CSV subscriber import natively under Subscribers → Import. Export your list from your current provider as a CSV with at minimum email and name columns. Subscribers can be imported without triggering a new opt-in email by setting their status to enabled at import time — existing consent is preserved.
FAQ
What is listmonk? listmonk is a self-hosted, open source newsletter and mailing list manager built in Go. It handles subscriber management, campaign creation and delivery, transactional messages, and analytics — packaged as a single binary with PostgreSQL as its only dependency.
Why is Postgres required? listmonk stores all subscribers, lists, campaigns, templates, and analytics in PostgreSQL. It has no embedded database and no support for SQLite or MySQL — Postgres is the only supported data store, and it must be v9.4 or higher.
Can I use listmonk in production for a large list? Yes. listmonk is used in production at Zerodha (a major Indian fintech) to send millions of emails per campaign. Its Go concurrency model and multi-threaded SMTP queue handle high volumes on minimal hardware — 57 MB peak RAM for a 7M-email campaign.
Does Railway block SMTP for listmonk? Railway blocks outbound SMTP ports (25, 465, 587) on the Hobby plan. listmonk itself has no such restriction, but you need a Railway Pro plan to send emails via external SMTP providers. This is a Railway infrastructure restriction, not a listmonk limitation.
Can I send transactional emails, not just campaigns? Yes. listmonk has a full transactional email API — send arbitrary messages to individual addresses using pre-defined templates via a simple HTTP POST. It also supports non-email messengers (SMS, WhatsApp) via configurable Messenger webhook interfaces.
How do I upgrade listmonk on Railway?
Pull the latest image by triggering a redeploy in Railway. The startup command includes ./listmonk --upgrade --yes which automatically runs any pending DB migrations on boot — upgrades are idempotent and safe to run on every restart.
Template Content
Listmonk
listmonk/listmonk:latestLISTMONK_ADMIN_USER
Admin dashboard login username
LISTMONK_ADMIN_PASSWORD
Admin dashboard login password
