listmonk owns the campaign layer, not mail delivery
listmonk manages subscribers, lists, campaigns, templates, transactional messages, and reporting. It does not replace the server or provider that accepts and delivers outgoing mail. Operators connect one or more SMTP services, then use listmonk to decide who receives what, render the message, queue sends, and record campaign results. That boundary is useful because it keeps subscriber data and workflow under your control without asking a small Go application to become a global mail network.
The project supports one-way lists with single or double opt-in, SQL-expression segmentation, campaign analytics, bounce views, and top-link reporting. Templates use Go's templating language with more than 100 functions, while editors cover visual layouts, WYSIWYG, Markdown, HTML, and plain text. GitHub reported 23,130 stars and 110 issues and pull requests combined. This is a broad, established product rather than a basic bulk-send script.
One binary still depends on PostgreSQL and SMTP
The application is distributed as a single binary, but a useful installation is at least 3 systems: listmonk, PostgreSQL, and an SMTP or messenger provider. The official binary path generates config.toml, installs database tables, and opens the web interface on port 9000. Docker Compose packages the first 2 pieces together. Neither route configures DNS authentication, warms a sending domain, negotiates provider limits, or creates a backup policy.
PostgreSQL 12 or newer is required. Configuration can live in a file or LISTMONK_* environment variables, and the first administrator can be created interactively or supplied during installation. That is a clean setup for an operator who already knows containers and databases. A marketer expecting a sign-up page and immediate delivery will discover that self-hosting moves infrastructure decisions onto the team, even when the application command itself takes minutes.
Segmentation is powerful because it exposes SQL
Subscriber attributes can be queried with SQL expressions, which allows precise segments without waiting for listmonk to add a visual rule for every field. A team can target customers by custom JSON attributes, list membership, or stored profile data. The same power raises the cost of mistakes. A broad condition can select too many recipients, and a malformed one can block a campaign. Important segments deserve a preview and peer review before a large send.
The queue supports multiple SMTP connections, throughput controls, and sliding-window rate limits. Recent issue activity includes a request for per-SMTP throttling rather than global settings, which shows a current boundary for operators mixing providers with different limits. The latest release was v6.2.0, published on 2026-06-26. Read upgrade notes before changing versions because the database is the durable center of the system.
Transactional messages broaden the use case
An API can send arbitrary transactional messages to subscribers through predefined templates. Messenger HTTP webhooks extend delivery beyond email to SMS, WhatsApp, push notifications, or another medium implemented by the operator. Granular API tokens and role-based access make this more credible as an internal messaging service than a dashboard-only newsletter app. S3-compatible storage can hold media outside the local filesystem.
That breadth should not collapse all company messaging into one unexamined service. Password resets and receipts have different urgency, retention, and failure rules from weekly newsletters. If listmonk handles both, use separate templates, credentials, rate expectations, and monitoring. A stalled campaign should not delay account mail. The repository's 110-item combined issue and PR count also includes active discussion around analytics consistency and multi-SMTP behavior, both relevant to operational trust.
What happened when we ran it
Our sandbox installed 85 Go packages in 39 seconds, then built listmonk successfully in 73 seconds. The run used 3 CPUs and 8 GB of RAM in a golang:1.24-bookworm container. The checkout at commit 670c017 held 508 files, about 44,814 lines of source, and occupied 9.1 MB. These figures cover a source build, not database setup or sending a campaign.
go test also exited successfully after 31 seconds, but it reported 0 passed and 0 failed out of 0. The repository has no top-level tests directory. That outcome is not evidence that campaigns, migrations, bounces, or templates passed a test suite in our environment. It only says the test command returned cleanly without discovering tests under the harness's reporting method. Six CI workflow files provide upstream automation signals, but they do not change our measured 0-test result.
Current activity supports a serious deployment
The last push was 2026-08-25, and v6.2.0 had shipped about 2 months earlier. Recently updated issues covered analytics granularity, SMTP throttling, list changes affecting recipient counts, settings failures with null JSON values, and an idempotent-install edge case. That is healthy product maintenance around real operational paths, not a repository kept warm by automated dependency updates alone.
Documentation is spread sensibly between a short README and the official site. Installation, configuration, templating, developer setup, and upgrade steps have dedicated pages. The homepage also describes OIDC single sign-on, permissions, API tokens, media storage, and messenger interfaces. AGPL-3.0 is the final deployment check: internal use is straightforward, while organizations modifying and serving the software over a network should have counsel review their obligations.
Choose it when data ownership pays for operations
listmonk is a strong fit for a technical organization that already has PostgreSQL, an SMTP relationship, and someone responsible for backups and delivery health. It consolidates subscriber management and campaigns without charging by contact, and its API keeps it useful beyond a marketing dashboard. The compact binary is a genuine operational advantage once the surrounding services exist.
A small publication with no infrastructure owner should price the human work before celebrating zero software fees. Managed services absorb abuse handling, provider changes, compliance tooling, and support. listmonk gives you control over 1 subscriber database and many delivery paths, but that control is an ongoing job. Adopt it when ownership is a requirement, not merely because Docker Compose starts successfully.

