listmonk is a self-hosted newsletter and mailing list manager positioned as an open source alternative to Mailchimp and Brevo. It's written in Go and compiles down to a single binary backed by a PostgreSQL database, aimed at teams that want to run their own campaign infrastructure instead of paying per-subscriber SaaS fees. The project is developed by Kailash Nadh (knadh) and the team at Zerodha, one of India's largest stock brokerages.
--install and --upgrade commands are safe to run multiple times when setting up or updating the Postgres schema.listmonk fits teams sending recurring newsletters or product announcements to a subscriber list who want to avoid per-contact SaaS pricing and keep subscriber data on their own infrastructure. Because it's a single binary with only a Postgres dependency, it's straightforward to run on a small VPS, and it scales to the kind of high-volume sending a large organization like Zerodha relies on for its own communications. It also suits teams migrating away from Mailchimp or Brevo who want the same core campaign and subscriber management workflows without ongoing per-contact billing.
Two installation paths are documented: pulling the docker-compose.yml and running docker compose up -d for a containerized setup with Postgres included, visiting http://localhost:9000 afterward; or downloading the standalone binary from GitHub releases, generating a config with --new-config, editing it, and running --install to set up the database schema before starting the server. A live demo is available at demo.listmonk.app for evaluating the dashboard before installing.
The backend is a single Go binary with no runtime dependency beyond PostgreSQL, and the frontend is a Vue application using the Buefy component library, compiled and embedded into that same binary at build time. Contributing follows a documented developer setup guide covering how to run the Go backend and Vue frontend separately during development, since listmonk is licensed as free and open source software under AGPLv3. Existing installs can be upgraded in place with the same --upgrade flag used during setup, without needing to export and re-import subscriber data, and running it repeatedly against an already-current database is safe and has no side effects.