4 February 2024
listmonk v3.0.0
Repository: @knadh/listmonk
GitHub release page: 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.
-
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. -
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.
-
9e96649 Update schema.sql - change default bounce settings (#1669)
-
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)
-
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.
-
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’
-
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.
-
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.
-
6a26580 Update general-question.md
-
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) -
b6922b0 Suppress ’no campaign’ errors on pixel view registration. Closes #1588.
-
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)
-
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
-
f720e88 Refactor hr style in mkdocs template.
-
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)
-
491fab3 Update i18n language files.
-
a61a9d8 Fix preference management logic to avoid unnecessary DB calls.
-
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.
-
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)
-
5664e5c fix: replace docker-compose with docker compose (#1490)
-
16eeb94 added “tutorials” section and other minor edits (#1444)
-
eefcbc3 Fix hardcoded DB name in ‘about’ SQL query. Closes #1477.
-
6af904d Lowercase email search on UI to match lowercase email index in DB. Closes #1464.
-
07a9632 Update latest version on homepage.
-
4b05ab1 Add check for SES ‘invalid domain’ transient bounces. Closes #1463.