listmonk

listmonk

Mailing lists you host, delivered through your SMTP relay

listmonk is a self-hosted newsletter and mailing list manager. The Go server and the admin UI ship as one binary, and everything is stored in PostgreSQL 12 or later. The dashboard covers subscribers, single and double opt-in lists, campaigns, templates, and open and click stats. The /api/tx endpoint sends an application's transactional email.

listmonk does not deliver mail itself. It hands every message to an SMTP server set in its settings: a provider such as Amazon SES or Postmark, or one you run. BillionMail takes the opposite route and installs Postfix, Dovecot and Rspamd alongside its UI. Keila relies on a relay too, over SMTP or through the SES, SendGrid, Mailgun and Postmark APIs.

The comparison of self-hosted newsletter software sets out what each tool handles and what it leaves to the SMTP relay.

SQL segments and sending rates matched to relay quotas

  • Two things to run: the binary and PostgreSQL. --install creates the tables, --upgrade runs the migrations, and the repository's docker-compose.yml runs both on every start.
  • Several SMTP servers at once: since v6.2.0, listmonk picks the server from the sender address or domain, and rotates between servers that list the same domain.
  • Throughput set to fit the relay's quotas: by default, 10 workers each send up to 10 messages a second, so 100 at most. An optional sliding window caps the volume over a period (10,000 messages an hour out of the box). A campaign pauses after 1,000 send errors.
  • SQL segmentation: a PostgreSQL expression filters subscribers on their fields and on free-form JSON attributes, for instance subscribers.attribs->>'city' = 'Austin'.
  • Go templates: Go template syntax plus over 100 Sprig functions, in the body and in the subject line. Content is written in a block-based visual builder, rich text, Markdown or raw HTML.

Domain authentication and bounce handling need outside setup

Deliverability is handled outside listmonk. Neither its settings nor its docs mention SPF, DKIM or DMARC: domain authentication lives with the relay and in DNS. The docs also warn that some hosts block outbound ports 25 and 465, Hetzner among them, and that you may have to ask them to lift the block.

Bounces need a POP3 mailbox or a webhook. Bounce processing is off after install. Turning it on takes a POP3 mailbox behind the sender address or a dedicated Return-Path, or webhooks from Amazon SES, Azure Communication Services, SendGrid, Postmark, Forward Email or Lettermint. Those webhooks hit public routes, as do the signup pages, tracked links and the open pixel, so the instance has to be reachable from the internet.

Light when sending, slow in the admin at millions of subscribers. The project's site cites a production campaign of over 7 million emails sent on a fraction of one CPU core, with RAM peaking at 57 MB. At that scale, the docs warn, pages that count subscribers and aggregate stats can take tens of seconds to load. One setting caches those numbers and refreshes them nightly by default. A weekly VACUUM ANALYZE is recommended, at the cost of a few seconds during which the database blocks.

Multi-user setups call for careful permissions. v6.0.0, v6.1.0 and v6.2.0 each fix flaws that only affect instances with several users. The project's security page lists as accepted risks <script> tags in campaigns, Turing-complete templates and the subscribers:sql_query permission, which reads every list.

One main maintainer, a minor release per quarter in 2026. The repository dates from June 2019 and v1.0.0 from May 2021. This year brought v6.0.0 (January 2), v6.1.0 (March 29) and v6.2.0 (June 26), still the latest stable release on October 7. The repository owner, knadh, has 1,422 commits; the next human contributor has 32. Release notes ask for a PostgreSQL backup before every upgrade, and going back to an older version means restoring the pre-upgrade database.

AGPL-3.0, with no paid tier and no hosting from the project. The docs point to third-party hosts such as PikaPods, Elestio and Cloudron, whereas Keila sells its own hosted version. Anyone who modifies listmonk and runs it as a network service has to offer the modified source to the service's users.