.devcontainer | ||
.github | ||
cmd | ||
dev | ||
docs | ||
frontend | ||
i18n | ||
internal | ||
models | ||
scripts | ||
static | ||
.dockerignore | ||
.gitattributes | ||
.gitignore | ||
.goreleaser.yml | ||
config.toml.sample | ||
CONTRIBUTING.md | ||
docker-compose.yml | ||
docker-entrypoint.sh | ||
Dockerfile | ||
go.mod | ||
go.sum | ||
LICENSE | ||
listmonk-simple.service | ||
listmonk@.service | ||
Makefile | ||
permissions.json | ||
project.inlang.json | ||
queries.sql | ||
README.md | ||
schema.sql | ||
VERSION |
listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a PostgreSQL database as its data store.
Visit listmonk.app for more info. Check out the live demo.
Installation
Docker
The latest image is available on DockerHub at listmonk/listmonk:latest
.
Download and use the sample docker-compose.yml.
# Download the compose file to the current directory.
curl -LO https://github.com/knadh/listmonk/raw/master/docker-compose.yml
# Run the services in the background.
docker compose up -d
Visit http://localhost:9000
Binary
- Download the latest release and extract the listmonk binary.
./listmonk --new-config
to generate config.toml. Edit it../listmonk --install
to setup the Postgres DB (or--upgrade
to upgrade an existing DB. Upgrades are idempotent and running them multiple times have no side effects).- Run
./listmonk
and visithttp://localhost:9000
External Configuration
listmonk supports declarative configuration via config.toml
and environment variables for all settings, including those typically configured through the admin UI. This enables consistent deployments across environments.
Configuration Precedence
- config.toml - Highest priority
- Environment variables - Medium priority
- Database settings - Lowest priority (UI-configured)
Usage
config.toml example:
[app]
root_url = "https://listmonk.mysite.com"
site_name = "My Newsletter"
from_email = "admin@mysite.com"
[privacy]
individual_tracking = false
allow_blocklist = false
[performance]
concurrency = 20
message_rate = 300
Environment variables:
export LISTMONK_app__root_url="https://listmonk.mysite.com"
export LISTMONK_privacy__individual_tracking=false
Behavior
- Settings configured externally are disabled in the admin UI
- External settings show "This setting is configured externally" message
- API prevents overwriting externally configured values
- Use
GET /api/settings/state
to view external configuration status
Developers
listmonk is free and open source software licensed under AGPLv3. If you are interested in contributing, refer to the developer setup. The backend is written in Go and the frontend is Vue with Buefy for UI.
License
listmonk is licensed under the AGPL v3 license.