Releases: knadh/listmonk
v3.0.0
v3.0.0 is a major release with a significant number of improvements and fixes.
What's new?
- The concurrent core or the "engine" is completely re-written. Campaign pausing and cancellations are now near-instant and lossless. Concurrent campaign sending performance has improved significantly. The
sent
count now accounts for every single message rather than an approximation. - Major performance improvements for large databases with the new
Settings -> Performance -> Cache slow queries
option. On installations with millions of subscribers, enabling this speeds up database queries (retrieving lists, subscribers etc.) by several orders of magnitude. On a production database with ~14 million subscribers, the speed up on the lists page was 2000x, from ~20s to ~10ms. - New frontend dependency and build system refactor, speeding the admin pages (and the development build process).
- Addressed the root cause of mysterious SMTP sending errors that triggered only in certain SMTP environments.
- New fields for filtering lists, campaigns, subscribers in query APIs.
- Campaign archives now support “slugs” (clean permalinks) for public URLs instead of UUIDs.
- Major refactor and cleanup of documentation.
F9
shortcut key for campaign and template previews.- Many quality-of-life improvements, fixes, and dependency upgrades.
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.
Docker
# 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
Changelog
- f9120d9 Auto-translate one missing i18n key..
- 36e39e5 Auto-translate missing i18n scripts.
- 8939d27 Reformat
sl
i18n language file. - 82894e5 Simplify default e-mail template.
- dc43e9c Configure Markdown parser to not escape double quotes. Closes #1698.
- 3103bbc feat: Add Slovenian localization (#1704)
- d70236c Fix incorrect error message in tx template preview.
- 2841586 Fix sorting in camapaign analytics view counts.
- 6cb9982 Add
.IndividualTracking
to public templates. Closes #1663. - 74ef6f5 Add a 'view' link on the lists page. Closes #1674.
- 7c44eb0 Replace Go easyjson lib.
- f14df89 Update Go deps.
- f0a3cbd Remove redundant SMTP test error toast on the admin UI.
- 45f4ae1 Add performance/query caching docs.
- 9adc5e7 Refactor navigation and styling in docs.
- bb1492b Merge branch 'query-performance'
- 5a3664a Add support for caching slow queries on large databases.
- a5b06a8 fixed railway icon and spelling bug (#1696)
- 9e96649 Update schema.sql - change default bounce settings (#1669)
- 67bc2ce Improve SES bounce processing docs (#1676)
- 98fa3e0 Update templating.md with command to fetch templates from repo (#1677)
- e42ab9c Bump vite from 5.0.10 to 5.0.12 in /frontend (#1680)
- 0935e9c Bump follow-redirects from 1.15.3 to 1.15.4 in /frontend (#1664)
- 4c5df16 Add deploy template for RepoCloud.io (#1662)
- 2f487de Log subscriber id/uuid on failed opt-in message push. Closes #1333.
- 908173c Style the 'fix code' buttn on campaign archive tab.
- d8ca26e Add a 'template reference' docs link next to campaign editor. Closes #1405.
- 9109097 Remove incorrect API def from docs. Closes #1658.
- 7067f05 Update listmonk-simple.service - add optional log file (#1640)
- 8677151 Merge branch 'slug'
- 0d319ad Add 'slug' (permalink) support for campaign archives. Closes #1394.
- 78caa35 fix: add copying campaign object before sending test message (#1659)
- 3335171 Fix (accidentally) broken migration scripts.
- 3711bed Fix clipboard copy prop on template form.
- bd2990f Add F9 shortcut key for toggling campaign and template previews.
- 234fd11 Fix incorrect label on maintenance UI. Closes #1652.
- a93031d Make Makefile accept custom build versions from env for dev builds.
- fa2c840 Rename v2.6.0 migration to v3.0.0, the next major release.
- a6d55d6 Upgrade smtp-pool lib fixing bad conn state issues.
- 8add9d6 Merge branch 'fix-campaign-sent'
- 9a96134 Update installation.md +tut & minor changes (#1647)
- 772476c Add accurate sent count, last sent subscriber tracking on campaigns.
- 414c5c0 Refactor the core concurrent campaign manager logic.
- 0c9dc07 Add a
?v=hash
cache breaker (that changes on restart) to static assets. - a2629c2 Make all ID/UUID labels on the UI onclick -> clipboard copy.
- b946c33 Fix broken chart components.
- 2feb1b0 Make the name part in
from
e-mails optional. Closes #1602. - b2a5e37 Fix incorrect form messages on public re-subscription to double opt-in lists. Closes #1638.
- bce6758 Fix preconfirm option not working on bulk 'select all' subscriber list management. Closes #1646.
- 0d74619 Make providing
name
in subscriber creation optional and assign internally. Closes #1630. - a9a7156 Scroll TinyMCE richtext editor back to caret on dialog close. Closes #1635.
- db17fa1 Restore tab selection on campaign page on reload.
- 49bbf92 Merge branch 'upgrade-frontend'
- ef77a7e Replace c3js with chart.js for major dep size reduction.
- f4b2446 Update configuration.md +logs section (#1641)
- 9bd7511 Update italian translation (#1644)
- af8b420 Refactor and upgrade the frontend vue code to work with vite instead of webpack.
- 51af75c Add subscription status filter to subscriber list query and admin UI.
- 8f12c03 Fix newly created lists not showing up on other pages automatically. Closes #1589.
- 01acd38 Add tag/type/optin filter options to lists and campaigns APIs. Closes #1631.
- c468e7a Upgrade Cypress to latest version.
- 5d63574 Skip non-existent dirs in
--static-dir
mode to use default stuffed dirs. Closes #1599. - aba7111 Fix default non-stuffed frontend dir path.
- dd87a10 Addte listmonk-simple.service (#1622)
- 6a26580 Update general-question.md
- 9a30067 Create da.json (Danish translation) (#1628)
- 80b2537 Bump golang.org/x/crypto from 0.15.0 to 0.17.0 (#1632)
- be62c50 feat: Add
from_email
to postback struct for sending tx postbacks (#1623) - e869f7b Translate to Ukrainian (#1606)
- b6922b0 Suppress 'no campaign' errors on pixel view registration. Closes #1588.
- 95dabe5 Update upgrade.md +binary info (#1613)
- e06d379 Update installation.md +tutorials (#1611)
- 7c99167 Update installation.md +changing port (#1607)
- fa50664 Add i18n Greek translation (#1605)
- 53eb71a Add 404 HTTP handlers to prevent those requests going to BasicAuth endpoints.
- 2ce2a11 feat: docker compose use alpine for postgres (#1603)
- 52ee79b chore: noreferrer for listmonk url in footer (#1601)
- 524be27 Bump tinymce from 5.10.8 to 5.10.9 in /frontend (#1592)
- 75befe5 📝🐛 — Fix /api/subscribers/lists doc (#1594)
- 4577868 chore: remove refs to deprecated io/ioutil (#1593)
- c59825f Fix broken sorting (lists -> subcount, subscribers -> status) in queries. Closes #1076.
- 06b4494 Fix incorrect sanitisation of search queries on list/campaign frontend.
- 82c74cd Bump golang.org/x/image from 0.6.0 to 0.10.0 (#1580)
- 4c8c19e Update configuration.md - update path due to recent install path change (#1581)
- d439ecf Bump axios from 0.27.2 to 1.6.0 in /frontend (#1587)
- ef08495 Make the unsub form on opt-in confirmation e-mail open 'manage' by default. Closes #1515.
- 44d3462 Fix 'confirmed' subscriptions becoming 'unconfirmed' on public form re-signup. Closes #1441.
- 62be5e2 Fix mysteriously broken frontend build by switching eslint parser dep.
- 49ec11c Merge branch 'refactor-docs'
- e8ecdf8 Fix mkdocs links in docs.
- ff135ec Add 'copy code' button to code snippets in docs.
- be4be72 Refactor and clean up API Markdown docs.
- f8a55f8 Fix mkdocs navbar shadow
- 9e3af91 Update fr.json (#1586)
- f720e88 Refactor hr style in mkdocs template.
- b29f565 Fix broken table in campaign doc. Closes #1585.
- 3641f74 Add missing
header
field in campaign creation docs. Closes #1561. - ccceaa6 Bump @babel/traverse from 7.21.3 to 7.23.2 in /frontend (#1563)
- c7882bb Bump tinymce from 5.10.7 to 5.10.8 in /frontend (#1564)
- fd05a6d Update installation.md - add cd listmonk (#1576)
- 06332d5 Update de.json (#1572)
- 1ebd80c Add Hebrew translation. Closes #1517.
- 491fab3 Update i18n language files.
- 764a052 Bump golang.org/x/net from 0.8.0 to 0.17.0 (#1555)
- c911aeb Fix attachments being omitted from postback (#1557)
- 954ed45 Fix incorrect Slovak language code. Closes #1533.
- a61a9d8 Fix preference management logic to avoid unnecessary DB calls.
- 99c71a2 fix: update inlang settings (#1529)
- 82c3c68 Clean root URL of trailing slashes when updating settings.
- 04e571d Fix file fetch in attachments failing for signed URLs. Closes #1499.
- 8f2a08b Fix invalid suffix 'd' in timestring string in s3 expiry config.
- 11f90b2 Fix typo in i18n S3 expiry description.
- 5af6252 Fix make not picking up semver from git archive builds. Fixes #1380.
- 717a636 Add Sprig and other tpl functions to static templates as well. Closes #1527.
- 7019f26 Fix docs for public subscription api (#1522)
- 9423c74 Docker Multi Arch (esp. ARM) builds: Improving Build File (#1451)
- 2b95c88 Add Postmark bounce webhook support (refactor #1385) (#1485)
- e5ac111 Update installation.md - fly.io instructions not working (#1487)
- 34d86fc Update installation.md (#1494)
- 5664e5c fix: replace docker-compose with docker compose (#1490)
- 83c88d7 Escape search query in list search. Closes #1471.
- 16eeb94 added "tutorials" section and other minor edits (#1444)
- e317f2c Modify
sed
flag based on OS. Closes #1474. - 25513b8 go: bump to 1.20 (#1479)
- eefcbc3 Fix hardcoded DB name in 'about' SQL query. Closes #1477.
- 52a7298 Update bounces...
v2.5.1
What's new
- The major new feature in this release is support for arbitrary file attachments. The media "gallery" UI/UX has changed to accept arbitrary file uploads which can be attached to campaigns.
- "Record opt-in IP" option in Settings -> Privacy that optionally records the IP from which a subscriber completes a double opt-in. This is a compliance requirement in certain jurisdictions.
- A new table on the subscriber editing popup that shows subscription details for all lists (including the optional opt-in IP)
- New API
/api/about
that returns generally useful system and installation info. - Better error notification. Async errors that were logged in Settings -> Logs are now streamed to the UI and displayed as toasts.
- New bounce types and support for variable actions per type.
Note: v2.5.0 was the major release, however, v2.5.1
was worth releasing just to have this one tiny UI bug fix that would have otherwise confused annoyed a lot of users.
This version has several minor bug fixes and 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.
Docker
# 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
Changelog
- a6a2b69 Make public subscription API follow the 'enable public' setting.
- 79ff729 Fix broken dummy password warning on SMTP test UI. Closes #1450.
- 32b979e Update subscriber docs and add public subscription API. Closes #1449.
- 2f07435 Update bounces docs (#1445)
- e258ffd Update configuration docs (#1446)
- f3e9b08 Update release on website.
- ea2f93e Fix GH actions write permission.
- 54979c5 ci: add qemu for multi-arch
- 14e2837 ci: Update release.yml (#1440)
- 0562e5d Apply minor fixes to the admin maintenance page template.
- f4f51d1 Add classes to public forms to make them scriptable.
- b1fa289 update documentation for api/tx to include file attachments and multiple recipients (#1436)
- acca61f Fix race conditions in Cypress tests (sigh).
- 1164afa Fix private lists being unsubscribed from public form and re-factor subscription status view in admin.
- eafae46 Fix incorrect unsubscription behaviour in the public 'Manage' flow. Closes #1407.
- 104c4fc Remove non-crossplatform syscalls from
/api/about
. - a1c507b Fix typo in queries.sql (#1432)
- 2215511 Increase the arbitrarily low max-input-length limit. Closes #1416.
- dcb87a3 Removed unused syscall in
/about
API. Closes #1421, closes #1422. - e89b9ff Remove dead media cleanup flag. Closes #1423.
- a440b79 modified mistakes and typos in translation (#1419)
- 2bfbae7 Update Postgres version in doc strings.
- 3865e95 Update untranslated i18n language strings. Auto-translated with GPT 3.5.
- 93db7c4 Fix incorrect Buefy checkbox colour.
- ad80c71 Add new privacy option 'Record opt-in IP' to record IP address of optin confirmation.
- b26950c Add new subscription list table to the subscriber edit UI modal.
- a628519 Mask passwords on the UI accurately with the actual passwords length.
- 0be5901 Fix lists UI queries overriding full lists in selections elsewhere. Closes #1400.
- 534c875 Ignore common on-reload xhr errors in Cypress.
- 7dd7166 Bump word-wrap from 1.2.3 to 1.2.4 in /frontend (#1403)
- 3663a8b feat: add multiarch docker build support (#1344)
- e1c0bf5 Fix unsubbed subscribers not getting re-sub optin confirmation. Closes #1315.
- d69b766 Enable extra system calls in systemd service (#1309)
- 329b645 Add documentation for archive function. Closes #1396. (#1399)
- 1894af1 Bump semver from 5.7.1 to 5.7.2 in /frontend (#1398)
- c581fe2 Add
GET /api/about
that returns useful system info. Closes #1354. - 5b40461 Stop requiring a DELETE call for fresh import after finished imports. Closes #1369.
- 530165f Fix typos in comments (#1368)
- f94c1f3 fix function name in comment (#1374)
- 92a4d99 Update es.json (#1378)
- 5e24ef9 Update it.json (#1379)
- f577522 Update inlang.config.js (#1359)
- e0cda4b Fix
all
pagination. Closes #1356. Closes #1357. - a2da75c Merge branch 'events'
- 0b2da4c Add support for streaming async events via HTTP serverside events.
- 63bc00d Fix issues in the Swagger collection (#1322). Closes #1321.
- d359ad2 Refactor media management.
- 3b9a0f7 Add support for file attachments on campaigns (#1341)
- cb2a579 Update ro.json (#1326)
- cbbbe40 Fix missing fields in Swagger collection. Closes #1317.
- 5a26279 Fix Swagger collection. Closes #1308. Closes #1313 (PR #1314)
- 917696a Refactor
Messenger
interface. - 9ffc912 Refactor media provider.
- be16297 Fix incorrect assignment of subscriber in message struct. Closes #1307.
- e332622 Added remaining endpoints to the Swagger Collection (#1283)
- 39a627d Upgrade koanf lib to fix mapstructure []byte unmarshal bug.
- 9381e08 Link the Swagger pages on the API doc.
- 8c46b75 build: push docker image to ghcr.io (#1237)
- 101459f actions: generate swagger ui for github pages (#1281)
- 81ac627 Add white background to logo in README for dark mode. Closes #1268.
- 5fc28a7 Add support for variable bounce processing actions.
- 13ad9ad Upgrade
koanf
to v2. - 3baf18e Add support for wildcards in the email domain blocklist.
- 98729f6 Refactor email domain blocklist config field in importer package.
- 476d5be Add support for publishing full content in public archive RSS feed body (#1262)
- 146e8e7 Add missing translation message in maintenance page (#1279)
- 0d4c1d1 Fix portuges missing translations (#1278)
- 7db3d7d Improve i18n editor.
- 71a9138 Add missing i18n languages to the editor
- ad53632 Expanded docs about PUT /api/subscribers/:id (#1269)
- b433ef6 Fix broken SES bounce type check.
- a955102 Add functions to notification templates (#1263)
- d1d0922 Fix gh-pages workflow script to run on push to
master
. - ec7a246 Fix link to the docs repo.
- d4fb3a3 Remove obsolete files.
- 5d3c10d Add new README to the
docs
directory. - 684c15a Add static Hugo website and mkdocs documentation to
docs
directory. (#1261) - 152bd37 Fix no opt-in mails when existing subscribers subscriber to new opt-in lists. Closes #1257.
- 5aedc3a Make media upload file extension validation case insensitive. Closes #1256.
- bf72154 Add Swagger collection for APIs (#1253)
- 4821dd7 Update es.json (#1258)
- d87a01f Include CAPTCHA in HTML form generation.
- eb1d4a3 add support for arm binaries (#1249)
New Contributors
- @navanchauhan made their first contribution in #1249
- @alfredosola made their first contribution in #1258
- @rohansh-tty made their first contribution in #1253
- @peix187 made their first contribution in #1278
- @Thunderbottom made their first contribution in #1281
- @uhlhosting made their first contribution in #1326
- @NilsJacobsen made their first contribution in #1359
- @cuishuang made their first contribution in #1374
- @sonologic made their first contribution in #1399
- @runningnoodle made their first contribution in #1309
- @UnmeshSagar made their first contribution in #1419
- @eltociear made their first contribution in #1432
- @winterleitner made their first contribution in #1436
v2.5.0
What's new
- The major new feature in this release is support for arbitrary file attachments. The media "gallery" UI/UX has changed to accept arbitrary file uploads which can be attached to campaigns.
- "Record opt-in IP" option in Settings -> Privacy that optionally records the IP from which a subscriber completes a double opt-in. This is a compliance requirement in certain jurisdictions.
- A new table on the subscriber editing popup that shows subscription details for all lists (including the optional opt-in IP)
- New API
/api/about
that returns generally useful system and installation info. - Better error notification. Async errors that were logged in Settings -> Logs are now streamed to the UI and displayed as toasts.
- New bounce types and support for variable actions per type.
This version has several minor bug fixes and 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.
Docker
# 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
Changelog
- ea2f93e Fix GH actions write permission.
- 54979c5 ci: add qemu for multi-arch
- 14e2837 ci: Update release.yml (#1440)
- 0562e5d Apply minor fixes to the admin maintenance page template.
- f4f51d1 Add classes to public forms to make them scriptable.
- b1fa289 update documentation for api/tx to include file attachments and multiple recipients (#1436)
- acca61f Fix race conditions in Cypress tests (sigh).
- 1164afa Fix private lists being unsubscribed from public form and re-factor subscription status view in admin.
- eafae46 Fix incorrect unsubscription behaviour in the public 'Manage' flow. Closes #1407.
- 104c4fc Remove non-crossplatform syscalls from
/api/about
. - a1c507b Fix typo in queries.sql (#1432)
- 2215511 Increase the arbitrarily low max-input-length limit. Closes #1416.
- dcb87a3 Removed unused syscall in
/about
API. Closes #1421, closes #1422. - e89b9ff Remove dead media cleanup flag. Closes #1423.
- a440b79 modified mistakes and typos in translation (#1419)
- 2bfbae7 Update Postgres version in doc strings.
- 3865e95 Update untranslated i18n language strings. Auto-translated with GPT 3.5.
- 93db7c4 Fix incorrect Buefy checkbox colour.
- ad80c71 Add new privacy option 'Record opt-in IP' to record IP address of optin confirmation.
- b26950c Add new subscription list table to the subscriber edit UI modal.
- a628519 Mask passwords on the UI accurately with the actual passwords length.
- 0be5901 Fix lists UI queries overriding full lists in selections elsewhere. Closes #1400.
- 534c875 Ignore common on-reload xhr errors in Cypress.
- 7dd7166 Bump word-wrap from 1.2.3 to 1.2.4 in /frontend (#1403)
- 3663a8b feat: add multiarch docker build support (#1344)
- e1c0bf5 Fix unsubbed subscribers not getting re-sub optin confirmation. Closes #1315.
- d69b766 Enable extra system calls in systemd service (#1309)
- 329b645 Add documentation for archive function. Closes #1396. (#1399)
- 1894af1 Bump semver from 5.7.1 to 5.7.2 in /frontend (#1398)
- c581fe2 Add
GET /api/about
that returns useful system info. Closes #1354. - 5b40461 Stop requiring a DELETE call for fresh import after finished imports. Closes #1369.
- 530165f Fix typos in comments (#1368)
- f94c1f3 fix function name in comment (#1374)
- 92a4d99 Update es.json (#1378)
- 5e24ef9 Update it.json (#1379)
- f577522 Update inlang.config.js (#1359)
- e0cda4b Fix
all
pagination. Closes #1356. Closes #1357. - a2da75c Merge branch 'events'
- 0b2da4c Add support for streaming async events via HTTP serverside events.
- 63bc00d Fix issues in the Swagger collection (#1322). Closes #1321.
- d359ad2 Refactor media management.
- 3b9a0f7 Add support for file attachments on campaigns (#1341)
- cb2a579 Update ro.json (#1326)
- cbbbe40 Fix missing fields in Swagger collection. Closes #1317.
- 5a26279 Fix Swagger collection. Closes #1308. Closes #1313 (PR #1314)
- 917696a Refactor
Messenger
interface. - 9ffc912 Refactor media provider.
- be16297 Fix incorrect assignment of subscriber in message struct. Closes #1307.
- e332622 Added remaining endpoints to the Swagger Collection (#1283)
- 39a627d Upgrade koanf lib to fix mapstructure []byte unmarshal bug.
- 9381e08 Link the Swagger pages on the API doc.
- 8c46b75 build: push docker image to ghcr.io (#1237)
- 101459f actions: generate swagger ui for github pages (#1281)
- 81ac627 Add white background to logo in README for dark mode. Closes #1268.
- 5fc28a7 Add support for variable bounce processing actions.
- 13ad9ad Upgrade
koanf
to v2. - 3baf18e Add support for wildcards in the email domain blocklist.
- 98729f6 Refactor email domain blocklist config field in importer package.
- 476d5be Add support for publishing full content in public archive RSS feed body (#1262)
- 146e8e7 Add missing translation message in maintenance page (#1279)
- 0d4c1d1 Fix portuges missing translations (#1278)
- 7db3d7d Improve i18n editor.
- 71a9138 Add missing i18n languages to the editor
- ad53632 Expanded docs about PUT /api/subscribers/:id (#1269)
- b433ef6 Fix broken SES bounce type check.
- a955102 Add functions to notification templates (#1263)
- d1d0922 Fix gh-pages workflow script to run on push to
master
. - ec7a246 Fix link to the docs repo.
- d4fb3a3 Remove obsolete files.
- 5d3c10d Add new README to the
docs
directory. - 684c15a Add static Hugo website and mkdocs documentation to
docs
directory. (#1261) - 152bd37 Fix no opt-in mails when existing subscribers subscriber to new opt-in lists. Closes #1257.
- 5aedc3a Make media upload file extension validation case insensitive. Closes #1256.
- bf72154 Add Swagger collection for APIs (#1253)
- 4821dd7 Update es.json (#1258)
- d87a01f Include CAPTCHA in HTML form generation.
- eb1d4a3 add support for arm binaries (#1249)
New Contributors
- @navanchauhan made their first contribution in #1249
- @alfredosola made their first contribution in #1258
- @rohansh-tty made their first contribution in #1253
- @peix187 made their first contribution in #1278
- @Thunderbottom made their first contribution in #1281
- @uhlhosting made their first contribution in #1326
- @NilsJacobsen made their first contribution in #1359
- @cuishuang made their first contribution in #1374
- @sonologic made their first contribution in #1399
- @runningnoodle made their first contribution in #1309
- @UnmeshSagar made their first contribution in #1419
- @eltociear made their first contribution in #1432
- @winterleitner made their first contribution in #1436
v2.4.0
What's new
- hCaptcha integration on public subscription pages. If you use custom static static templates, make sure to incorporate the changes from the repository.
- Support for SVG files in media uploads.
- Support for file attachments in the
/api/tx
transactional API. - Support for multiple subscribers in the
/api/tx
transactional API (subscriber_emails[]
,subscriber_ids[]
).
This version has several minor bug fixes and 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.
Docker
# 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
Changelog
- c668523 upgrade frontend dev deps to support node v17+ (#1247)
- 553a61b Update Go build version in GitHub workflow.
- 1bb9123 Fix Cypress tests (settings security tab, new default tpls).
- 3646e6d Upgrade Go package deps.
- 55f7eca Add support for file attachments in the transactional (tx) API. (#1243)
- 4181d8a Integrate inlang for easy i18n translations (#1189)
- 6cf8234 Add support for SVG files to media. Closes #1217.
- aaf5080 Fix discrepency in SQL query/export queries. Closes #1241.
- 35ddf3c fixed weekday order to fix #1182 (#1227)
- 5020bae fix #1210 French day name (#1226)
- 09fe812 Update hu.json (#1219)
- 8d1f30c correct eslint "no-multiple-empty-lines" (#1179)
- d6fd4ab Fix 'delete' -> 'clear' language on bounces UI. Closes #1072.
- da377d8 Parse campaign UUID in SendGrid webhook. Closes #1177.
- dda7d44 Hide private lists from prefs manage page. Closes #1200.
- 215aae5 Fix public preference manage page's list style.
- 7be73d5 Bump golang.org/x/sys from 0.0.0-20211205182925-97ca703d548d to 0.1.0 (#1212)
- 80592f6 Translate the subject of the email sent with personnal datas (#1193)
- 2c531eb (Public strings only) Add Swedish translation (#1194)
- 2de72ea update french translation (#1190)
- e77635c Update hCaptcha french translation (#1178)
- 3513988 [i18n] Add translation of the term Powered by (#1168)
- 2ed62cb fix russian translate (#1174)
- bfc8a0c Update pl.json (#1165)
- eb9f687 Update pl.json (#1164)
- 274d864 Upgrade smtp-pool lib fixing incorrect nested mail commands.
- 4977b74 Partial update of NL i18n (#1056)
- fd65531 Bump decode-uri-component from 0.2.0 to 0.2.2 in /frontend (#1084)
- b339482 Update Polish language.
- 755344e Add check for SES bounce notif type (#1123)
- 8985e5c Add hCaptcha.com support to public subscription form. (#1152)
- 62d3782 Use
send_at
date for scheduled campaigns in RSS feed. Closes #1149. - 72d22d4 fix: check public URL before presigned URL generation (#1148)
- 66c81c8 Update es.json (#1139)
- 7832248 Fix label/input accessibility on subscription form (#1134)
- 076b7c7 Slovak translation (#1128)
- 3cfbc64 Add support for multiple subscribers in a single transactional message call.
- 5d4f1ea Add optional
params
in DB config to accept arbitrary Postgres params. Closes #1016. - 1f693b8 Add a default public archive template.
- 96d30d6 Update issue templates
- 49f20f3 Fix broken sorting in list query. Closes #1076.
- 4dee2e9 Fix
per_page=all
in API calls in the paginator lib. - 396f85d updated spanish translation (#1119)
- ba46769 updated italian translation (#1118)
- 8a2d053 Fix misleading German translation (#1115)
- c773dc0 Fix maintenance settings title (#1096)
- e71c060 Bump express from 4.17.1 to 4.18.2 in /frontend (#1091)
- 12b2bdf Bump tinymce from 5.10.0 to 5.10.7 in /frontend (#1090)
- a555fd3 Fix nil tpl when campaign body is empty. Closes #1085.
New Contributors
- @pr0gr8mm3r made their first contribution in #1096
- @jfilter made their first contribution in #1115
- @filiphanes made their first contribution in #1128
- @shrilakshmishastry made their first contribution in #1134
- @mannueru made their first contribution in #1139
- @hasahmad made their first contribution in #1123
- @saginsa made their first contribution in #1174
- @kosssi made their first contribution in #1168
- @eltorio made their first contribution in #1178
- @nixigaj made their first contribution in #1194
- @istvan-andrasi made their first contribution in #1219
- @Margu86 made their first contribution in #1227
- @samuelstroschein made their first contribution in #1189
v2.3.0
New features
- Public campaign archive.
- Subscriber preferences self-management.
- Database maintenance tools.
- Public list descriptions.
- New languages: Vietnamese (@mannm123), Chinese (@jinrenjie), Catalan (@davidesteve), Taiwanese (@ssangyongsports)
- Bug fixes and improvements.
Changelog
- 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 nameJSON
. - db2fd9a Bump github.com/labstack/echo/v4 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 #904
- @organicnz made their first contribution in #922
- @ssangyongsports made their first contribution in #936
- @davidesteve made their first contribution in #955
- @r0ro made their first contribution in #1018
- @wgriffiths made their first contribution in #1060
- @volkanto made their first contribution in #1063
Full Changelog: v2.2.0...v2.3.0
v2.2.0
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.
Improvements
- 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.
Changelog
- 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 '&' 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 github.com:knadh/listmonk
- 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 Contributor...
v2.1.0
This version contains a number of fixes, improvements, (small) feature additions, and performance improvements.
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.
Fixes
- 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.
Docker
# 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.
Changelog
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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(install-prod.sh): 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_id
s.
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
7aa8508 Add explicit public-read
ACL to public S3 uploads. Closes #496.
4ec4a1b Merge...
v2.0.0
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://listmonk.app@TrackLink"></a>
. - New language packs.
- and more ...
Important ⚠️
- 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.
Docker
# cd /directory/with/docker-compose.yml
docker-compose pull && docker-compose run --rm app ./listmonk --upgrade
docker-compose up -d app db
Changelog
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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
v1.1.0
This is an unplanned interim release that fixes a critical bug in subscriber deletion: #384
Changelog
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
9f2e708 Wrap lines in <pre>
without overflowing the viewport.
0e5cd60 Delete feature---change-request.md
89481ed Update issue templates
Docker images
docker pull listmonk/listmonk:latest
docker pull listmonk/listmonk:v1.1.0
v1.0.0
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.
Changelog
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 ‘0.0.0.0’ 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 github.com:knadh/listmonk
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 github.com:knadh/listmonk
ad0a0e0 Add preconfirm_subscriptions=true/false
new 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 github.com/Masterminds/sprig/v3
c358281 Merge branch 'master' of github.com:knadh/listmonk
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