Skip to content
High performance, self-hosted newsletter and mailing list manager with a modern dashboard. Go + React.
Branch: master
Clone or download
Latest commit b63b31e Jul 21, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
email-templates Fix default template rendering in Gmail with CSS inlining Jul 21, 2019
frontend Add data privacy export / wipe features (aimed at GDPR compliance). Jul 21, 2019
manager Refactor Messenger/Emailer to accept attachments Jul 18, 2019
messenger Add helper to make mail attachment headers Jul 21, 2019
models Add pagination to the lists page May 14, 2019
public Refactor "unsubscribe from all" (self-blacklist) behaviour. Jul 21, 2019
subimporter Update list date on import before notif and run notif as a goroutine May 14, 2019
.gitattributes Add .gitattributes for github-linguist Jul 15, 2019
.gitignore fix: Path for windows build in goreleaser Jul 12, 2019
.goreleaser.yml fix: Path for windows build in goreleaser Jul 12, 2019
Dockerfile feat: Add docker demo setup Jul 12, 2019
INSTALL.md fix: docker-compose command Jul 20, 2019
LICENSE Refactor and add new build routines Jul 9, 2019
Makefile Refactor and add new build routines Jul 9, 2019
README.md Merge branch 'privacy' Jul 21, 2019
TODO.md Add TODO Apr 7, 2019
admin.go Rename 'runner.Runner' to 'manager.Manager' Dec 19, 2018
campaigns.go Refactor Messenger/Emailer to accept attachments Jul 18, 2019
config.toml.sample Refactor "unsubscribe from all" (self-blacklist) behaviour. Jul 21, 2019
docker-compose.yml feat: Add docker demo setup Jul 12, 2019
go.mod Add data privacy export / wipe features (aimed at GDPR compliance). Jul 21, 2019
go.sum Add data privacy export / wipe features (aimed at GDPR compliance). Jul 21, 2019
handlers.go Check subscriber existence by UUID on public pages Jul 21, 2019
import.go Refactor and fix importer state bugs Apr 3, 2019
install.go Fix `from` e-mail ID in dummy campaign on install Jul 16, 2019
lists.go Add pagination to the lists page May 14, 2019
main.go Refactor "unsubscribe from all" (self-blacklist) behaviour. Jul 21, 2019
manager_db.go Refactor campaigns query into two: 'query' and 'get' Mar 30, 2019
media.go Fresh start Oct 25, 2018
notifications.go Add data privacy export / wipe features (aimed at GDPR compliance). Jul 21, 2019
public.go Fix error message Jul 21, 2019
queries.go Remove orphan func Jul 21, 2019
queries.sql Remove orphan func Jul 21, 2019
schema.sql Remove stub user features and handlers. Jun 26, 2019
stats.sql Add support for campaign view tracking with {{ TrackView }} pixel tag Nov 2, 2018
subscribers.go Add data privacy export / wipe features (aimed at GDPR compliance). Jul 21, 2019
templates.go Remove redundant error wrapper Dec 26, 2018
utils.go Refactor "error" view to a generic "message" Jul 18, 2019

README.md

listmonk

listmonk is alpha software and may change and break. Use with caution. That said, it has been in active use at zerodha.com for several months where it has processed hundreds of campaigns and tens of millions of e-mails.

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.

listmonk-splash

Installation and use

  • Download the latest release and extract the listmonk binary somewhere.
  • Run ./listmonk --new-config to generate a sample config.toml and add your configuration (SMTP and Postgres DB credentials primarily).
  • ./listmonk --install to setup the DB.
  • Run ./listmonk and visit http://localhost:9000.
  • Since there is no user auth yet, it's best to put listmonk behind a proxy like Nginx and setup basicauth on all endpoints except for the few endpoints that need to be public. Here is a sample nginx config for production use.

Running on Docker

You can pull the official Docker Image from Docker Hub.

You can checkout the docker-compose.yml to get an idea of how to run listmonk with PostgreSQL together using Docker.

  • docker-compose up -d app db to run all the services together.
  • docker-compose run --rm app ./listmonk --install to setup the DB.
  • Visit http://localhost:9000.

Alternatively, to run a demo of listmonk, you can quickly spin up a container docker-compose up -d demo-db demo-app. NOTE: This doesn't persist Postgres data after you stop and remove the container, this setup is intended only for demo. DO NOT use the demo setup in production.

Help and docs

Help and documentation (work in progress).

Current features

  • Admin dashboard
  • Multiple public and private lists
  • Fast bulk subscriber import
  • Custom subscriber attributes
  • Subscriber querying and segmentation with ad-hoc SQL
  • Rich Go templates and WYSIWYG editor
  • Media gallery
  • Multi-threaded multi-SMTP e-mail queues for fast campaign delivery
  • HTTP/JSON APIs for everything
  • Clicks and view tracking
  • and more ...

Todo

  • DB migrations
  • Bounce tracking
  • User auth, management, permissions
  • Ability to write raw campaign logs to a target
  • Analytics views and reports
  • Make Ant design UI components responsive
  • Better widgets on dashboard
  • Tests!

Developers

listmonk is free, open source software licensed under AGPLv3. There are several essential features such as user auth/management and bounce tracking that are currently missing. Contributions are welcome.

The backend is written in Go and the frontend is in React with Ant Design for UI. See developer setup to get started.

License

listmonk is licensed under the AGPL v3 license.

You can’t perform that action at this time.