listmonk is a standalone high performance, self-hosted newsletter and mailing list manager with a modern dashboard. Single binary app.



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-dashboard Visit



The latest image is available on DockerHub at listmonk/listmonk:latest. Use the sample docker-compose.yml to run listmonk and Postgres DB with docker-compose as follows:


mkdir listmonk-demo
sh -c "$(curl -fsSL"

The demo does not persist Postgres after the containers are removed. DO NOT use this demo setup in production.


Easy Docker install

This setup is recommended if you want to quickly setup listmonk in production.

mkdir listmonk
sh -c "$(curl -fsSL"

The above shell script performs the following actions:

  • Downloads docker-compose.yml and generates a config.toml.
  • Runs a Postgres container and installs the database schema.
  • Runs the listmonk container.

NOTE: It's recommended to examine the contents of the shell script, before running in your environment.

Manual Docker install

The following workflow is recommended to setup listmonk manually using docker-compose. You are encouraged to customise the contents of docker-compose.yml to your needs. The overall setup looks like:

  • docker-compose up db to run the Postgres DB.
  • docker-compose run --rm app ./listmonk --install to setup the DB (or --upgrade to upgrade an existing DB).
  • Copy config.toml.sample to your directory and make the following changes:
    • app.address => (Port forwarding on Docker will work only if the app is advertising on all interfaces.)
    • => listmonk_db (Container Name of the DB container)
  • Run docker-compose up app and visit http://localhost:9000.

More information on docs.


  • Download the latest release and extract the listmonk binary.
  • ./listmonk --new-config to generate config.toml. Then, edit the file.
  • ./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 visit http://localhost:9000.




listmonk is a 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.


