5fb7c6cfb0
- On boot, the app now checks if the DB version matches its expected version and refuses to start if there are pending migrations to be run. - The new `--upgrade` flag runs data migrations from the last recorded migration (in the settings table) to the latest one in the binary. - Migrations are DB/arbitrary logic functions in .go files in internal/migrations. - All migration functions are idempotent. |
||
---|---|---|
frontend | ||
internal | ||
models | ||
static | ||
.dockerignore | ||
.gitattributes | ||
.gitignore | ||
.goreleaser.yml | ||
Dockerfile | ||
INSTALL.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
TODO.md | ||
admin.go | ||
campaigns.go | ||
config-demo.toml | ||
config.toml.sample | ||
docker-compose.yml | ||
go.mod | ||
go.sum | ||
handlers.go | ||
import.go | ||
init.go | ||
install.go | ||
lists.go | ||
main.go | ||
manager_db.go | ||
media.go | ||
notifications.go | ||
public.go | ||
queries.go | ||
queries.sql | ||
schema.sql | ||
settings.go | ||
stats.sql | ||
subscribers.go | ||
templates.go | ||
utils.go |
README.md
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.
Installation and use
- Download the latest release for your platform and extract the listmonk binary. For example:
tar -C $HOME/listmonk -xzf listmonk_$VERSION_$OS_$ARCH.tar.gz
- Navigate to the directory containing the binary (
cd $HOME/listmonk
) and run./listmonk --new-config
to generate a sampleconfig.toml
and add the DB configuration. ./listmonk --install
to setup the DB.- Run
./listmonk
and visithttp://localhost:9000
. - Visit the
Settings
page to configure your instance. - 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.
Configuration and customization
See the configuration Wiki page.
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 (also see configuring with environment variables). Please visit INSTALL.md for detailed instructions on how to setup Listmonk with Docker.
Alternatively, to run a demo of listmonk, you can quickly spin up a local setup with:
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.
Other deployments
Heroku
Using the Nginx buildpack can be used to deploy listmonk on Heroku and use Nginx as a proxy to setup basicauth. This one-click Heroku deploy button provides an automated default deployment.
Please note that configuration options must be set using environment configruation variables.
Help and docs
Help and documentation (work in progress).
Current features
- Admin dashboard
- Public, private, single and double optin lists (with optin campaigns)
- Fast bulk subscriber import
- Custom subscriber attributes
- Subscriber querying and segmentation with ad-hoc SQL expressions
- Subscriber data wipe / export privacy features
- Rich programmable Go HTML templates and WYSIWYG editor
- Media gallery (disk and S3 storage)
- 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
- 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.