v3.0.0
knadh/listmonkv3.0.0Feb 4, 2024by github-actions[bot]
AI Summary
v3.0.0 is a major release with a completely rewritten concurrent campaign engine, major performance improvements, and new frontend build system.
Key Highlights
- Completely rewritten concurrent core - campaign pausing/cancellation now near-instant
- Performance improvements for large databases with Settings -> Performance -> Cache slow queries option
- New frontend dependency and build system using Vite
- Campaign archives now support slugs for clean permalinks
- Accurate sent count tracking for every message
- F9 shortcut key for campaign and template previews
- Fixed root cause of mysterious SMTP sending errors
New Features
- Rewritten campaign engine
- Query caching
- Vite-based frontend
- Campaign slugs
- Accurate sent counts
Full Release Notes
[](https://listmonk.app) 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** ```shell # 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.md (#1468) * 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. * e2f1313 Update configuration.md (#1465) * fcdea60 Update bounces.md (#1466) * 2888dcd Update upgrade.md (#1467)