selfhostedworld.com logoselfhostedworld.com

Try describing what you need:

Listmonk logo

Listmonk

★ 23.8k

A self-hosted alternative to Mailchimp, Substack

GNU Affero General Public License v3.0Open Source — No Paywall2 Containers — 2 containers — light hosting footprintDocker · Compose · BinaryNeeds Postgres58+ active committers (12mo)

About

listmonk is a self-hosted newsletter and mailing list manager intended for users who want to run email list infrastructure on their own servers. It is presented as a fast, feature-rich application...

Community Ratings

No ratings yet

Features

  • newsletter management
  • mailing list management
  • single-binary deployment
  • Docker deployment
  • database setup and upgrade
  • live demo

Details

Last Updated
Oct 13, 2026
Created
Jun 26, 2019
Install Methods
dockerdocker-composebinary
Requirements
PostgreSQL database
Backup & Export
database-dump
Runtime / Stack
GoDocker
Privacy & Independence
No Cloud RequiredOffline Capable
User Model
Multi-User
Deployment

Deployment: Docker Compose ✓2 Containers — light hosting footprintRuns as 2 containers

Run Listmonk with Docker Compose

Compose file from the Listmonk project repository.

2 services · database: postgres · infra: postgres

no resource limits declared

needs persistent storage (2 volumes)

docker-compose.yml · @ 03fd8ce · scanned Jun 4, 2026

# All LISTMONK_* env variables also support the LISTMONK_*_FILE pattern for loading secrets from files with Docker secrets and Podman
# eg: LISTMONK_ADMIN_USER -> LISTMONK_ADMIN_USER_FILE=/path/to/file_with_value

x-db-credentials: &db-credentials                             # Use the default POSTGRES_ credentials if they're available or simply default to "listmonk"
  POSTGRES_USER: &db-user listmonk                            # for database user, password, and database name
  POSTGRES_PASSWORD: &db-password listmonk
  POSTGRES_DB: &db-name listmonk

services:
  # listmonk app
  app:
    image: listmonk/listmonk:latest
    container_name: listmonk_app
    restart: unless-stopped
    ports:
      - "9000:9000"                                           # To change the externally exposed port, change to: $custom_port:9000
    networks:
      - listmonk
    hostname: listmonk.example.com                            # Recommend using FQDN for hostname
    depends_on:
      - db
    command: [sh, -c, "./listmonk --install --idempotent --yes --config '' && ./listmonk --upgrade --yes --config '' && ./listmonk --config ''"]
                                                              # --config (file) param is set to empty so that listmonk only uses the env vars (below) for config.
                                                              # --install --idempotent ensures that DB installation happens only once on an empty DB, on the first ever start.
                                                              # --upgrade automatically runs any DB migrations when a new image is pulled.

    environment:                                              # The same params as in config.toml are passed as env vars here.
      LISTMONK_app__address: 0.0.0.0:9000
      LISTMONK_db__user: *db-user
      LISTMONK_db__password: *db-password
      LISTMONK_db__database: *db-name
      LISTMONK_db__host: db
      LISTMONK_db__port: 5432
      LISTMONK_db__ssl_mode: disable
      LISTMONK_db__max_open: 25
      LISTMONK_db__max_idle: 25
      LISTMONK_db__max_lifetime: 300s
      TZ: Etc/UTC
      LISTMONK_ADMIN_USER: ${LISTMONK_ADMIN_USER:-}           # If these (optional) are set during the first `docker compose up`, then the Super Admin user is automatically created.
      LISTMONK_ADMIN_PASSWORD: ${LISTMONK_ADMIN_PASSWORD:-}   # Otherwise, the user can be setup on the web app after the first visit to http://localhost:9000
    volumes:
      - ./uploads:/listmonk/uploads:rw                        # Mount an uploads directory on the host to /listmonk/uploads inside the container.
                                                              # To use this, change directory path in Admin -> Settings -> Media to /listmonk/uploads

  # Postgres database
  db:
    image: postgres:17-alpine
    container_name: listmonk_db
    restart: unless-stopped
    ports:
      - "127.0.0.1:5432:5432"                                 # Only bind on the local interface. To connect to Postgres externally, change this to 0.0.0.0
    networks:
      - listmonk
    environment:
      <<: *db-credentials
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U listmonk"]
      interval: 10s
      timeout: 5s
      retries: 6
    volumes:
      - type: volume
        source: listmonk-data
        target: /var/lib/postgresql/data

networks:
  listmonk:

volumes:
  listmonk-data:

This file may be out of date. Check the Listmonk documentation for current setup steps.

Track your self-hosted stack

Bookmark software to try, rate tools you've used, and keep your collection in one place.

Metadata extracted from README on Mar 25, 2026

Related Software

Mautic logo

Mautic

10.8k
Open source marketing automation software for creating and managing integrated marketing campaigns.
Mailing ListsSelf Hosting SolutionsAutomation Tools+3
Details
phpList logo

phpList

877
phpList is an open source email marketing manager for creating, sending, integrating, and analysing email campaigns and newsletters.
Mailing ListsSelf Hosting SolutionsAnalytics Tools+3
6 ContainersFully FOSS
Details
Plunk logo

Plunk

5.5k
Plunk is an open-source email platform for sending transactional emails, campaigns, and automations from self-hosted applications.
Email SolutionsMailing ListsAutomation Tools+2
Cloud Required
Details
Django-CRM logo

Django-CRM

637
A free, self-hosted CRM built with Python and Django for managing leads, deals, contacts, tasks, email campaigns, and analytics.
CRM SystemsTask ManagementAnalytics Tools+4
Details
Dittofeed logo

Dittofeed

3.0k
Dittofeed is an open-source omni-channel customer engagement platform for sending broadcasts and automated user journeys across channels like email, SMS, WhatsApp, Slack, and mobile push.
Automation ToolsMailing ListsCRM Systems+3
Open Core
Details
Mataroa logo

Mataroa

370
A Django-based blogging platform with subdomain-based user blogs, publishing tools, and deployment support.
Blogging PlatformsPermissive LicenseCMS Platforms+4
Details
Sendy logo

Sendy

Self-hosted email newsletter application that lets you send bulk emails via Amazon Simple Email Service (SES) or other SMTP services.
Mailing ListsSelf Hosting SolutionsAnalytics Tools
Details
BillionMail logo

BillionMail

15.9k
BillionMail is an open-source mail server and email marketing platform for sending newsletters, promotional emails, and transactional messages.
Mailing ListsEmail SolutionsMail Transfer Agents+2
Details
Keila logo

Keila

2.2k
Keila is an open source newsletter tool for sending campaigns and creating sign-up forms.
Mailing ListsSelf Hosting SolutionsCopyleft License
Details
Sympa logo

Sympa

318
Sympa is an electronic mailing list manager that automates subscription, moderation, archive management, and message delivery for mailing lists.
Mailing ListsSelf Hosting SolutionsMail Transfer Agents+2
Details
ACP Admin logo

ACP Admin

81
A web application for managing CSA, ACP, and Solawi community agriculture organizations.
Agriculture ManagementPermissive LicenseE-Commerce Solutions+4
Details
ShipShipShip logo

ShipShipShip

301
A self-hostable changelog and roadmap platform with emoji reactions, themes, newsletters, and an admin dashboard.
Dev Project ManagementPermissive LicenseStatus Pages+2
Single Container
Details