listmonk is licensed under the AGPL v3 license.

  • Problems running on Docker

    Problems running on Docker


    • listmonk: [eg: v1.0.0]
    • OS: Mac Big Sur 11.04

    Description of the bug and steps to reproduce: I've installed Listmonk on my Mac around two months ago, and after some back and forth, it has worked well. Today I tried to run it again, but a weird thing happened. First, it ran normally, but the DB was a different one, without any history, campaigns, subscribers, nothing. After re-starting, when I launched it via Terminal, the response was an error message:

    [MACHINE NAME] com.docker.docker >> docker compose up
    [+] Running 4/0
     ⠿ Container comdockerdocker_demo-db_1   Running                                                                    0.0s
     ⠿ Container comdockerdocker_demo-app_1  Running                                                                    0.0s
     ⠿ Container comdockerdocker_db_1        Created                                                                    0.0s
     ⠿ Container comdockerdocker_app_1       Created                                                                    0.0s
    Attaching to app_1, db_1, demo-app_1, demo-db_1
    Error response from daemon: driver failed programming external connectivity on endpoint comdockerdocker_db_1 (e2dcf5fd40f60311c43f2f5ca5177bc474eb0b69afd3805e942c5082af0ceb52): Bind for failed: port is already allocated

    When I checked on Docker, I saw that there were duplicated instances of Listmonk and Postgres, which I could not remove anyhow:

    Screenshot 2021-06-10 at 14 50 11

    Could you help me to understand what am I doing wrong? Losing the history of the campaigns would be such a pain.

    @mr-karan , I am adding you here following a conversation with Kailash.

    Thanks in advance

    opened by cgobbet 54
  • Bounce processing

    Bounce processing

    I see a lot of you guys have Listmonk implemented in a production env. I was wondering how you guys process the soft and hard bounces and also the complaints.

    enhancement todo 
    opened by roshanjonah 51
  • Could you provide a step-by-step install guide?

    Could you provide a step-by-step install guide?

    For some reason, I got stuck on how to properly configure config.toml file. It will be so helpful if you can provide a step-by-step guide on how to install Listmonk. Also, there is no demo for a quick look!

    Please help!

    help wanted 
    opened by sals9 47
  • packaging needs

    packaging needs

    Is your feature request related to a problem? Please describe.

    There are a few issues I’ve bumped into while packaging listmonk for debian(-based) systems. I adressed some of those in this PR. Maybe we can use this issue to explore some of the remaining stumbling blocks.

    Describe the solution you'd like

    • The LAST_COMMIT and VERSION make variables are currently hardcoded to use git for determining their respective values. Package builds often use release tarballs which do not contain any git metadata. The easiest solution is to make the caller determine these values by using the ?= instead of the := assignment in Makefile. This is what I do in my deb packaging. The downside is that every packager has to do that manually. A lot of other projects store release metadata in the repository.
    • --new-config should respect the --config option. Pratically speaking: calling listmonk --config /etc/listmonk/mysite.toml --new-config should create the config in /etc/listmonk/mysite.toml instead of storing it as config.toml in the current working directory.
    • I know that #326 and #344 already pointed this out, but I want to emphasize it again: I think it would be nice if update checks could be disabled either via the application configuration file or – even better – during build time. It is very common for packagers to disable these checks. There shouldn’t be a need to even render the update-check switch in the frontend in both of these cases.
    • I’d be nice to have a default systemd unit file as part of the project that can serve as a basis for package maintainers. systemd provides a lot of options that reduce the attack surface of an application and it would be nice if we could document any practical and applicable options right here, so they’re discoverable for everyone.

    As @alerque seems to be packaging listmonk for ArchLinux he can probably weigh in on this discussion as well. Consider it a friendly request for comments :).

    I’d be happy to submit pull requests if we reach consensus on solutions for any of the raised issues. Thank you for your time!



    opened by kmohrf 35
  • How can I validate that SMTP is working correctly ?

    How can I validate that SMTP is working correctly ?

    Hi I am trying listmonk. I see a SMTP connection attempt on my mail server, but nothing after that. How can I debug what's going on on listmonk side, regarding SMTP ? Thank you

    opened by fgadot 33
  • Public Archive of Previous Campaigns

    Public Archive of Previous Campaigns

    As described in #540 it would be great to have a pages for public archives of previous campaigns. #540 was closed when the other part of the feature request was addressed, so I'm opening this issue to keep this part alive :)

    opened by simonwiles 32
  • Work in progress (v0.7.0-alpha)

    Work in progress (v0.7.0-alpha)

    I've been spending time on and off on:

    • A tiny auth lib to add users and auth after not being able to find a simple enough package. AuthBoss is complex and large.
    • A new settings dashboard.
    • Scrapping React + AntDesign UI. This was a hard decision, but React + Ant is a mess. Despite having written the frontend, I've been unable to internalise or intuitively navigate the mess that is logic interspersed JSX of Ant Design components. I'm considering VueJS + Buefy (10x smaller than Ant). At least templates will look like templates. Would rather do this now when it's alpha than be locked-in. I am unable to recollect the exact reasons for having made this choice in the first place.
    opened by knadh 24
  • Add Prometheus metrics

    Add Prometheus metrics

    This pull request implements #627 .

    The goal here is to expose some basic metrics over a Prometheus endpoint.

    ~This is very much a draft PR for now. I would expect this to get rebased into something cleaner before it's taken out of draft state.~ Undrafted, yay! \o/

    opened by avanier 23
  • Basic Questions wrt Listmonk

    Basic Questions wrt Listmonk

    Creating a new issue as was asked for earlier :) I am trying to send out a test mail from campaign screen, it says email sent but does not land in my mail (SES dashboard also says 0 emails sent). SMTP settings are done for the same region the destination email ID belongs to (Mumbai). listmonk dashboard also says 0 msg sent.

    Few call outs: I have only 1 SMTP setting enabled (single port) - Do I need to add SMTP settings for all 3 ports? SES account is in sandbox (allows 200 emails to be sent) - can this be the reason? msg rate x concurrency = email rate of SES

    good first issue 
    opened by jackdanielux 23
  • Return-Path and thus bounce handling not working

    Return-Path and thus bounce handling not working


    • listmonk: 2.2.0
    • OS: Debian 11
    • Installation: Single binary started with custom systemd service

    Some configuration infos: Bounce handling is listmonk is on and listmonk expects bounces in a pop3 mailbox.

    Description of the bug: For all outgoing e-mails sent from listmonk, the "Return-Path" header is always exactly the same as the "From" header. Changing the "Return-Path" via custom headers in the campaign settings does not seem to do anything. Changing other headers such as "Errors-To" works. For us, this means, that currently bounces are not sent back to the correct mailbox. It has to be possible in listmonk to set "Return-Path" to a custom mail address, especially considering that our installation will use many different "From" addresses.

    Steps to reproduce:

    1. Set global SMTP custom headers [{"Return-Path": "[email protected]"}] according to documentation on
    2. Create a campaign.
    3. Set From to [email protected].
    4. Send test mail or start campaign.
    5. Verify headers in our smtp gateway or in Thunderbird on the receiving end.
    6. Header Return-Path is [email protected], which is wrong.
    opened by mzurborg-iquadrat 22
  • POP3 bounce

    POP3 bounce


    • listmonk: [eg: v2.0.0]
    • OS: [Docker]


    I wanted to set up a pop3 account to handle bounces. The account is running on a mail server, but unfortunately listmonk indicates an error in the log : bounce.go:139: error scanning bounce mailbox: unknown response. Neither -ERR, nor +OK

    Any idea what the solution might be? thx for help !

    opened by bohemtucsok 20
  • TrackView is not working

    TrackView is not working

    I am using TrackView for tracking views in emails sent via listmonk, as suggested i used TrackView only once in the template also within two curly braces ( {{ TrackView }} ) but I am testing everything in the development environment. How can I resolve this any kind of help will be appreciated

    opened by themockingjester 0
  • bad character U+003D '=' when submitting text containing @TrackLink from the API

    bad character U+003D '=' when submitting text containing @TrackLink from the API

    • listmonk: v2.3.0
    • OS: Debian

    I have been using python requests to submit campaigns to listmonk's API. Everything has been working fine until I decided to include the @TrackLink shorthand appended to each link href in the content body. The full error I am seeing when attempting to preview or edit a campaign that has been created through the API is: {"message":"Error compiling template: error compiling message: template: content:2: bad character U+003D '='"}

    The error is also showing up in the listmonk logs and the campaign will not send.

    If I open the API generated campaign in listmonk, select "Content", view the HTML source in the editor, click "Format HTML", "Save", then "Save Changes" to the campaign the issue is resolved. The campaign becomes fully functional.

    Attached is the "body" value that is returned by the API when the campaign is created. If I remove "@TrackLink" from the hrefs the error goes away. body.txt

    opened by brett-kimball 1
  • Accepting AWS SNS notifications (Delivery, Send, ...) as Bounce

    Accepting AWS SNS notifications (Delivery, Send, ...) as Bounce


    • listmonk: v2.3.0
    • OS: Docker Image

    Description of the bug and steps to reproduce: I initially setup in AWS SNS to send all even types (Delivery, Send, ...) and I noticed in listmonk Bounces list that emails with delivery status were also marked as bounce. I then changed to only send notification for Bounces.

    In the code I don't see any checks for eventType, I think we should add check in code to make sure the eventType is Bounce (and maybe also Complaint?) In sesMail struct, I see notificationType but not eventType where I noticed the Bounce event type.

    Payload for notificationType = Delivery

      "mail": { ... },
      "delivery": { ... },
      "notificationType": "Delivery"

    Payload for eventType = Bounce

      "mail": { ... },
      "bounce": { ... },
      "eventType": "Bounce"
    opened by hasahmad 1
  • Default

    Default "From" field generates 5.6.7 SMTP bounce on Google Workspace MX servers


    • listmonk: v2.3.0
    • OS: Debian 11u5

    Description of the bug and steps to reproduce: I sent myself an e-mail using the SMTP connection test tool (to a Google Workspace mailbox). I get a 5.6.7 SMTP bounce from the Google Workspace servers.

    So given the nature of the 5.6.7 error, it's most likely related to the quotes between the sender name, like Listmonk does: "Name" <[email protected]>, since I tried exactly the same e-mail from another client (Evolution) that builds the From: field in the following way: Name <[email protected]> (without any quotes around the sender name) and the e-mail gets through without any issue.

    How can I proceed from there? Write a patch?

    Thank you in advance.

    opened by etal37 1
  • v2.3.0(Nov 27, 2022)


    New features

    • Public campaign archive. image
    • Subscriber preferences self-management. image
    • Database maintenance tools. image
    • Public list descriptions.
    • New languages: Vietnamese (@mannm123), Chinese (@jinrenjie), Catalan (@davidesteve), Taiwanese (@ssangyongsports)
    • Bug fixes and improvements.


    • 448f0e3 Fix missing subscriber count in individual list GET API.
    • 8e3e1b9 Change naive ILIKE search to full text (unindexed) on lists and campaigns. Closes #1058.
    • 9326039 Silence health check error in Cypress tests.
    • 1759824 chore: fixes translations for Turkish language (#1063)
    • 18746b7 Add Welsh to i18n (#1060)
    • 3a56274 Add Portuguese translations for v2.3.0 (#1061)
    • 3a89bfd Update zh-CN.json (#1062)
    • d6a3635 Update ca.json (#1059)
    • 8f8e83f Update Polish translation (#1055)
    • a42f635 Update ru.json (#1054)
    • 8d4a575 Fix broken single list fetch API.
    • e60b385 Update fr i18n file (#1050)
    • 4b551ef pt-BR.json v2.3.0 (#1046)
    • de2e5a1 Update german translation (#1045)
    • 395ae98 Update cs-cz i18n file. Co-authored-by: Lumir Srch [email protected]
    • d30ef22 Include archive params when cloning campaigns on the UI. Closes #1026.
    • 73bb608 Add helper button on campaign UI to fill default archive meta JSON.
    • c52a067 i18n(jp): update for 2.3.0 release (#1042)
    • b2853fd Adds malayalam strings localized (#1041)
    • 4f2f419 Include send_at when cloning campaigns on the UI. Closes #1027.
    • 6fcb4ff Add archive page link icon next to campaign archive toggle on UI. Closes #1028.
    • 2761a5e Fix modal overflow issue on bulk list popup UI. Closes #1030.
    • 1e90fee Show send_at on archive page for scheduled campaigns. Closes #1036.
    • 832a426 Fix settings Cypress test.
    • af4b532 Add version to public css for cache busting.
    • a8193d8 Tidy go.mod
    • d1307c6 Add missing RSS icon.
    • 818f2c9 Add public archive on/off toggle to settings.
    • f958f3d Add RSS feed to the public mailing list archive.
    • 438568e Add global site name setting to render name on public pages.
    • eac1240 Exclude opt-in campaign from public archive.
    • 23fb178 Add subscription/archive links to public pages.
    • ebf63b5 Disable archiving on opt-in campaigns.
    • eaaca05 Fix archive template selection in campaign creation query.
    • 56a9836 Integrate paginator library in place of custom pagination function.
    • 9add728 WIP: Add support for publishing campaigns to publish archives.
    • 74322cd Fix e-mail From/Return-Path envelope sender. Closes #908, closes #1008.
    • c2d41e0 Remove redundant test code.
    • d613bb5 Make font size of certain on the settings UI consistent.
    • 6d3ae4c Add subscription created_at, updated_at when listing subscribers list (#1018)
    • fd70776 Fix table cell content alignment in campaign list. Closes #742.
    • 879bff8 Update subscription date on public unsubscribe. Closes #915.
    • d8e3e25 Add preconfirm optin option to bulk list management UI. Closes #935.
    • ef1f84e Add new description field to lists. Closes #925.
    • 95b8df2 Add tests for new subscription form.
    • 3b00831 Add ability for subscribers to manage preferences on the unsub form.
    • 372a144 Display template IDs on the list UI and popup editor. Closes #986.
    • 281c471 Fix go-for-loop reference bug in template caching.
    • d2e8a93 Upgrade Cypress to major version 10.
    • c381004 Add arbitrary meta field to media. Closes #938.
    • c3d04a5 Refactor models.SubscriberAttribs JSON wrapper to generic name JSON.
    • db2fd9a Bump from 4.6.1 to 4.9.0 (#962)
    • bea1680 Fix incorrect day-of-week on the UI. Closes #942.
    • 9c94efb Create ca.json (#955)
    • 5b8c705 Fix headers not being copied in campaign clone. Closes #948.
    • edb4c91 Improve HTML check in notif template loading. Closes #903.
    • f266f93 Add Safe() template function to notif templates.
    • 5a9e920 Fix missing list names on optin page. Closes #940.
    • f9bc049 Merge branch 'maintenance'
    • 6d820f4 Add maintenance options.
    • 8eb4f7e Create zh-TW.json (#936)
    • 8ace258 Add /api/public/* endpoints.
    • 4ef7a6a Update RU i18n translation (#922)
    • 76df9c8 Refactor and simply function name.
    • 13068cc Fix broken bulk subscriber query. Closes #897.
    • a5c14a1 Update Polish translations (#918)
    • 6b11020 Fix empty subject on non-tpl tx subject. Closes #898.
    • c60412d Update vi.json (#901)
    • aaac82a Update zh-CN.json (#904)

    New Contributors

    • @jinrenjie made their first contribution in
    • @organicnz made their first contribution in
    • @ssangyongsports made their first contribution in
    • @davidesteve made their first contribution in
    • @r0ro made their first contribution in
    • @wgriffiths made their first contribution in
    • @volkanto made their first contribution in

    Full Changelog:

    Source code(tar.gz)
    Source code(zip)
    listmonk_2.3.0_checksums.txt(608 bytes)
    listmonk_2.3.0_darwin_amd64.tar.gz(6.79 MB)
    listmonk_2.3.0_freebsd_amd64.tar.gz(6.65 MB)
    listmonk_2.3.0_linux_amd64.tar.gz(6.59 MB)
    listmonk_2.3.0_netbsd_amd64.tar.gz(6.64 MB)
    listmonk_2.3.0_openbsd_amd64.tar.gz(6.65 MB)
    listmonk_2.3.0_windows_amd64.tar.gz(6.65 MB)
  • v2.2.0(Jul 30, 2022)


    Although delayed by a couple of months, v2.2.0 is here finally.

    New: transactional messaging

    The biggest new addition is the new transactional messaging feature. See docs.

    • Define transactional templates (new template type: transactional)
    • API to fire arbitrary transactional messages using predefined templates via any messenger.


    • A new Test connection feature on the SMTP settings UI to quickly test SMTP settings by sending a test e-mail. I don't know how I missed this for so long!
    • One-click SMTP configuration for popular providers.
    • New Insert HTML button to quickly insert HTML blocks and snippets on the campaign richtext editor.
    • New language packs, 名字 (Chinese) by @p1slave, Vietnamese by @mannm123, Suomi by @pucilpet, 日本語 (Japanese) by @t3hmrman
    • Spellchecker in the campaign richtext editor.
    • Major refactor and cleanup of the codebase. Database/CRUD functions that were scattered across handlers have been moved to a new, reusable core package.
    • A number of minor bug fixes and improvements.

    Breaking changes

    • The JSON response to the POST /api/media has changed. See docs.


    • bbbf28c Create default tx template on upgrade.
    • cd09c5a Remove MailerSend (no config available) from SMTP settings UI.
    • 57dbb9e Add explicit warning on empty password to SMTP test UI.
    • b497f52 Merge branch 'fix-analytics'
    • bfc27de Fix regression of public subscriber page behaviour.
    • 3550d54 Fix incorrect analytics count. Closes #712.
    • d19a55b Bump terser from 4.7.0 to 4.8.1 in /frontend (#885)
    • 2ef7e26 update FI translation (still partial) (#878)
    • 71dd48b I18n fr translations update (#876)
    • 6aa63fe Update cs-cz.json (#879)
    • 3163f91 fix(i18n): update i18n/pt-BR for 2.2.0 release (#875)
    • 54349ce Update fr.json (#877)
    • fb3c429 Fix Chinese i18n language code.
    • 08c7de1 updated german translation (#874)
    • 650e23e Update de.json (#873)
    • f607c0b Italian translations (#872)
    • 300fb7f Update Spanish (es.json) translations (#871)
    • a5ce226 Merge pull request #870 from TychoWerner/tychowerner_nlTranslations
    • b5b6986 Translated new strings
    • c742c91 Merge pull request #869 from t3hmrman/fix/i18n-jp-for-release-2.2.0
    • f68af83 fix(i18n): two leftover replacements
    • 96197b0 fix(i18n): JP language name tag and templated vars
    • 641616e fix(i18n): update i18n/jp for 2.2.0 release
    • 0cd41ed Add comment explicitly stating that DB has to be created externally. Closes #830.
    • b44d0a6 Refresh newly added i18n langauge strings.
    • df31426 Add button to insert HTML snippets into WYSIWYG editor.
    • 77bc8a7 Send full media object in upload API response. Closes #770.
    • c84837f Fix '&amp' encoding in tracked URLs before saving in the DB. Closes #844.
    • 9107edf Add SMTP config shortcuts for popular providers in the settings UI.
    • 278d5bf Merge branch 'test-smtp'
    • ee44817 Add support for testing SMTP connections in the settings UI.
    • e99c8ed Disable template type updation after creation to prevent breaking of campaign relations.
    • 4de5d53 Refactor upgrade schema to remove column default.
    • 5a5caca Refactor campaign/template preview functions and component.
    • 2dcac57 Fix tx template delete query.
    • f26f7c6 Refactor template tests.
    • bc07a45 Fix clone tx template on the templates UI.
    • d3774d6 Make tx DB upgrade schema consistent with install schema.
    • 0574a1b Fix template compilation check on CRUD.
    • 3f5a50f Fix header processing in tx send.
    • 68da86a Fix redundant echo/http error wrapping.
    • 4a6e041 Don't break boot on tx template compilation errors.
    • 463e92d Add transactional (tx) messaging capability.
    • 83a0e10 Add 'test' button to SMTP UI to test connections.
    • 13603b7 Merge pull request #860 from p1slave/patch-1
    • 6dfe4a0 Create zh-CN.json
    • dc7b44a Merge pull request #858 from pucilpet/fi-translation
    • c7c331e Added Finnish translation (partial, public fields)
    • c7eb491 Merge pull request #847 from knadh/dependabot/npm_and_yarn/frontend/shell-quote-1.7.3
    • a2d01b2 Merge pull request #854 from joeirimpan/postback
    • 175770d fix: Use list append instead of indexing
    • a1df02b feat(postback): Add attachment, from email to postback body
    • 66499ac Bump shell-quote from 1.7.2 to 1.7.3 in /frontend
    • 0834ab7 Merge pull request #824 from knadh/dependabot/npm_and_yarn/frontend/eventsource-1.1.1
    • ffffdcf Bump eventsource from 1.0.7 to 1.1.1 in /frontend
    • 97f8c35 Merge pull request #811 from rslonik/master
    • d133cf2 Merge pull request #808 from sjoerdvanderhoorn/patch-1
    • b2fc35a Fix pt-BR subscription form header
    • 92d49fd Update nl.json
    • e0b01a8 Fix UI elements not getting locked on finished campaigns. Closes #771
    • 59c9441 Fix subscriber create query to not ignore duplicate e-mail error.
    • fe5466d Remove test files committed accidentaly.
    • a3fd461 Merge big refactor with the 'core' branch.
    • b4f0c7e Fix ambiguous route name in frontend route definitions.
    • fee2ef3 Upgrade axios lib.
    • 959541f Rename unsub query to match the core method name.
    • 9aef4f2 Enable browser spell check in the campaign editor UI. Closes #786.
    • 19c1e51 Fix unsub status not showing for non-optin lists on the subscribers UI.
    • b94da62 Fix broken public link redirect.
    • d39816e Merge pull request #795 from knadh/dependabot/npm_and_yarn/frontend/axios-0.21.2
    • 5fd4d7b Refactor paginated bounce query function to return DB total.
    • d2ef23d Refactor paginated campaign query function to return DB total.
    • e303850 Refactor paginated list query function to return DB total.
    • aa19771 Refactor bounces package to remove db/queries dependency.
    • b5cd949 Refactore all CRUD functions to a new core package.
    • 12b845e Fix incorrect HTTP resp code on public page. Fixes #772.
    • 89eca5f Changed email subject template from HTML to text. Fixes #785.
    • 75190d9 Fix broken line in the JP language pack.
    • a94f238 Sanitize HTML in Buefy dialogs.
    • d5b912a Merge pull request #798 from t3hmrman/feat/add-jp-translation
    • 6252a16 feat(i18n): add japanese translation
    • f489573 Bump axios from 0.21.1 to 0.21.2 in /frontend
    • 20cbeb7 Merge pull request #794 from knadh/dependabot/npm_and_yarn/frontend/async-2.6.4
    • 8794c92 Bump async from 2.6.3 to 2.6.4 in /frontend
    • c898ec2 Merge pull request #790 from nathanaelhoun/patch-1
    • 1e8f8ab Updated some French translations
    • 06e4b77 Merge pull request #788 from etcware/patch-1
    • eb7c07b Update it.json
    • 7ea523d Merge pull request #727 from yatish27/fix_typos_in_comments
    • 8c9fccb Merge pull request #762 from knadh/dependabot/npm_and_yarn/frontend/minimist-1.2.6
    • 73e4c1c Fix POP mail parsing in multipart bounce e-mails.
    • 2b78702 Bump minimist from 1.2.5 to 1.2.6 in /frontend
    • 2648333 Fix typos
    • a714551 Merge pull request #726 from knadh/dependabot/npm_and_yarn/frontend/prismjs-1.27.0
    • 61e1260 Merge pull request #728 from knadh/dependabot/npm_and_yarn/frontend/url-parse-1.5.10
    • cd48262 Merge branch 'master' of
    • 4e6410e Fix list_ids not being considered in bulk list change on the UI. Fixes #737.
    • a7af9e3 Merge pull request #751 from TychoWerner/patch-1
    • 2b0bb77 Update nl.json
    • ef643a1 Add ability to export select subscriber ids.
    • 8db8ecf Upgrade Cypress.
    • bfce146 Hide confirmed/unconfirmed from single opt-in lists on the UI. Ref #741
    • a7ac8ce Merge pull request #749 from an0nfunc/feat-tinymce-anchor
    • 3eca66c activated anchor plugin for TinyMCE editor
    • 9a0f762 Merge pull request #743 from jonathandhn/master
    • d6318f9 Update fr.json
    • f9854bc Remove redundant status from single opt-in list subscriptions on the UI. Closes #741.
    • 8f45abe Remove Heroku buttons (as it has blocked listmonk without explanation).
    • d02efee Merge pull request #735 from an0nfunc/patch-german-translation
    • 6ebfb6f German translation mostly for Analytics
    • 3b0c8b3 Fix updated settings/config init routine on settings UI.
    • b4c7163 Don't show duration on scheduled campaigns that are finished. Closes #701.
    • 8d6e475 Merge branch 'fix-i18n'
    • c4f1bed Add missing i18n strings to dayjs. Closes #717.
    • e87c80e Refactor app init routines to load config/i18n before main app mount.
    • 174a48f Merge pull request #730 from ohyesgocool/fixtypos
    • 04c4552 Fixed typos
    • 28a8b96 Bump url-parse from 1.5.7 to 1.5.10 in /frontend
    • ac8c568 Bump prismjs from 1.25.0 to 1.27.0 in /frontend
    • 76a86fa Add i18n translation to document titles in the router.
    • 45878db Change list UI status counts to i18n plural. Ref: #717
    • 6fe36db Fix incorrect i18n tooltip in dashboard graph.
    • 09f97c4 Merge pull request #721 from knadh/dependabot/npm_and_yarn/frontend/url-parse-1.5.7
    • 028377c Merge pull request #722 from rhnvrm/bump-simples3
    • 5dd5cb1 feat: bump simples3 for digitalocean support
    • 4835a95 Bump url-parse from 1.5.3 to 1.5.7 in /frontend
    • 3495af7 Merge pull request #714 from knadh/dependabot/npm_and_yarn/frontend/ajv-6.12.6
    • caa27f3 Merge pull request #699 from yatish27/fix_typos
    • 0a6f28a Bump ajv from 6.12.2 to 6.12.6 in /frontend
    • 17e723a Merge pull request #700 from knadh/dependabot/npm_and_yarn/frontend/follow-redirects-1.14.8
    • 6e45b0b Merge pull request #710 from m3nu/issue/705/empty-logo-url
    • 6323737 Merge pull request #713 from marcinkunert/patch-4
    • 048fbc2 Updated polish translations
    • 9ed0ae7 Use empty logo_url as default
    • 5167436 Merge pull request #709 from mannm123/patch-2
    • fcb413f Create vi.json
    • afdaf46 Bump follow-redirects from 1.14.7 to 1.14.8 in /frontend
    • 6c90323 Fix typos
    • d442de0 Merge pull request #696 from candideu/master
    • ea6acdd Merge pull request #698 from yatish27/patch-2
    • dc4e3a6 Fix typo in manager.go
    • e623088 Added correct link to repo for docs contribution

    New Contributors

    • @yatish27 made their first contribution in
    • @candideu made their first contribution in
    • @mannm123 made their first contribution in
    • @m3nu made their first contribution in
    • @ohyesgocool made their first contribution in
    • @an0nfunc made their first contribution in
    • @jonathandhn made their first contribution in
    • @TychoWerner made their first contribution in
    • @etcware made their first contribution in
    • @nathanaelhoun made their first contribution in
    • @t3hmrman made their first contribution in
    • @sjoerdvanderhoorn made their first contribution in
    • @rslonik made their first contribution in
    • @pucilpet made their first contribution in
    • @p1slave made their first contribution in
    • @srchlm made their first contribution in

    Full Changelog:

    Source code(tar.gz)
    Source code(zip)
    listmonk_2.2.0_checksums.txt(608 bytes)
    listmonk_2.2.0_darwin_amd64.tar.gz(6.69 MB)
    listmonk_2.2.0_freebsd_amd64.tar.gz(6.55 MB)
    listmonk_2.2.0_linux_amd64.tar.gz(6.49 MB)
    listmonk_2.2.0_netbsd_amd64.tar.gz(6.54 MB)
    listmonk_2.2.0_openbsd_amd64.tar.gz(6.55 MB)
    listmonk_2.2.0_windows_amd64.tar.gz(6.55 MB)
  • v2.1.0(Feb 12, 2022)


    This version contains a number of fixes, improvements, (small) feature additions, and performance improvements.


    • An improved mobile UI and CSS/JS customization for admin and public pages from the settings UI under the new "Appearance" tab. This reduces the need for loading custom templates with --static-dir. Contributed by @sweetppro
    • Accurate, realtime messages / minute counter on running campaigns.
    • --passive mode (that doesn't process campaigns) for running multiple instances of the app.
    • Per-campaign custom SMTP headers.
    • TLS (in addition to STARTTLS) support for SMTP servers.
    • Accurate unconfirmed / confirmed / unsubscribed counts on the lists UI.
    • Search lists like campaigns.
    • Support for public CDN endpoints in media uploads.
    • {{ TrackLink }} now accepts dynamic arguments, such as a link from subscriber's attributes.
    • Campaign analytics now shows unique counts if individual tracking is turned on.
    • New Dutch (@Jjagg) and Hungarian (@bohemtucsok) language packs.


    • POP3 bounce mail scanning on mail envelopes.
    • S3/IAM blocking indefinitely on bad configuration in non-AWS environments.
    • Richtext / HTML conversion adding stray spaces to links in the editor.
    • A number of other minor UX fixes.

    Shoutout to @NicoHood for patiently reporting a number of UX glitches and suggesting improvements.

    How to upgrade

    As always, take a backup of your database before upgrading.

    Binary Download the latest binary. Stop and replace the old binary. Run ./listmonk --upgrade. Start the app again.


    # cd /directory/with/docker-compose.yml
    docker-compose down
    docker-compose pull && docker-compose run --rm app ./listmonk --upgrade
    docker-compose up -d app db

    Changes to public templates

    The near Appearance tab in settings adds the following two lines to the <head> tag of static/public/templates/index.html:

    	<link href="/public/custom.css" rel="stylesheet" type="text/css">
    	<script src="/public/custom.js" async defer></script>

    If your installation has custom static templates with --static-dir, please add these two lines to use the new customization feature.

    What's next?

    • Transactional e-mails and messages.
    • (Multi) user management system.


    0ecfb89 Remember appearance sub tab in settings UI. 481d6ef Move bundled fonts to a better location. 93366f4 Remember last chosen tab on the settings UI. 0f6a037 Add accurate realtime message rate counter. 1b163d1 Fix next-subscribers batch query for a ~210x speedup. 02eaa66 Fix lists test to accommodate new UI yes/no campaign prompts. 8fb459d Fix custom DB type scan failing when nil. 48ef3dc Support status in bulk subscriber list update API. Closes #604. 251c1ea Fix campaign start throwing error when disabling schedule on the UI. da30d46 Add subscriber status counts to the lists UI. 182795e Refactor table stats field set styles. 1b017c0 Merge branch 'master' of 2614b07 Refactor campaign analytics to show unique / non-unique data. 1c37732 Merge pull request #683 from sanketsaurav/master 0d88bd8 Fix spelling for "compatible" d0b32b9 Allow unsubscribed users to re-subscribe. Closes #588 d2cf6e0 Fix TrackLink template code to accept Go template variables. Closes #667. 9551f54 Merge branch 'master' of 636db20 Fix editor HTML beautification in incorrectly adding breaks to links. f46ab23 Merge pull request #679 from marcinkunert/patch-3 3b1614b Added end of line config for git 6a5ed43 Change Heroku button repo. 5c2005d Merge pull request #668 from avanier/upkeep/spiffy-up-docker-dev-stack c7c04c5 Provide a default configuration file for containerized development 5a6b338 Use --idempotent and --yes flags when bootstrapping the dev db 4ecd044 Spiffy up the continerized dev README 64d2c5a Add support for custom public S3 URLs. Closes #505. 7955a4f Fix media upload S3 IAM init blocking outside non-AWS environments. 4ddd3e8 Add 'View in browser' link to the default email template. Closes #540. c6d5d86 Warn of unsaved changes on the campaign editor on navigation. Closes #551. 4c09cc1 Auto-focus TinyMCE editor area on load. 3f02609 Add unsubscribe link to opt-in confirmation e-mail. Closes #573. 28efe27 Merge branch 'master' of 04ea18c Refactor opt-in confirmation behaviour in subscriber update API. 740373d Merge pull request #664 from nikochiko/spaces-in-filenames be1d048 Replace whitespace with dash in names of uploaded files c95427e Merge branch 'master' of a2458cf Merge pull request #663 from knadh/dependabot/npm_and_yarn/frontend/follow-redirects-1.14.7 a314eb5 Bump follow-redirects from 1.13.1 to 1.14.7 in /frontend e62dc24 Re-order SMTP auth protocols in the settings UI by popularity. 2f56057 Close burger 'menu' when clicking items in mobile view. b0787f7 Merge pull request #649 from joeirimpan/fix/msgr-persist 4c48c32 fix(frontend): Persist messenger selection e200ab0 Add support for additional POP3 mail charsets. Closes #644. f266f55 Tidy go.mod e1d3dd4 Merge branch 'master' of d8ed404 Make tls_enabled key migratin idempotent. 583dab4 Add support for per-campaign custom headers. 9e9ea0e Refactor automatic camel casing of API response fields. d42c676 Merge pull request #646 from ldidry/add-autoheadingid-option-to-markdown-parser 73e6668 Add AutoHeadingID option to Markdown parser dd061f5 Add support for direct SSL/TLS (non-STARTTLS) SMTP connections. e46a5cd Merge pull request #640 from rhnvrm/feat-s3-put c003aec feat: switch from s3 POST to s3 put d523d0a Merge pull request #639 from mr-karan/tz e4d8286 feat: Add timezone config in app container b48a15c Fix incorrect 'nice date' formatting. Closes #635. e982e6b Don't warn on format change when campaign content is empty. Closes #634. c1c2b67 Add a link to more language packs to the language settings UI. fabe06e Add support for custom CSS/JS in settings for admin and public pages. 920645f Fix typo in Makefile. 13edf42 Merge pull request #625 from mr-karan/master c9189a1 fix( Make tr work with macOS ca128df Add support for searching lists + search UI. Closes #618. e9709e5 Upgrade labstack/echo webserver to major version v4. 02c1408 Fix broken Cypress UI tests. 4cb5eb7 Fix settings form input validation. e9dded7 Merge pull request #608 from mr-karan/dev_docker e977b90 feat: Add dev docker setup e6c1f1e Merge pull request #605 from Jjagg/i18n-nl 1c8ab5c Add dutch (nl) translation 3386de4 Fix GET /subscribers calls not accepting multiple list_ids. d32c11a Merge pull request #603 from NicoHood/patch-2 8a70595 Fix #601 german translation 575d007 Fix alert email urls (#595) 903330b Create hu.json (#591) a7fa97a Add scanning of full bounce email body for bounce headers. Closes #492. c8c135e Fix broken test mail due to missing tpl param. 35ac1cc Embed Inter font files and remove Google font links. Closes #547. 46f13bf Fix broken logout link in desktop nav view (#580) 2388a05 Update fr.json (#581) 7b9ba2e improved mobile navbar/sidebar (#574) 125d51f Merge pull request #576 from MickGe/patch-1 a2c885b Add a note on Postgres min version. ebf6af2 Clear placeholder on focus 19e0ea5 Fix scheduling params being ignored on the create campaign UI. Fixes #516. 0bd13fe Fix response content type in plaintext campaign previews. Closes #568 d00a1a1 Merge branch 'master' of 738c8e9 Merge pull request #569 from ChrisTG742/patch-2 34915f1 Merge pull request #570 from jorge-vitrubio/patch-1 58bd242 Updated es.json bfefb0f German translation needed for #526 88d0c77 Merge pull request #567 from knadh/dependabot/npm_and_yarn/frontend/tinymce-5.10.0 2819ca8 Bump tinymce from 5.9.2 to 5.10.0 in /frontend 1ece738 Fix incorrect container width on public page responsive view. 5bfbe15 Fix campaign template preview not working without saving. Closes #553. 644f98f Fix typo ef4de09 Add contribution and participation guidelines and code of conduct. 1054c01 Hide 'Back' button when it is superfluous on public pages. 1101039 Add "passive" mode with --passive flag. 9dd8592 Prevent images from being squished in the default e-mail template. Closes #548. f39ee4e Fix TinyMce campaign editor toolbar to the top on scroll. Closes #549. b290d27 Add support for plaintext system e-mail templates. 1c8ac0f Add 'preconfirm subscription' option to subscriber UI. Closes #526. 76cd4d3 Merge branch 'master' of ed8d68b Add anti-bot nonce field to generated forms. Closes #541. 151b86a Merge pull request #538 from NicoHood/patch-1 fb3da6b Add german back button translation b163b13 Add a "Back" button the public subscription/message page. bc9252f Autogenerate subscriber name from e-mail on the UI if it's empty. Closes #525. 0f896c1 Fix email field in generated form HTML. Closes #529. ca51c48 Fix duplicate class attr in optin e-mail. Closes #524. f91b27d Merge pull request #518 from mr-karan/script_fix 6cd7d66 fix: Add a check for existing docker db volume 3064844 Merge branch 'master' of a017597 Fix strings on the UI missed in i18n translation. Closes #506. 469f392 Merge pull request #507 from marcinkunert/patch-2 d6703f2 Updated polish translations 823f11e Remove redundant GitHub issue template. b46ab6d Fallback to default S3 URL on empty media upload URL in settings. d91d6e5 Merge branch 'go-deps' 6053b09 Merge branch 'master' of 7aa8508 Add explicit public-read ACL to public S3 uploads. Closes #496. 4ec4a1b Merge pull request #494 from marcofucito/master 7015c04 Italian translation 443ba18 Merge pull request #491 from citrus-it/makedep ecc3516 pack-bin is missing dependency on build-frontend 0d8c036 Merge pull request #490 from citrus-it/touch ac69f6c Use POSIX standard -c flag for "touch" d0f1a27 Update Go deps. b45baaa Merge pull request #485 from tachyons/patch-1 30dbe88 Fix typo

    Source code(tar.gz)
    Source code(zip)
    listmonk_2.1.0_checksums.txt(608 bytes)
    listmonk_2.1.0_darwin_amd64.tar.gz(6.60 MB)
    listmonk_2.1.0_freebsd_amd64.tar.gz(6.46 MB)
    listmonk_2.1.0_linux_amd64.tar.gz(6.40 MB)
    listmonk_2.1.0_netbsd_amd64.tar.gz(6.45 MB)
    listmonk_2.1.0_openbsd_amd64.tar.gz(6.46 MB)
    listmonk_2.1.0_windows_amd64.tar.gz(6.46 MB)
  • v2.0.0(Sep 27, 2021)


    This is a major release with multiple new features and a large number of usability improvements, bug fixes, and significant performance improvements. Check out the live demo.

    • Bounce processing: POP3 mailbox, API, and AWS/SES and SendGrid webhooks.
    • Campaign analytics with view, click, bounce, and link stats and visualizations.
    • Pluggable S3 compatible media upload backend (MinIO).
    • A powerful new WYSIWYG richtext editor (TinyMCE) with improved raw HTML editing.
    • E-mail domain blocklist.
    • Refreshed UI with snappier interactions and improved mobile responsiveness.
    • New @TrackLink shorthand for creating tracking URLs. eg: <a href="https://[email protected]"></a>.
    • New language packs.
    • and more ...

    Important :warning:

    • All admin UI URLs have moved to /admin/*. If you have custom firewall rules in your proxy, update them.
    • If you are using custom static templates with the --static-dir option, make sure to download and use the new files. They may have breaking changes.

    How to upgrade

    As always, take a backup of your database before upgrading.

    Binary Download the latest binary. Stop and replace the old binary. Run ./listmonk --upgrade. Start the app again.


    # cd /directory/with/docker-compose.yml
    docker-compose pull && docker-compose run --rm app ./listmonk --upgrade
    docker-compose up -d app db



    05585b7 Fix build step in GitHub actions. bf2703b Fix status tag flashing on campaign edit UI load. 93c7c87 Replace TinyMCE source editor with Flask HTML editor. cd639e8 Add link to bounces docs in settings UI. 60badb2 Update README to reflect v2.0.0 changes. f0b033b Add missing home template. 1f31218 Add a 404 page to the admin UI. 0db6f0c Bump Postgres version to 13 in example Docker setup. 30f9f03 Replace TinyMCE UI pt font sizes with px. 98ed4fb Add a landing login page and a logout option. 9d2bc9c Add HTML syntax highlighted editing to the template editor. a1a9f3a Fix incorrect i18n variable in notification e-mail. 3ffd88f Remove obsolete bounce routines from manager package. 4056187 Add sane defaults to POST creation APIs. f6cd24d Fix TinyMCE modal styles and overlapping issues. d86438b Introduce @TrackLink shorthand for generating tracking links. d3f543c Fix issues with Buefy responsive styles. e0bf1f1 Fix broken Cypress tests. 492efe1 Bump Go compiler to v1.17 in GitHub actions. 4dbac14 Add Romanian i18n language pack contributed by @gabrielpioaru. 7aee36e Add support for blocklisting e-mail domains. 9f3eb7e Fix Cypress tests to accommodate new admin UI URI. 9f8e9c0 Fix subscriber form UI to have a default status value. e71115d Add option to toggle sending opt-in confirmation. Closes #363. 51da1a1 Add check to skip admin notifications with no e-mails. Closes #300. c2a3f7d Merge pull request #472 from henk23/feature/replace-quill-with-tinymce 68512d2 Add i18n support to TinyMCE. 0dc9e78 Refactor HTML formatting and indentation in richtext -> HTML on UI. b6f68b8 Tweak editor page and box styles. ffcb987 Fix incorrect init and change events on TinyMCE. a0addc7 Clean up syntax, toolbar, and editor styles. 1e4f974 Make media selection work and add more plugins and tools c140578 Put TinyMce init options into variable, add some TODOs 4afe4a7 Re-add changes from master, that got lost by accident 71fc73f Fix long line issue in dist build c09d2fc Replace Quill editor with TinyMCE a97d81a Merge branch 'refactor-frontend-path' 6904b1f Remove redundant clause from the Makefile. bb340b8 Refactor frontend build and name space all admin URIs behind /admin/. 855d440 Merge pull request #477 from aiac/patch-1 0ebf494 CD to directory before install script 13f1648 Merge pull request #476 from knadh/dependabot/npm_and_yarn/frontend/prismjs-1.25.0 7d4bac6 Bump prismjs from 1.24.0 to 1.25.0 in /frontend 956e990 Improve codeflask HTML syntax highlighting colours. 4b13f0c Add public URIs to yarn dev proxy. 9f9425c Refresh i18n files. 4b127f1 Merge branch 'campaign-analytics' 623030a Replace go get with go install stuffbin (Go 1.17 deprecation). 6a31697 Fix inconsistent non-ii18n tag and label displays. 2ed54b8 Fix Buefy UI modal breaking body and sidebar scroll. 71fd71d Refactor individual subscriber edit view. 070472c Add missing speedometer Fontello icon to the campaigns UI. d19728c Make container size uniform on multiple views on the UI. 6f2aa1a Fix and refactor list selector UI component. 1df827c Fix automatic field camel casing for subscriber attribs 4e5e466 Add a ?minimal mode to GET /lists API. f86a647 Add Intl formatting to large numbers on the UI. 56629cc Fix lists pagination breaking on the UI. f1fbcd4 Fix automatic camel casing of subscriber attribs on the UI. 8733b20 Refactor SQL schema and queries for performance improvements. 6eb5894 Fix 'Analytics' menu item not getting highlighted. 1bb630c Fix Buefy taginput padding 54f1b55 Merge branch 'analytics-migration' into campaign-analytics 61e8868 Add campaign analytics APIs and UI fd8f5a9 Add missing bounce_type to v2 migration. 9302dfb Add missing id (pkey) to analytics tables for faster queries 3d0031b Add campaign analytics APIs and UI 3135bfc Upgrade and refactor global theme. d205f1c Merge pull request #464 from tusharsadhwani/patch-1 f0299a8 Clarify default option in prompt 1f4f426 Fix incorrect [list_id] param in bulk subscriber deletion UI 68369a8 Update issue templates 85c8806 Merge pull request #450 from ChrisTG742/patch-1 647bea3 translation fixes 6cf0b46 Merge pull request #445 from tusharsadhwani/fix-whitespace 2edd3ec Fix whitespace inconsistency in install scripts 7691fbd Refactor the large settings UI view to multiple files. abedb26 Add Czech i18 translation contributed by @srchlm 00275df Fix i18n language code validation to include - 3847c67 Add --idempotent to make --install idempotent edac5a1 Add bounce tests (Cypress) 81d183b Fix incorrect date in bounce insert 27e1e83 Validate type in bounce webhook API. 158ea9f Fix bounce action only triggering on n+1st bounce. b6d60d9 Merge branch 'master' of ab0b5dd Remove obsolete 'embed' import f149c63 Replace the Heroku button with a functional one. d6d1883 Add custom S3 backend support (eg: Minio) to media uploads 923b882 Add migration to remove obsolete subscribers.campaigns field 1be8c7d Merge branch 'bounce' d41b697 Fix race in settings UI and settings API fetch cce5cff Fix bounce upgrade schema 185d511 Merge pull request #434 from knadh/dependabot/npm_and_yarn/frontend/url-parse-1.5.3 59c8976 Normalize i18n files with new bounce keys. 1ae9869 Add support for bounce processing. c7a962b Bump url-parse from 1.5.1 to 1.5.3 in /frontend e23b4fd Merge pull request #431 from knadh/dependabot/npm_and_yarn/frontend/path-parse-1.0.7 ccee852 Remove incorrect RootURL link from e-mail template. Closes #432 26c099a Merge branch 'version-file' d27e16e Add a VERSION file for git-archive export b19013d Merge branch 'master' of 137e9dd Refine Spanish (es) i18n translations 7f5e975 Merge pull request #433 from dreglad/i18n-es-refine 9e64dcb Refine Spanish (es) i18n translations 4405550 Bump path-parse from 1.0.6 to 1.0.7 in /frontend e656618 Add preconfirm_subscriptions to subscriber update. Closes #426. fb48477 Fix SQL expressions breaking subscriber export. Closes #408 af11a17 Refactor make run to always compile and use the correct frontend path 6a87f38 Merge branch 'static-paths' b7a25e5 Merge pull request #423 from mr-karan/install_fix 4d8e73b fix colorized output in terminal 9e61bfc Merge pull request #419 from justinbeaty/topic-root-url-fix a7f7016 Fix RootURL in campaign-status.html 82735bb Refactor behaviour of loading static files from disk vs. embedding. c8826d0 Merge pull request #417 from kmohrf/master c10c031 add systemd service unit 67c0ca0 Merge branch 'master' of 3be5227 Account for all *.go files in the repo in the Makefile build target 078ca39 Merge pull request #405 from knadh/dependabot/npm_and_yarn/frontend/color-string-1.5.5 5e2c24b Make --new-config accept path from --config. Closes #410. ea9895e Merge pull request #406 from knadh/dependabot/npm_and_yarn/frontend/prismjs-1.24.0 893fab2 Bump prismjs from 1.23.0 to 1.24.0 in /frontend f101dde Bump color-string from 1.5.3 to 1.5.5 in /frontend c818ad9 Merge pull request #399 from knadh/dependabot/npm_and_yarn/frontend/browserslist-4.16.6 442d7f7 Merge pull request #403 from kmohrf/master 89bfe74 use make’s dependency handling to speed-up rebuilds 07478a5 allow yarn bin to be overridden 5988ea3 Sanitize media upload filenames. Closes #397. d6551e1 Bump browserslist from 4.12.0 to 4.16.6 in /frontend fc84082 Merge pull request #398 from knadh/dependabot/npm_and_yarn/frontend/postcss-7.0.36 674536c Bump postcss from 7.0.32 to 7.0.36 in /frontend a22d7fa Merge pull request #394 from mr-karan/install 8d40422 feat: Add easy install script

    Docker images

    • docker pull listmonk/listmonk:v2.0.0
    Source code(tar.gz)
    Source code(zip)
    listmonk_2.0.0_checksums.txt(608 bytes)
    listmonk_2.0.0_darwin_amd64.tar.gz(5.77 MB)
    listmonk_2.0.0_freebsd_amd64.tar.gz(5.65 MB)
    listmonk_2.0.0_linux_amd64.tar.gz(5.60 MB)
    listmonk_2.0.0_netbsd_amd64.tar.gz(5.64 MB)
    listmonk_2.0.0_openbsd_amd64.tar.gz(5.65 MB)
    listmonk_2.0.0_windows_amd64.tar.gz(5.65 MB)
  • v1.1.0(Jun 9, 2021)

    This is an unplanned interim release that fixes a critical bug in subscriber deletion:


    b361292 Display app version the settings UI a3b285f Fix Buefy number input width 63520d2 Merge pull request #388 from dunklesToast/chore/update-german-translations 3abac31 chore(translations): improve german translations 3ecac76 Fix Vue linting issue 868fae6 Refactor subsbscription status option on the import page. 7ca08f0 Adding a subscription status option to the import. c37a769 Add robots noindex header to public user specific subscription pages a914b5d Merge branch 'master' of 8859911 Remove hardcoded limit for per_page in pagination 948dbc9 Merge pull request #385 from knadh/dependabot/npm_and_yarn/frontend/ws-6.2.2 6ddb03c Bump ws from 6.2.1 to 6.2.2 in /frontend 3d26366 Fix pagination query. bbffbbc Fix listID not being passed in bulk sub deletion. Closes #384 baca95e Merge pull request #381 from mr-karan/health 50dc9fc feat: add a public healthcheck endpoint 59bcc8e Merge pull request #376 from knadh/dependabot/npm_and_yarn/frontend/dns-packet-1.3.4 cb07774 Bump dns-packet from 1.3.1 to 1.3.4 in /frontend e3d3420 Merge pull request #374 from jonathanmmm/patch-1 30132c5 Update de.json 44adcd4 Stop checking for updates on boot. dba47bc Add file extsnsion check to media uploads. 69f84c9 Refactor log line view to prevent HTML render log lines. e54c33e Merge pull request #371 from knadh/upgrade-frontend b7932e4 Upgrade all JS deps to latest 5796291 Remove unused JS deps f5221ab Upgrade JS sass libs. dea4d18 Upgrade Vue and Buefy UI lib. c593be5 Upgrade Vue + eslint to the latest version 25f5f9b Merge branch 'master' of 931e467 Fixes campaign test messages not including unsub headers. 3cc7ecc Merge pull request #366 from senolcolak/master 30074ec Turkish translations added d6bdcd4 Merge pull request #365 from jorge-vitrubio/patch-1 edd7e70 Merge pull request #364 from jorge-vitrubio/patch-3 0146d6f minor typo fc3e517 minor translation changes ea92e8b Merge branch 'master' of 9f2e708 Wrap lines in <pre> without overflowing the viewport. 0e5cd60 Delete 89481ed Update issue templates

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v1.1.0
    Source code(tar.gz)
    Source code(zip)
    listmonk_1.1.0_checksums.txt(608 bytes)
    listmonk_1.1.0_darwin_amd64.tar.gz(5.37 MB)
    listmonk_1.1.0_freebsd_amd64.tar.gz(5.21 MB)
    listmonk_1.1.0_linux_amd64.tar.gz(5.20 MB)
    listmonk_1.1.0_netbsd_amd64.tar.gz(5.20 MB)
    listmonk_1.1.0_openbsd_amd64.tar.gz(5.21 MB)
    listmonk_1.1.0_windows_amd64.tar.gz(5.26 MB)
  • v1.0.0(May 16, 2021)

    With this release, listmonk hits the v1.0.0 milestone and finally gets out of beta. It is now stable and production ready (has been for a while now). There are production instances that have handled millions of subscribers and hundreds of millions of e-mails. Docker Hub shows 1+ million pulls.

    This release includes a number of bug fixes and some new features such as:

    • Support for markdown content.
    • New i18n languages (Spanish, Polish, Russian, French, Italian, Portugese)
    • 100+ Sprig functions for e-mail templating.
    • End-to-end integration tests with cypress.

    What's next?

    • Analytics and reporting (WIP).
    • Bounce processing.


    95a81d1 Add option on UI to toggle update checks. d695bb3 Prioritise --static-dir on init when no assets are embedded. aa5eff9 Fix incorre check on template deletion. 9fe78d6 Make conditional icons consistent on templates UI ed57ecc Sanitize HTML strings passed to buefy.toast(). cf0c8f3 Merge pull request #355 from seba81/master 194e530 Adding spanish language 20939e8 Merge pull request #354 from knadh/dependabot/npm_and_yarn/frontend/url-parse-1.5.1 6bbde09 Merge pull request #353 from knadh/dependabot/npm_and_yarn/frontend/hosted-git-info-2.8.9 cd1aa81 Merge pull request #352 from knadh/dependabot/npm_and_yarn/frontend/lodash-4.17.21 6a21776 Fix password fields not updating settings UI. 0b0cd5a Bump url-parse from 1.4.7 to 1.5.1 in /frontend a06f1ae Bump hosted-git-info from 2.8.8 to 2.8.9 in /frontend 02b92b5 Bump lodash from 4.17.19 to 4.17.21 in /frontend 65d25fc Improve campaign content format conversion. 49c747d Allow HTML and additional syntax in the Markdown parser. f08254d Merge pull request #350 from alerque/config-handling 09c56da Document tidbits about listening addresses for non-sysadmin types 26a0238 Bind to ‘localhost’ instead of ‘’ by default 6c40e05 Use ‘localhost’ as default name for database server 708ec66 Don't indent TOML keys deeper than their sections 68b80d0 Merge pull request #334 from inpos/master 6ada0aa Fix typo a401b1c Merge pull request #331 from inpos/master c750538 better translation option 60220c7 Merge pull request #330 from inpos/master f6339c7 Update ru.json 5868db0 Sort i18n language list on the settings UI 1c8d272 Add Russian translation by @inpos. Closes #329. 3782413 Refactor campaign preview to use dummy campaign and subscriber. fe61e89 Add hidden nonce (honeypot) field to filter bot autofills on subs page 97d297e Normalize i18n files 9a4f1a0 Merge pull request #327 from brunowego/patch-1 f346f0f chore(dockerfile): not are using multi-stage build 33450f8 Merge branch 'master' of c479a90 Add support for loading external i18n language files. cf5cd95 Merge pull request #324 from knadh/dependabot/npm_and_yarn/frontend/ssri-6.0.2 2bbe38f Bump ssri from 6.0.1 to 6.0.2 in /frontend 4ddaba8 Merge branch 'master' of ad0a0e0 Add preconfirm_subscriptions=true/falsenew subs API. c6a4d43 Merge pull request #321 from marcinkunert/patch-1 f9a2eb8 Finished Polish (pl) translations 777a898 Polish translations 708d0e0 Fix re-submission of public form e-mails not registering 07d8be5 Merge pull request #317 from FelixDz/patch-1 ca19c59 Merge branch 'master' into patch-1 12f9ad4 Create fr.json 620271b Normalize and merge missing keys into all i18n files bf6d471 Add script to merge and normalize i18n files 1e59d53 Add markdown support to campaign content. 4581e47 Merge pull request #313 from tamalsaha/sprigv3 40aaa26 Use c358281 Merge branch 'master' of 8a9b3ef Fix indentation of docker-compose file a266027 Build static Go binary b060c75 Bundle sprig template functions f8f074c Merge pull request #312 from tamalsaha/fmt3 178ee28 Merge pull request #311 from tamalsaha/fmt bc8b4d0 Merge pull request #309 from tamalsaha/sprig 97f8c01 Fix indentation of docker-compose file 96f63d0 Build static Go binary 4485460 Bundle sprig template functions 570a81f WIP: Add tests 039feef Merge pull request #307 from knadh/dependabot/npm_and_yarn/frontend/y18n-4.0.1 e7e36a0 Merge pull request #306 from kousikmitra/fix/campaign-field-names 35b1d01 Fix template box label name ca403d5 Bump y18n from 4.0.0 to 4.0.1 in /frontend 6d61c52 Fix placeholder attribute typo 6dbcfee Merge pull request #298 from mr-karan/master d519a29 Merge pull request #297 from spezifisch/german-translation-updates 51d218a fix: rename Github Token secret variable 531d768 add german translations for missing keys in public.*, fix typos faf45d4 Merge pull request #296 from mr-karan/master df34e57 fix: remove deprecated syntax in goreleaser c6b8565 chore: release via github actions 207f516 Merge pull request #294 from joicemjoseph/patch/ml-word-corrections 4d681f0 fix: typo corrections to malayalam localization 2579d7c Merge pull request #291 from knadh/dependabot/npm_and_yarn/frontend/elliptic-6.5.4 1ac0e65 Bump elliptic from 6.5.3 to 6.5.4 in /frontend e8ad7a9 Fix subscriber attribs update API. f8e555d Fix incorrect ID handling in update handlers 93a710c Merge pull request #284 from RustyDust/master 8a6ed2a Fix incorrect week day name logic in translation 860953e Fix wrong list links in subscribers overview 267dd52 Merge pull request #281 from knadh/dependabot/npm_and_yarn/frontend/prismjs-1.23.0 f268dc6 Bump prismjs from 1.20.0 to 1.23.0 in /frontend d662272 Merge pull request #276 from herzkerl/patch-1 31ce55a Including an EXPOSE instruction in the Dockerfile 8779c49 Merge pull request #274 from enniosousa/master 5777738 Merge pull request #273 from TomBoss/master c2d7e10 Create pt-BR.json 82f033b corr. template 77a6110 Merge pull request #272 from TomBoss/master 2b8b10c Add Italian i18n da7975f corr. b4fea57 Merge pull request #1 from knadh/master 99ff64b Merge pull request #271 from TomBoss/master 97b78aa Fix incorrect 'get subscriber' calls 50549f3 Adding Safe templating function for keeping HTML comment

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v1.0.0
    Source code(tar.gz)
    Source code(zip)
    listmonk_1.0.0_checksums.txt(608 bytes)
    listmonk_1.0.0_darwin_amd64.tar.gz(5.32 MB)
    listmonk_1.0.0_freebsd_amd64.tar.gz(5.17 MB)
    listmonk_1.0.0_linux_amd64.tar.gz(5.16 MB)
    listmonk_1.0.0_netbsd_amd64.tar.gz(5.16 MB)
    listmonk_1.0.0_openbsd_amd64.tar.gz(5.17 MB)
    listmonk_1.0.0_windows_amd64.tar.gz(5.22 MB)
  • v0.9.0-beta(Feb 13, 2021)

    What is new?

    This version includes several bug fixes and improvements including some major new features.

    • Multilingual (i18n) support with 4 bundled languages: Malayalam by @joicemjoseph, German by @m42e , Portuguese by @diogotcorreia, and French by @TomBoss.
    • Query/filter subscriber CSV bulk export.
    • Public subscription form (/subscription/form).
    • Alternate plain text content for HTML e-mails.
    • Rolling / sliding window rate limiting for fine grained control on the speed of outgoing messages.


    e90fb1d Format i18n/fr JSON file a54d967 Merge pull request #267 from TomBoss/master 8e78b64 Allow editing of unsubscribed lists on the UI 2f6bd05 Fix the optin-in, form re-subscribe behaviour. 42a31e4 French i18n 2f05d4e Fix broken opt-in campaign template bc5cc53 Fix broken reload on clicking the restart button on UI b1696c0 Tidy go.mod b950d2f Refactor fetching of server config and settings. b6dcf2c Merge branch 'i18n' ee46b3d Fix blank UI on forms pages when there are no public lists c90d42a Fix widget padding on the dashboard UI c7500f9 Fix campaign update email title i18n 28b616a Merge pull request #262 from diogotcorreia/i18n-pt 9c0fd24 Merge pull request #261 from mr-karan/goreleaser-fix c63f9c6 chore: Pass the binary path correctly to make f1095aa Remove stray dev env reference in go.mod (shameful!) be31141 Add Portuguese translations d737e5d Fix from email in i18n language 2235d30 Add a new public page for end users to subscribe to public lists. a7b72a6 Fix broken i18n language keys dd0c124 Stop throwing "exists" error on public forms 62bce69 Remove "normalization" of non-Latin characters in tags bb1a5bb Fix contenType event not firing on non-Quill editor mode 27d9eab Merge branch 'plaintext' into i18n 68afd61 Add support for alternate plaintext body for e-mails. a226e49 Fix incorrect language weekday keys 535b505 Add autofocus on the first field in SMTP/Messenger settings UI 68808d0 Merge pull request #260 from m42e/patch-1 69a6b89 Updated German translation 00f68a3 Merge pull request #258 from joicemjoseph/feat/l10n-malayalam 7d3cbde Merge branch 'i18n' of into i18n b420c31 Log test message error ade6ecd localized newly added strings 7359e0a Merge pull request #253 from joicemjoseph/feat/l10n-malayalam cc81369 finished Malayalam localization ccfada9 Merge pull request #255 from m42e/l18n/german 101e92c Merge pull request #256 from joeirimpan/fix/ticker 83613dc Typo fixes on u18n/en language 8867f77 fix: Stop tickers fcc068c Add missing translations and fix broken ones on the UI 4bfdda9 Load a default (en) language underneath the selected language. dc0465b Refactor global instances of $api and $utils to be mixins. 5ecc427 German translation afef994 Fix incorrect make command 05928d5 Fix default campaign template not being setup on first install. 0add1c4 Fix incorrect label on skip-TLS setting on UI 0272617 Add support for rate limiting messages with a sliding window. ee4fb71 Refactor i18n name and fix the L() function in public HTML templates 4cd5e6e Refactor and remove placeholder i18n func 810607e Fix incorrect i18n keys in message strings ec1c4f3 Add subscriber export feature 6f2f361 Merge pull request #252 from mr-karan/master 869a55c feat: Add shell script for demo setup 3498a72 WIP: Add i18n support dae47fb Merge pull request #246 from knadh/dependabot/npm_and_yarn/frontend/axios-0.21.1 3975ccc Bump axios from 0.19.2 to 0.21.1 in /frontend 7dace84 Merge branch 'master' of 8bc9bbc Merge pull request #228 from knadh/dependabot/npm_and_yarn/frontend/highlight.js-9.18.5 c8fc91e Bump highlight.js from 9.18.1 to 9.18.5 in /frontend 62182ab Refactor get-lists query for speed a22b274 Merge branch 'master' of ce108c8 Fix broken 'send campaign' shortcut on the Lists UI d9ab365 Merge pull request #226 from mr-karan/fix/db-config ad8f290 feat: Set default values for DB connection parameters c60cc35 Remove alpha warning

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.9.0-beta
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.9.0-beta_checksums.txt(638 bytes)
    listmonk_0.9.0-beta_darwin_amd64.tar.gz(4.84 MB)
    listmonk_0.9.0-beta_freebsd_amd64.tar.gz(4.67 MB)
    listmonk_0.9.0-beta_linux_amd64.tar.gz(4.67 MB)
    listmonk_0.9.0-beta_netbsd_amd64.tar.gz(4.66 MB)
    listmonk_0.9.0-beta_openbsd_amd64.tar.gz(4.66 MB)
    listmonk_0.9.0-beta_windows_amd64.tar.gz(4.69 MB)
  • v0.8.0-beta(Nov 10, 2020)

    This release introduces the first beta version and marks an end to the alpha releases. It also introduces support for Messengers, web services that can be added to listmonk to run not just e-mail campaigns, but any sort of message campaigns such as SMS, and FCM notifications.



    cde0b4b Add a DB setup check on boot 7a9d11d Fix escaping {{ TrackLink }} in WYSIWYG editor UI 1e8b533 Fix echo's URI routing race condition that caused random 404s. 684c64c Fix SQL ORDER BY compatibility issue in Postgres 12/13. 1aecd6f Add serverside sort to tables. a0b36bb Log subscriber UUID in message send errors a1aeba2 Fix invalid link click registrations 7cecbbb Register missing settings/logs URL in the backend 966954d Refactor log view UI into a component. b054ed5 Fix inconsistent quotes in Vue config e9bf47b Fix --version string and duplicate printing aee1bfd Add (Open/Net/Free)BSD to cross-platform release builds. cfe66bb Fix and refactor Makefile and .goreleaser build commands. 2e361c7 Add v0.8.0 DB migrations. f6511b6 Update JS dep (security): node-forge 1b27947 Make individual subscriber tracking optional. 50e488f Fix 'Send test' not reflecting campaign body on first page load 13aac1a Update smtppool lib adding support for Unicode in e-mail IDs 669cb09 Merge pull request #205 from knadh/fix-email-validation 86c6189 fix: use mail.ParseAddress to validate email instead of custom regex 8dbe30c Add new 'Logs' page to the UI to view stdout logs f81d75a Allow deleting of all campaigns irrespective of status 409b259 Fix settings UI copying SMTP values on 'new' f667935 Fix empty password save behaviour on settings. 6cf43ea Add generic HTTP postback Messenger support. be9fbcd Merge pull request #200 from knadh/fix-incorrect-csv-example 03338d5 Merge pull request #199 from knadh/feat-inbuilt-dev-server 2109ee1 Merge pull request #198 from knadh/fix-injected-version 025d54b fix: incorrect csv import example on frontend 6c234f1 fix: use inbuilt frontend dev server to proxy API 584c3bd fix: incorrect git tag being injected as version 23d479e Add badge fd05f8d Merge pull request #190 from rwilhelm/patch-1 d6279ed Update Settings.vue 288164e Remove 'required' from upload field that fails to recognize drag-drop d219f65 Fix missing status column in import that affects auto-migrated installations. 26390e9 Merge branch 'master' of 216c573 Merge pull request #184 from pra85/patch-1 11b0bba Typo in README eaba083 Merge pull request #182 from scmmishra/sidebar-toggle-fix abe8c59 fix: update toggle on update:active ed0d9ee chore: remove stray whitesapce 9147a92 Merge pull request #181 from scmmishra/fix-sidebar 3b141bb style: remove stray tab indentation 427fcf7 fix: inconsistent active link on sidebar navigation 8fe601a Add pagination to lists 1ef1c5a Fix incorrect default values and server response in list creation UI

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.8.0-beta
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.8.0-beta_checksums.txt(638 bytes)
    listmonk_0.8.0-beta_darwin_amd64.tar.gz(5.33 MB)
    listmonk_0.8.0-beta_freebsd_amd64.tar.gz(5.12 MB)
    listmonk_0.8.0-beta_linux_amd64.tar.gz(5.11 MB)
    listmonk_0.8.0-beta_netbsd_amd64.tar.gz(5.11 MB)
    listmonk_0.8.0-beta_openbsd_amd64.tar.gz(5.11 MB)
    listmonk_0.8.0-beta_windows_amd64.tar.gz(5.08 MB)
  • v0.7.0-alpha(Aug 9, 2020)

    This is a major breaking release with a completely rewritten frontend and numerous fixes and improvements. Some of the updates:

    • New frontend and UI. Snappier and responsive.
    • Bulk of the configuration has moved from the TOML file to a new settings UI.
    • Built-in BasicAuth for admin dashboard. The Nginx auth proxy is no longer necessary.
    • Fullscreen richtext editor with a new syntax-highlighted HTML editor.
    • Support for List-Unsubscribe headers.
    • Automatic update check and notification on the dashboard
    • Better controls on the bulk importer.

    IMPORTANT: BasicAuth Admin authentication is now configurable in config.toml / environment variables. The API endpoints also require authentication. The older Nginx authentication is unnecessary and should be removed. To continue using the old setup (not recommended), leave the admin username and password variables empty.


    The configuration file now only has the DB config and a couple other app variables.


    • Download the latest binary.
    • Backup the old config file, generate a new config file with ./listmonk --new-config and add the new DB configuration.
    • Run ./listmonk --upgrade to upgrade the DB schema and start ./listmonk
    • Go to the "Settings" UI on the dashboard and replicate the settings from the old config file. Imporant: Bulk of the config has moved to the settings UI and should be removed from config.toml or from the environment variables. Only retain what is in config.toml.sample and remove everything else.


    • Stop the app container using docker-compose stop app
    • Pull the latest version with docker-compose pull. If you are not using :latest tag in your docker-compose.yml then edit the file and set the tag to v0.7.0-alpha.
    • Run the DB migrations with docker-compose run --rm app ./listmonk --upgrade.
    • Recreate the service with docker-compose up -d app db.
    • Go to the "Settings" UI on the dashboard and replicate the settings from the old config file.


    0f055ea Fix build scripts (and static file embed) 8c56407 Add rebranded design elements. d8a60d1 Add automatic update checks. f3e80da Clean up root and move app to cmd directory b822955 Add BasicAuth to admin endpoints. 7ed0755 Fix minor inconsistencies in settings. 16e47dd Load env config before DB initialisation 8979a2a Fix Quill setup to use inline CSS styles instead of classes b54c5d8 Add upgrade file 5fb7c6c Add support for automatic, idempotent DB migrations 494c519 Upgrade JS dependencies (security fixes) 4703d78 Add a fullscreen option to the campaign richtext editor 378e814 Add campaign search UI. ccf1c49 Refactor pagination constants 0db9579 Suffix app name in page titles 5ff5c74 Add custom email headers to SMTP settings UI ec09790 Add support for List-Unsubscribe header. 7ead052 Fixed reset not clearing query on subscriber search UI e4f233e Add missing root_url to settings UI 8c0804b Refactor blacklist to blocklist 2143def Fix loss of caret on image insertion in campaign from popup 13a252a Add missing 'opt-in' campaign feature to the new UI 818da1b Add 'clone template' feature to the templates UI 2587d67 Fix template creation API returning incorrect response d919766 Add 'cancel' icon to campaigns UI 9c8b7ad Fix broken tag clearing on lists and campaign updation 0145aba Add missing tag UI to lists f9e4a50 Fix incorrect handling of non-JSON responses in APIs 76f4fd6 Show countdown on scheduled campaigns UI e2e65b1 Polish UI elements and fix styling issues. 942eb7c Add settings UI and "hot reload" support to the app. d294c95 Merge branch 'refactor-api-resp' 3df889c Refactor global API response handling in axios. 39aa564 Fix missing API response data{} envelope 80ef60d Merge pull request #155 from RaghavSood/hotfix/add-to-lists-by-query 7b62a7f frontend: pass query when changing lists for subscribers 586defe Merge pull request #153 from mr-karan/docker_docs eae88c1 Add Ctrl+Enter search on the subscriber query exp box ab8dbd8 Fix advanced subscriber query exp not propagating to search 06bb719 feat: Add separate config for demo setup, tweak docs 525a510 Merge pull request #147 from RaghavSood/hotfix/vue-filenameHash ceac96b frontend: Enable vue filenameHash c2613d1 Fix ticker leak in campaign manager message push fd044f4 Minor refactor to campaign manager. 3e75559 Fix incorrect WYSIWYG image insertion position 1b346b1 Fix 'cancelled' tag colour b45d49f Fix HTML editor's line bar colour dc40206 Add syntax highlighted HTML code editor 2651820 Fix campaign message rate display 61f8fae Add 'overwrite?' option to bulk import. 79dd916 Make DB pull batch size in campaign manager configurable b45a2a0 Fix incorrect record count in the importer e7da8fa Fix ordering of records on the subscribers page db032d3 Change campaign status to draft on removing schedule 64d4470 Add {{ templating }} support to e-mail subjects 24192a3 Refactor and fix media uploads. 7f9a811 Merge branch 'vue' 217adf1 Add frontend README 412e016 Add missing save icon f2030a1 Fix redirect after new campaign creation 1bcd350 Integrate config.js on the frontend 92cb70f Refactor empty/placeholder states with new component feb5ba0 Add new dashboard (with new metrics) 97583fe Rewrite frontend with Vue+Buevy and ditch React+Ant Design. 75547b6 Refactor subscriber handlers to send opt-in mails on updation. a03c7bd Default to empty list instead of nil in media response 693b939 Fix incorrect wrapping of subscriber handler 3048ab5 Add a check for zero SMTP config 67eb3db Fix incorrect config check in subscriber data wipe ae68bd2 Merge pull request #126 from PhilippSeitz/bugfix/status-on-success f789f06 fix status code on success 7a467a5 Add support for custom e-mail headers per SMTP server

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.7.0-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.7.0-alpha_checksums.txt(321 bytes)
    listmonk_0.7.0-alpha_darwin_amd64.tar.gz(5.29 MB)
    listmonk_0.7.0-alpha_linux_amd64.tar.gz(5.91 MB)
    listmonk_0.7.0-alpha_windows_amd64.tar.gz(5.88 MB)
  • v0.6.2-alpha(May 26, 2020)


    82702ed Remove completed items f06d6b3 Fix optin e-mails on subscriber addition to single option lists bfe31b7 Fix incorrect param read bug in list deletion handler 3dcff5d Remove redundant log import c9fc83f Fix comments

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.6.2-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.6.2-alpha_checksums.txt(321 bytes)
    listmonk_0.6.2-alpha_darwin_amd64.tar.gz(21.21 MB)
    listmonk_0.6.2-alpha_linux_amd64.tar.gz(41.51 MB)
    listmonk_0.6.2-alpha_windows_amd64.tar.gz(41.29 MB)
  • v0.6.1-alpha(May 17, 2020)

    Breaking changes: This version replaces the old rudimentary SMTP pooling lib with a new one that supports retries, idle timeouts, and graceful fails. This introduces breaking changes in the form of new fields under SMTP configuration: idle_timeout, wait_timeout, max_msg_retries, tls_enabled, tls_skip_verify.


    18329ff Add TLS to SMTP config

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.6.1-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.6.1-alpha_checksums.txt(321 bytes)
    listmonk_0.6.1-alpha_darwin_amd64.tar.gz(43.22 MB)
    listmonk_0.6.1-alpha_linux_amd64.tar.gz(41.51 MB)
    listmonk_0.6.1-alpha_windows_amd64.tar.gz(41.29 MB)
  • v0.6.0-alpha(May 16, 2020)

    :warning: Use release v0.6.1-alpha instead of this version (broken TLS support)


    cb331b9 Merge branch 'master' of abddcb9 Remove redundant SMTP LOGIN auth implementation 69d3e9b Fix JSON error on HTML form subscription 9d3ca35 Integrate new SMTP pool lib 1e61760 Merge pull request #104 from mr-karan/master 23faa9f fix: Remove root URI on frontend e58b2fa Fix typo f498cdd Add support for hosted messages and {{ MessageURL }} tpl tag. 3a9a2ef Refactor get-campaign to accept uuid + get body 6bba55f Remove 'campaignDone?' check that incorrectly ignored queued messages in a finishing campaign. 0abc1ae Merge pull request #86 from thejaswinipathi/patch-1 c93ba78 Changed on PR comment 56122c0 Merge pull request #80 from jaredfolkins/master 11c7c60 enhc: add plain text email body along with HTML, add option in config.toml

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.6.0-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.6.0-alpha_checksums.txt(321 bytes)
    listmonk_0.6.0-alpha_darwin_amd64.tar.gz(43.22 MB)
    listmonk_0.6.0-alpha_linux_amd64.tar.gz(41.51 MB)
    listmonk_0.6.0-alpha_windows_amd64.tar.gz(41.29 MB)
  • v0.5.2-alpha(Apr 2, 2020)


    b8d9ab1 Merge branch 'master' of 894ede5 Add support for message throughput rate limiting 55d8185 Merge pull request #78 from bumi/patch-1 8fbbcd3 Add note about Heroku deploy button

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.5.2-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.5.2-alpha_checksums.txt(321 bytes)
    listmonk_0.5.2-alpha_darwin_amd64.tar.gz(9.97 MB)
    listmonk_0.5.2-alpha_linux_amd64.tar.gz(9.55 MB)
    listmonk_0.5.2-alpha_windows_amd64.tar.gz(9.50 MB)
  • v0.5.1-alpha(Apr 1, 2020)


    21ffe5f Clean up [upload] config doc 9dcd716 Add support for SMTP 'LOGIN' auth 71803ab Add support for loading custom static files with --static-dir bbe239b Added link to Docker env configuration wiki faf8a7a Add fix for BOM in CSV importers

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.5.1-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.5.1-alpha_checksums.txt(321 bytes)
    listmonk_0.5.1-alpha_darwin_amd64.tar.gz(9.97 MB)
    listmonk_0.5.1-alpha_linux_amd64.tar.gz(9.55 MB)
    listmonk_0.5.1-alpha_windows_amd64.tar.gz(9.49 MB)
  • v0.5.0-alpha(Mar 8, 2020)

    This release has significant changes including several important bug fixes.

    listmonk now supports public forms that can be used on public webpages to allow users to signup to mailing lists. This can be found under Lists > Forms.


    ad9ee75 Update build script to reflect new static paths 83d888a Update and cleanup deps 901c456 Fix issues with responsive UI on the campaign page 8771dc2 Refactor init functions for clearer dependency visibility 07856d3 Fix bug in e-mail scheduling 68c4ccd Fix campaign UI to update start/schedule button automatically ba87801 Fix template preview sending invalid view requests ca032c8 Refactor manager.CampaignMessage's exposed fields a0d9a47 Fix incorrect send_at time in installer's sample campaign 442dec9 Fix broken subscriber data export 892d5d2 Remove 'govalidator' package dependecy d4aea0a Add support for pushing non-campaign message with workers. 5f6a4af Cleanup unnecessary pointers ac2145d Fix default template path in installer 40ae9cd Minor formatting fixes 709668d Move static assets to 'static' dir 9005bb6 Move internal packages to 'internal' dir 8853809 Refactor and cleanup initialization. 83b49df Add missing error logs 0a2d2d6 Refactor forms UI 276942a Replace outdated UUID lib 4faffe0 Refactor template name in public pages c08ca14 Add subscription forms b205761 Update feature list

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.5.0-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.5.0-alpha_checksums.txt(321 bytes)
    listmonk_0.5.0-alpha_darwin_amd64.tar.gz(10.01 MB)
    listmonk_0.5.0-alpha_linux_amd64.tar.gz(9.59 MB)
    listmonk_0.5.0-alpha_windows_amd64.tar.gz(9.55 MB)
  • v0.4.0-alpha(Feb 9, 2020)

    This release introduces breaking changes. It adds support for double-optin lists, subscriptions, and campaigns.

    listmonk1 listmonk3

    Uprading from the previous version.

    • The template function {{ .UnsubscribeURL }} loses the period and is now {{ UnsubscribeURL }}. All templates need to be edited to reflect this change.

    Apply the changes to DB tables by running the following queries.

    DROP TYPE IF EXISTS list_optin CASCADE; CREATE TYPE list_optin AS ENUM ('single', 'double');
    DROP TYPE IF EXISTS campaign_type CASCADE; CREATE TYPE campaign_type AS ENUM ('regular', 'optin');
    ALTER TABLE lists ADD COLUMN optin list_optin NOT NULL DEFAULT 'single';
    ALTER TABLE campaigns ADD COLUMN type campaign_type DEFAULT 'regular';


    62aa31b Refactor {{ UnsubURL }} into a global function (breaking change) 2ee2e68 Inject version during build into the frontend f039f35 Link list name to subscribers page on lists UI afdf053 Add 'send opt-in mail' link to subscriber modal UI 6be3352 Refactor/merge optin-list fetch queries 6cb2cd7 Tweak default list and subscriber entries in install 8616aa8 Remove status from example on the import UI ab8bac2 Fix title bug in list modal UI 022b35c Add support for sending 'opt-in' campaigns. 9a890c7 Add button style to default template af14fff Refactor campaign content type references ec22170 Fix list ID parsing in campaign UI a2d21a8 Refactor opt-in subscriber selection queries ea302d1 Use default template if there isn't one in campaign creation 871893a Add double opt-in support. bdd42b6 Refactor notificatin data structure e9685b2 Refactor HTML views with new data structures f8a2044 Add default values to sample config URLs f71493e Add PNG logo for e-mails 4abcb28 Refactor template functions.

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.4.0-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.4.0-alpha_checksums.txt(321 bytes)
    listmonk_0.4.0-alpha_darwin_amd64.tar.gz(9.92 MB)
    listmonk_0.4.0-alpha_linux_amd64.tar.gz(9.51 MB)
    listmonk_0.4.0-alpha_windows_amd64.tar.gz(9.45 MB)
  • v0.3.3-alpha(Feb 6, 2020)

  • v0.3.2-alpha(Feb 5, 2020)

  • v0.3.1-alpha(Jan 19, 2020)


    1064f1e Merge branch 'master' of 6681f18 Fix 'send_at' option on the UI and bug in starting scheduled campaigns e230bac Merge pull request #51 from josejibin/fix/per-page-logic f687813 Fix: perPage logic in getPagination 3cba2fe Amend feature text 32a543b Fix incorrect campaign API response when there are no campaigns 6747a95 Fix unclosed DB transactions in subscriber search 6b6dc59 Add max idle/open params to DB connect 0d8abf9 Fix subscriber export button 427dd93 Add --yes flag to skip prompts 1dc26e2 Fix logo (SVG) font by changing text to path c7fc1aa Validate the status field in create subscriber API

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.3.1-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.3.1-alpha_checksums.txt(321 bytes)
    listmonk_0.3.1-alpha_darwin_amd64.tar.gz(9.89 MB)
    listmonk_0.3.1-alpha_linux_amd64.tar.gz(9.48 MB)
    listmonk_0.3.1-alpha_windows_amd64.tar.gz(9.42 MB)
  • v0.3.0-alpha(Oct 31, 2019)

    Breaking changes

    The media file upload mechanism has changed in this release with pluggable interfaces, and bundled support for filesystem and S3. There are new upload* sections in the TOML config that control this behaviour.


    ccd354d Merge pull request #31 from mr-karan/s3 e5c3196 feat: Add blobstore package 7ee7116 Merge pull request #29 from rhnvrm/master 712ad2d chore: minor refactors based on static checks 2c18d63 Merge pull request #24 from shailysangwan/master d13c335 update instructions for local installation ff40601 Merge pull request #18 from mr-karan/kubernetes 65ef23b feat: read config from env

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.3.0-alpha
    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.3.0-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.3.0-alpha_checksums.txt(321 bytes)
    listmonk_0.3.0-alpha_darwin_amd64.tar.gz(9.90 MB)
    listmonk_0.3.0-alpha_linux_amd64.tar.gz(9.45 MB)
    listmonk_0.3.0-alpha_windows_amd64.tar.gz(9.40 MB)
  • v0.2.2-alpha(Sep 10, 2019)


    d8d7f88 Merge pull request #14 from knadh/feat-responsive 3e5a646 fix: responsive layour fixes for table, modal and form fields a7034bb WIP: responsive design 9587b70 Merge pull request #16 from rhnvrm/patch-2 d5a47de fix: buildString having incorrect TZ data 08aa05c Fix incorrect version string in build

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.2.2-alpha
    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.2.2-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.2.2-alpha_checksums.txt(321 bytes)
    listmonk_0.2.2-alpha_darwin_amd64.tar.gz(9.84 MB)
    listmonk_0.2.2-alpha_linux_amd64.tar.gz(9.38 MB)
    listmonk_0.2.2-alpha_windows_amd64.tar.gz(9.33 MB)
  • v0.2.0-alpha(Jul 21, 2019)

    This release has breaking changes. If you have an older version running, there a couple manual patches to apply.

    • Unsubscription URIs have changed from /unsubscribe to /subscription/*. Production Nginx config needs to be amended to whitelist the new URI.
    • There is a new [privacy] section in the config. This can be copied from the sample config.

    New privacy features (aimed at GDPR compliance)

    • Allow subscribers to export all data on them.
    • Allow subscribers to wipe all their data from the system. (The configuration is in the [privacy] section in the config file).



    b63b31e Merge branch 'privacy' 3cd8b86 Check subscriber existence by UUID on public pages 3be5b27 Fix error message 31b9690 Remove orphan func 9e34e7d Fix default template rendering in Gmail with CSS inlining a060d94 Move UUID validation from multiple places into a middleware func 3fddd78 Refactor "unsubscribe from all" (self-blacklist) behaviour. 794cb3d Merge branch 'master' of 3b79028 Add data privacy export / wipe features (aimed at GDPR compliance). d390bc9 Add helper to make mail attachment headers ee899f4 Merge pull request #12 from mr-karan/readme 93dd4f0 fix: docker-compose command 81fe874 Refactor subscriber delete query to support UUIDs 7d9758c Refactor "error" view to a generic "message" 81d3046 Refactor Messenger/Emailer to accept attachments 533caf8 Fix from e-mail ID in dummy campaign on install 0cb1442 Fix typo in install message 180f05a Merge branch 'master' of 192214c Add .gitattributes for github-linguist 1ff38b5 Merge pull request #2 from mr-karan/docs 0a50cd6 feat: Add docker image link to README

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.2.0-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.2.0-alpha_checksums.txt(321 bytes)
    listmonk_0.2.0-alpha_darwin_amd64.tar.gz(9.84 MB)
    listmonk_0.2.0-alpha_linux_amd64.tar.gz(9.38 MB)
    listmonk_0.2.0-alpha_windows_amd64.tar.gz(9.33 MB)
  • v0.1.2-alpha(Jul 12, 2019)

  • v0.1.1-alpha(Jul 12, 2019)


    3d3af8c Merge pull request #1 from mr-karan/docker 1534c46 fix: Path for windows build in goreleaser 6409c9a Add missing help link to subscriber modal ec46fb4 Merge branch 'master' into docker 728d1c2 feat: Add docker demo setup 51ec374 Add install readme file f457605 Remove unimplemented features from nav 349562f Add install readme file 3ed39a4 feat: Add docker instructions bdc837d feat: Create docker release 714a040 fix: Add listmonk binary to Gitignore e64d723 Typo and language fix in README

    Docker images

    • docker pull listmonk/listmonk:latest
    • docker pull listmonk/listmonk:v0.1.1-alpha
    Source code(tar.gz)
    Source code(zip)
    listmonk_0.1.1-alpha_checksums.txt(321 bytes)
    listmonk_0.1.1-alpha_darwin_amd64.tar.gz(9.82 MB)
    listmonk_0.1.1-alpha_linux_amd64.tar.gz(9.36 MB)
    listmonk_0.1.1-alpha_windows_amd64.tar.gz(9.31 MB)
  • v0.1.0-alpha(Jul 9, 2019)


    9fd9748 Update README with image and links e89a54b Refactor and add new build routines 0e116a2 Update dependencies 61c2a72 Upgrade to stuffbin v1.0.0 be20014 Add doc links to UI bcf35bf Add basic sanitisation to subscriber query expressions 69e5e35 Refactor default install records and add test campaign 1ca8c2f Fix default template location in install 348e65f Fix lists not showing on the subscriber form 64043f0 Add run-frontend to Makefile 1caa63b Rename 'build-dist' to 'dist' in Makefile 089522a Replace config struct tags 6531750 Remove hardcoded binary name from unstuff routine fe4f39f Replace viper with koanf fe91021 Remove stub user features and handlers. c952b7a Refactor README for publishing 95038d3 Refactor Makefile 4f9bb26 Merge branch 'fix-frontend-dir' into 'develop' 11ca4be chore: fix frontend directory structure 0911742 feat: add config to enable/disable postgres ssl mode 08b9d15 fix: update echo framewor to fix commit hash mismatch 3a6f15e Update list date on import before notif and run notif as a goroutine 8701cb4 Fix import and campaign page and integrate new paginated lists API 3cf075e Add deps to dev docs 7a64aca Removed redundant consts and goal 9729395 Add dev README d9585a7 Add pagination to the lists page b467c9b Fix incorrect sort order in stats SQL queries b078c00 Fix missing lists fetch in query-campaigns 420c661 Remove duplicate TODO b060259 Add TODO 3bf405f Refactor and fix importer state bugs cfec13c Optimize campaign and subscriber queries 93c9520 Refactor campaigns query into two: 'query' and 'get' baa6184 Add 'send campaign' shortcut link to lists view 3de7b3f Fix incorrect maxlength param values 6b29c0f Remove subscriber list link from list name 178604d Refactor campaigns view 9655ce6 Refactor subscriber data src to check for errors e43c9b8 Add target 'run' to Makefile 5acde50 Merge branch 'develop' of into develop 917cb8a Reformat all JS to 'prettier' style 5b42e86 Fix incorrect passing of error in HTTP response 7d65672 Merge pull request #1 from joeirimpan/develop 4ef5a3a chore: Go modules and add readme 9fc23a8 Fix text in global footer ac2234a Refactored subscriber add/edit from from modal to modal + standalone view ab1a6bb Add ID and UUID info to list, subscriber, and campaign views e7c75b3 Fix the accidentally deleted Lists field in Campaign (!) 7eeb813 Add embedding of static assets for standalone dist binary 46f4a0e Remove redundant error wrapper 08bc6bc Refactor SQL schema and add missing indexes 01b43b9 Refactor get-campaigns query 1fd3a3b Refactor TrackLink template function to accept backticks ffd43ce Rename 'runner.Runner' to 'manager.Manager' 72cf9e2 Fix state setting on subscriber modal unmount b461f51 Change default name/email search query to case insensitive regex instead of LIKE f686606 Fix broken close function in clone campaign modal f54170d Add view and click counts to campaign API response and UI a4135be Doc and typo fix on the import page 099ca11 Doc fix in advanced query placeholder f2bbf86 Display subscription status in the subscribers table 11f8e62 Add subscriber count to the subscriber page heading 5f0e3ac Add bulk subscriber querying, segmentation, and management features 755d3d2 Refactor and add subscriber search and segmentation UI 3867062 Fix empty raw query in subscriber query response b7d5a4d Add no-cache header to pixel tracker image 09b09d1 Remove alt tag from tracking pixel image 2a161a5 Redesign the 'broken' warning page 5662fac Refactor redirection on campaign creation ccd966a Refactor campaign 'save' button and add 'start' button to campaign page ca19b50 Fix content tab redirection on campaign creation c24c19b Add admin e-mail notifications. 8a0a7a1 Add support for importing unzipped CSV 8e10bf3 Fix file extension check 5ff0e44 Make the default template the default selection on the campaign form 1673cba Fix campaign send rate calculation cf5df3e Fix counting unsubbed users in campaign stats counts c132af2 Add automatic unsub of users blacklisted from admin 4cd66d1 Fix duplicates in multi-list campaigns with overlapping subscribers. 8a952c1 Add regexp template tag validation a7614eb Change sample error value to a sane number a7954df Add missing error key to sample config cbba955 Remove test script 1a39ed1 Add support for campaign error tracking and auto-pause. 0577367 Fix default values in the campaign dropdown a4e8291 Log message push errors 6d96986 Add loadng spinner to dashboard 0871752 Fix incorrect campaign counts on dashboard b333d05 Fix merge conflicts dce6db7 Untrack yarn.lock e3a6ba3 Untrack yarn.lock 9511a78 Add welcome dashboard c3d1813 Add an error page for app config (window.CONFIG) not being loaded 87873d0 Make subscriber fetching for previews random 6a1ee77 Fixed message rendering in test messages f334022 Make duration stats visibility conditional ec7d398 Rearrange and move prominent action icons to the front d09a16d Add form blocking + spinner to the upload form f75f1cd Fix hardcoded max_conns SMTP config 0f56a5c Fix campaign stats cell width 44442b2 Switch UI subscriber addition to a new insert-only query ec02921 Fix SVG logo (font to path) 6761d1a Add missing placement param to all antd notification() calls f2c09e7 Refactor the import process 31e1800 WIP: Add dashboard stats queries and endpoint 9aa4130 Update logo a82a64a Fix broken TrackLink tag correction ac8c7ed Add custom theme overhaul 5d099ab Make image inserts use full root URL de4e848 Sanitize config paths ad8787c Load global configuration into the frontend as a JS dict using a