
23.3k stars · AGPL-3.0 · v6.2.0 (2026-06-26) · Track this in Rising ↗
Single-binary self-hosted newsletter manager on Postgres. The email list is the only audience he actually owns.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 24 Oct 2026, 3 days before this check.
Latest release v7.0.0-beta.1 on 20 Oct 2026.
Public since June 2019, a little over 7 years.
23,984 stars and 2,718 forks.
245 commits and 70 new issues in the last 90 days.
291 contributors. 37 pull requests merged in 90 days.
A security policy says how to report a problem. 6 published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 26 Oct 2026 from the repository on GitHub. Covered in Edition 2.
▶Repo detailsthe review · specs · pros & cons · install
What it does
It stores subscribers, groups them into lists, and keeps templates and campaigns. A campaign is one letter sent to a chosen group of people. It records what happened to each send, including bounces, which are the replies a mail server gives when an address does not work. Subscribers can be selected with a database query, so a group such as "everybody who opened the last letter and never signed up" is a query rather than a manual list. The whole application ships as one compiled program with the admin screen built in, and Postgres 12 or later is the only requirement its installation page names. The README publishes no performance figures at all, despite the words "high performance" in its own description, and makes no statement about what the software will not handle.
Why it matters
Who it suits. Anyone who wants the list of people they write to held somewhere they control, rather than inside a service that can change its terms. The install is unusually small for what it covers, which makes it a reasonable first self-installed service for somebody who has never run one. Skip it if the sending volume is a handful of letters a year, because a hosted service will cost less trouble, and skip it if nobody is willing to look after a database.
Verdict. Worth an afternoon. Code landed on it on the morning of this refresh, and it has been going since June 2019, so this is a settled project rather than a new one. Two things to decide before installing. The licence is AGPL-3.0, read from the file: using it privately costs nothing, but offering a modified copy to other people as a service brings an obligation to publish the modifications. And the project documents no memory or disk figures anywhere, so the machine has to be sized by trial. Of the alternatives below, mautic/mautic is the much larger system if marketing automation, and not just letters, is the goal.
Summary (Key Points)from the README
Key features
- Self-hosted manager: Runs as a standalone newsletter and mailing list manager that you host yourself.
- Single binary: Ships as one binary, so the core app needs no separate runtime installation.
- PostgreSQL data store: Keeps all data in a PostgreSQL database.
- Docker image: Provides an official image, listmonk/listmonk:latest, on DockerHub, with a sample docker-compose.yml.
- Config generation: The `--new-config` flag creates a config.toml file for you to edit.
- Guided database setup: The `--install` flag sets up the Postgres database, and `--upgrade` migrates an existing one.
- Idempotent upgrades: Running `--upgrade` multiple times has no side effects, according to the README.
- Open source stack: The backend is written in Go and the frontend uses Vue with Buefy.
- Live demo: A live demo is available for trying the interface before installing.
Ways to install
| Platform or method | What it needs | Effort |
|---|---|---|
| Docker | Docker, the listmonk/listmonk image from DockerHub, and the sample docker-compose.yml | Lower: pull the image and use the compose file |
| Binary | A release download, a PostgreSQL database, and editing config.toml before running `--install` | Higher: generate config, edit it, set up the database, then run |
Important
- Database required: A PostgreSQL database is needed, since it is the data store.
- Config edit step: For the binary route, you must edit config.toml before the database setup and first run.
- Incomplete install text: The README's install instructions are cut off in places, so check the linked installation docs for the full steps.
- AGPLv3 license: The project is licensed under AGPLv3, which has copyleft terms you should review if you plan to modify or redistribute it.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
- One compiled program plus Postgres, with the admin screen included, so there is no second runtime to patch.
- Subscriber groups are database queries, which makes an awkward audience one line instead of an export.
- Steady for over seven years, with code landing on 12 October 2026 and release v6.2.0 on 26 June 2026.
- AGPL-3.0, read from the file, which is a real decision for anyone offering a changed copy as a service.
- No published figures of any kind: no memory, no disk, no sending rate, and no statement of limits in the README.
- The admin screen is functional rather than friendly, and there is no drag-and-drop editor for designing a letter.
# Docker curl -LO https://github.com/knadh/listmonk/raw/master/docker-compose.yml docker compose up -d # Or the compiled program against an existing Postgres ./listmonk --new-config # writes config.toml, then edit it ./listmonk --install # sets up the database ./listmonk # run it

