Changelog History
Page 1
-
v6.2.0 Changes
June 26, 2026π v6.2.0 has important security fixes in addition to several improvements and general bug fixes.
β¬οΈ As always, take a backup of your Postgres database before upgrading.
π Security
π This version has fixes for multiple campaign/list permission validation issues in multi-user environments.
What's new
- Embed inline images (CID) in e-mails.
- Define trusted URLs and redirect to them after subscriber form submission.
- SMTP-server selection based on 'from e-mail' domains.
- π Template expression support in campaign custom headers.
- π "Outlook compatbility mode" option in the Visual e-mail builder UI.
- π Support for Azure bounce webhooks.
β¬οΈ 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbWhat's Changed
- ## π feat(i18n): add Arabic (ar) translation by @imohad in #2977
- β¬οΈ Bump golang.org/x/image from 0.29.0 to 0.38.0 by @dependabot[bot] in #2979
- π Update Lettermint webhook documentation link by @Bjornftw in #2984
- π Fix september traduction by @jiimmyy1 in #3000
- β Add quick settings for azure smtp by @oskari in #3002
- β¬οΈ Bump axios from 1.13.5 to 1.15.0 in /frontend by @dependabot[bot] in #2999
- β¬οΈ Bump vite from 5.4.20 to 6.4.2 in /frontend/email-builder by @dependabot[bot] in #2995
- β¬οΈ Bump github.com/go-jose/go-jose/v4 from 4.1.1 to 4.1.4 by @dependabot[bot] in #2985
- β¬οΈ Bump lodash from 4.17.23 to 4.18.1 in /frontend by @dependabot[bot] in #2986
- π Fix container spanish translation typo by @Ggpsv in #3005
- π Fix issues in spanish translations by @Ggpsv in #3007
- β¬οΈ Bump follow-redirects from 1.15.11 to 1.16.0 in /frontend by @dependabot[bot] in #3003
- β¬οΈ Bump postcss from 8.4.49 to 8.5.12 in /frontend by @dependabot[bot] in #3020
- π Fixs #2987 - Prevent confirmed subscriber becoming unconfirmed when re-subscribing. by @blu3id in #2996
- β¬οΈ Bump axios from 1.15.0 to 1.15.2 in /frontend by @dependabot[bot] in #3032
- β¬οΈ Bump systeminformation from 5.31.1 to 5.31.6 in /frontend by @dependabot[bot] in #3046
- β‘οΈ Update campaign translations to θ₯ιζ΄»ε¨ and change field name to εη§° by @egghurt in #3038
- β¬οΈ Bump postcss from 8.5.9 to 8.5.14 in /frontend/email-builder by @dependabot[bot] in #3036
- π fix(analytics): correct per-campaign unique view counting by @wucm667 in #3024
- π fix: prevent nil pointer crash in BounceWebhook when bounce processing disabled by @Koushik-1729 in #2993
- β Add LumaDock as a hosting option by @AXR9 in #3062
- β¬οΈ Bump qs from 6.14.2 to 6.15.2 in /frontend by @dependabot[bot] in #3061
- β¬οΈ Bump js-cookie from 3.0.5 to 3.0.7 in /frontend by @dependabot[bot] in #3059
- β‘οΈ Updated German translation for new refresh button by @althaus in #3060
- β‘οΈ Update nl.json by @RichardJong in #3052
- π fix: italian localization is now more natural by @cmargiotta in #3048
- β Add per-domain SMTP routing by @jaymzh in #2953
- π Fix: ZIP Slip path traversal in CSV import by @Yunkaiwjs in #3065
- β¬οΈ Bump tmp from 0.2.5 to 0.2.7 in /frontend by @dependabot[bot] in #3064
- β¬οΈ Bump axios from 1.15.2 to 1.16.0 in /frontend by @dependabot[bot] in #3066
- π fix: protect SES cert cache map with sync.RWMutex to prevent concurrent map writes crash by @Abzaek in #3050
- β Add Indonesian translations (i18n/id.json) by @reynaldiarya in #3069
- β‘οΈ Update subscription confirmation message in Spanish by @altomarketing in #3070
- π Fix typo in es.json: "invΓ‘lido" β "individual" by @al10101 in #3072
- π Fix dev environment when
$GOPATHis not set by @dfabulich in #3097 - β Added API endpoint for SQL based list changes by @NWTrident in #3093
- π Support
robots.txtin static content by @dfabulich in #3096 - π Show the "Links" chart heading on the campaign analytics page by @sysrow in #3091
- β Add Azure ACS bounce webhooks and settings support by @oskari in #3001
- π Outlook-safe rendering for visual email builder output by @MrJoky in #2978
- β Add support for embedding images (inline attachments) via CID in campaign bodies by @knadh in #3034
- β‘οΈ Update Italian translation by @albanobattistella in #3109
- π Fix api tokens hashing by @knadh in #3114
π New Contributors
- @imohad made their first contribution in #2977
- @jiimmyy1 made their first contribution in #3000
- @oskari made their first contribution in #3002
- @Ggpsv made their first contribution in #3005
- @blu3id made their first contribution in #2996
- @egghurt made their first contribution in #3038
- @wucm667 made their first contribution in #3024
- @Koushik-1729 made their first contribution in #2993
- @AXR9 made their first contribution in #3062
- @althaus made their first contribution in #3060
- @RichardJong made their first contribution in #3052
- @cmargiotta made their first contribution in #3048
- @jaymzh made their first contribution in #2953
- @Yunkaiwjs made their first contribution in #3065
- @Abzaek made their first contribution in #3050
- @reynaldiarya made their first contribution in #3069
- @altomarketing made their first contribution in #3070
- @al10101 made their first contribution in #3072
- @dfabulich made their first contribution in #3097
- @NWTrident made their first contribution in #3093
- @MrJoky made their first contribution in #2978
Full Changelog : v6.1.0...v6.2.0
-
v6.1.0 Changes
March 29, 2026π v6.1.0 has important security fixes in addition to several improvements and general bug fixes.
β¬οΈ As always, take a backup of your Postgres database before upgrading.
π Security
π This version has fixes for multiple campaign/list permission validation issues in multi-user environments.
What's new
- π New global Privacy setting to disable view and click tracking.
- Ability to proxy S3 media files through listmonk instead of linking to S3 directly.
- Lettermint bounce webhook provider.
- π New global data refresh button on admin nav that works across all pages.
- π A new 'Duplicate' button to visual e-mail builder block UI options.
- β‘οΈ
PATCH /api/subscribers/:idendpoint for partial subscriber updates. - π New granular
campaigns:sendpermission, separate from campaigns:manage for finer access control. - π New
altbodyparam to/api/txfor sending multipart plaintext bodies in transactional mails.
β¬οΈ 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbπ Changelog
- π 1b5e8d3 Bump picomatch from 2.3.1 to 2.3.2 in /frontend/email-builder (#2973)
- π 86c94c8 Fix users without certain list permissions being able to see list names on subs.
- π 50564c6 Remove unpredictable/useless 'back' button from public forms. Closes #1834.
- e9c1da1 Add new
campaigns:sendpermission and separate it fromcampaigns:manage. - β‘οΈ 00bae68 Update go-pop3 with BOM fix. Closes #2959.
- 24817d5 Add
PATCH /api/subscribers/:idto partially modify subscribers. Closes #1681. - π 1d57248 Add a 'Duplicate' button to visual e-mail builder block UI options. Closes #2852.
- π deeb3fb Fix minor UI issues on analytics page. Closes #2446.
- π» 4e5e713 Exclude non-http hrefs on the UI when adding
@TrackLink. Closes #2859. - 0οΈβ£ 010655f Don't make 'tracklink' checkbox on the UI on by default and remember last preference. Closes #2858. Closes #2862.
- β‘οΈ 678d4ed Cleanup and optimize images on the static homepage.
- π» 501f305 Exclude roles API queries from Settings UI for users who don't have that perm. Closes #2965.
- 1525852 feat: add Lettermint as bounce webhook provider (#2935)
- π cfd865b Bump yaml from 1.10.2 to 1.10.3 in /frontend/email-builder (#2968)
- 8702932 Bump picomatch from 2.3.1 to 2.3.2 in /frontend (#2969)
- 0ee89f9 Fix deleted lists breaking campaign query. Closes #2908.
- π¨ e908cc3 Refactor and improve Cypress test scaffolding.
- 678c36d Fix incorrect permission check in CSV import blocklisting.
- db82035 Wipe user sessions from DB on password reset/change.
- 347f597 Fix serveral missing permission checks across multiple handlers.
- π 171a597 Bump flatted from 3.3.1 to 3.4.2 in /frontend/email-builder (#2960)
- d3e8c4c Bump flatted from 3.3.2 to 3.4.2 in /frontend (#2962)
- c60ea79 Fix % encoded URLs breaking with
TrackLink. Closes #2947. - π e35bf87 Fix incorrect timestamps in dashboard analytics materialized views. (#2952)
- β 5f4f360 Fix attachments incorrectly accuring for every recipient in test mails. Closes #2949.
- 1e3d311 Add expiry+TTL to Altcha CAPTCHA tokens. Closes #2684.
- π 915ee04 Skip windows/arm-32 bit builds in goreleaser (which was breaking) that was removed in go 1.26
- be7b60a Add new 'altbody' param to /api/tx to send multipart plaintext bodies in transactional mails. Closes #2486
- 1d33d95 Bump Hodor to 0.3.4 (adds python3, shellcheck, file, diffstat) (#2943)
- π bf24c3f build: bump Go version to 1.26.1 to fix stdlib CVEs (#2941)
- 00180b6 Hodor: require hodor-review label to run, re-run on subsequent pushes (#2940)
- π³ 3adacba Fix Hodor: use docker run directly (0.3.2 entrypoint changed) (#2939)
- ece5a63 Fix pipe batch hanging and corrupting campaign runtime state if
NextSubscribers()throws an error. - β‘οΈ 97b72e9 Fix pre-existing non-permitted lists on a subscriber being wiped incorrectly on update. Closes #2902.
- β‘οΈ ee7bccc Throw an error if there isn't a single permitted list in subscriber create/update. Closes #2905.
- b628510 Fix potential hanging campaign pipes if the pipe queue ever becomes full.
- β‘οΈ 16d5e54 Fix incorrect subscriber checkpoint in campaign stats update.
- 0f32991 Apply improvements to Danish i18n (#2928)
- 0808015 feat: add Lettermint SMTP preset (#2932)
- 458bca1 Bump immutable from 5.0.3 to 5.1.5 in /frontend (#2936)
- 19b53d8 Add Hodor AI code review workflow (#2937)
- π c8b1f6f Standardize spelling of "opt-in" in docs. (#2931)
- β‘οΈ 8b63364 Update security-reports.md (#2929)
- 62778d7 Bump rollup from 4.30.1 to 4.59.0 in /frontend (#2926)
- π 7396276 Bump rollup from 4.24.4 to 4.59.0 in /frontend/email-builder (#2925)
- β‘οΈ 2e9f0e0 Updated Danish translation (#2927)
- fdd7dbb Incorporate
SOURCE_DATE_EPOCHin build. Closes #2802. - 7fd5ed0 Add Hodor AI code review workflow (#2923)
- π³ 756c5aa Fix nightly docker push workflow.
- π c6bf543 Add a link to security reporting docs to SECURITY.md
- d0fb8d6 Add a global data refresh button on top nav that works on all pages (#2861)
- c381e4c Add global setting to disable view and click tracking (#2920)
- 07078eb Bump systeminformation from 5.28.5 to 5.31.1 in /frontend (#2910)
- π³ 97de0b1 Add
docker-compose.override.ymlto .gitignore (#2917) - π 7b64b8b Add a page on security reporting listing down recurring non-issue reports.
- 0οΈβ£ 6d5787b Skip non-available email- messenger during campaign creation and default to 'email'. Closes #2901.
- c417df6 Fix untranslated 'Delete' string on lists page. Closes #2904.
- π 68c8614 Change
docker manifesttodocker buildx imagetoolsin nightly job to fix manifest error. - π 5436d08 Add
--amendto nightly Docker build (after it stopped working randomly). - cc14bcb Bump qs from 6.14.1 to 6.14.2 in /frontend (#2906)
- 8cf9a7f Bump axios from 1.12.0 to 1.13.5 in /frontend (#2899)
- π 5a8ecfb Add support for proxying S3 media files through a custom path (#2863)
- 0d9e66a Increase campaign/template preview modal height. Closes #2857.
- π» f5bec86 Display campaign name + subject in subscriber activity tab on the UI. Closes #2874.
- e7b09fd Fix incorrect skipping of +1 count in sliding window check. Closes #2894.
- 8d1b9fd Add substring matching to list search like campaign search. Closes #2896.
- dce582a Fix bounce POP scanner incorrectly returning errors while scanning. Closes #2884.
- β‘οΈ c5631eb Update de language (#2895)
- β‘οΈ 2adee6a fix: Update dev Dockerfile to use Go 1.24.1 to match go.mod (#2879)
- 3c73267 Bump lodash from 4.17.21 to 4.17.23 in /frontend (#2881)
- π 881bcd6 Add automated
nightlyreleases. - 577036a Increase GitHub issue auto-close interval to 5 months.
- β‘οΈ fff3c7f update listmonk TypeScript SDK scope from @solytude to @maloma (#2875)
- 6006048 fix: convert forwardemail webhook truthsource property to string (#2869)
- 29c406f Add left/right float options to TinyMCE image popup. Closes #2865.
- β‘οΈ cd1bb1b Docs update to OIDC - adds Google Workspace / Google Cloud (#2866)
- π 267263a Update release details on the static homepage.
- 504a142 Upgra...
-
v6.0.0 Changes
January 02, 2026π v6.0.0 is a major release with a significant number of improvements and fixes.
β¬οΈ As always, take a backup of your Postgres database before upgrading.
What's new?
- TOTP two-factor authentication.
- E-mail-based
Forgot passwordreset flow. - Ability to archive lists.
- π» Subscriber activity in the Subscriber profile UI.
- Ability to send transactional mails to non-subscribers via the
/api/txAPI. - Campaign-level JSON
{}attributes just like subscriber attributes. - Granular override on subscriptions / subscriber profile in bulk import.
- π§ In-built Postgres VACUUM cron in
Maintenancesettings for large databases. - π CORS origin configuration in
Securitysettings
π In addition, there are several other bug fixes and improvements.
π Security
π This version addresses the issue of arbitrary <script>s in a campaign created by a non-admin user with the campaign management permission executing when a super admin previews that campaign, allowing API calls on the super admin user's account to execute on their session.
β¬οΈ 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbπ Changelog
- 00f303c Add v6.0.0 migration file.
- π 5673e61 Add
attribsto campaign docs. - β¬οΈ 2d560fa Upgrade altcha JS to latest version.
- d7a41f7 Auto-translate new i18n language strings.
- β 556cb37 Fix Cypres tests.
- e20ed06 Rename v5.2.0 migration to v6.0.0.
- π 9552865 Apply minor style fixes to admin.
- π f1dd8a4 Add support for campaign-level JSON attributes.
- e49c8d0 Refresh i18n language files.
- π» a65608c Split 'overwrite' on import UI into 2 separate options (userinfo and subscription status). Closes #2496
- 77fb9dd Fix invalid syntax in bundled visual template.
- π 576309d Add
viewportmeta tag to visual builder default template. Closes #2751. - c6bc9a6 Show duration in seconds also on campaigns page. Closes #2796.
- π± 5f93543 Fix user menu not showing in responsive view on the UI. Closes #2793.
- 74dc5a0 Add sandboxing to campaign preview iframe.
- d802793 Bump qs from 6.13.1 to 6.14.1 in /frontend (#2844)
- 373682a Fix and imporve bulk deletion in campaigns and queries.
- π 3f5bc8d Improve zh-TW (Traditional Chinese) translation (#2840)
- 183d0ea Bump github.com/altcha-org/altcha-lib-go from 0.2.2 to 1.0.0 (#2819)
- 787c758 Fix #2778 'Track Link' status is lost when re-saving an existing link in the Rich Text Editor (#2829)
- π 1a68363 Add missing i18n German translations (#2830)
- e215e1e Added Cloudron install button in doc (#2826)
- e8fb9d5 Fix incorrect
--new-configfile write error message. Closes #2818. - π c651117 fix confusing formatting issue in dev setup docs (#2813)
- π 55540a2 Remove confusing field validation behaviour on S3 settings UI. Closes #2806.
- π e703c37 Add env var support for static-dir and i18n-dir flags (#2807)
- β‘οΈ 9feb59f Update it.json (#2803)
- π a998c91 Correct status field reference in documentation (#2808)
- 1c36164 Translate English phrases to Slovak in sk.json (#2810)
- π» 045f0eb Fix broken language string on CAPTCHA settings on UI. Closes #2781.
- π§ 570bb46 Add cron-based
VACUUM ANALYZEsupport for DB maintenance. - π 67ad4d5 Add external recipient support to
/api/txendpoint. - 583f92a Add bulk deletion (by id or query) to lists and campaigns.
- 2b60907 Add list permission check to campaign creation.
- β‘οΈ b46e0d6 Fix list update query returning incorrect state on lists with no campaigns.
- c108a61 Change LISTMONK_db__host from 'listmonk_db' to 'db' (#2787)
- β‘οΈ c888b7f Update default sample visual template with tracked link examples (#2788)
- 06e6b67 Add Cloudzy logo to providers list on the homepage (#2777)
- β‘οΈ e526a5f Fix list name not being updated in
campaign_listson list update. Closes #2734. - π 2074604 Add archival support to lists.
- 6417f30 Stop recording
to sendcount on campaign creation. - π 12b8069 Remove incorrect settings dependency on Media UI.
- 581aad4 Add SMTP status check and basic heuristics to classify hard/soft bounce in POP3 scan.
- π 3bf8bdb Split queries.sql into multiple files for better readability and maintainability. Closes #2738. (#2776)
- 8170489 Split models file to domain specific files (#2775)
- 750ce91 Fix incorrect doc for
queryparam in/api/campaign. Closes #2772. - π 60f7ac9 Bump js-yaml from 4.1.0 to 4.1.1 in /frontend/email-builder (#2767)
- π 296245a Add 2FA TOTP support for authentication.
- 4c3b58c Bump golang.org/x/crypto from 0.40.0 to 0.45.0 (#2766)
- 75998ca Add
Forgot passwordreset flow to the admin. Closes #2753. - β ea1eb3f Add warning to
users:managepermission in docs. Closes #2752. - π» a2bfc0b feat: add subscriber activity tracking UI in admin panel (#2756)
- b3f60a9 Bump js-yaml from 4.1.0 to 4.1.1 in /frontend (#2761)
- β‘οΈ 425c0d7 Update 3rd party instructions re Fly.io install (#2757)
- e469296 Fix duplicate operationId in OpenAPI spec (#2758)
- π 22bcd70 feat: add Northflank deploy button (#2736)
- 60c069d Fix
per_page=allnot working on GET bounces API. Closes #2678. - b7e8b1e Fix
txhandler incorrectly sanitizingsubscriber_emails[]. Closes #2726. - π cdf0a5c Add CORS configuration to security settings.
- 827a208 Bump vite from 5.4.20 to 5.4.21 in /frontend (#2722)
- β‘οΈ e8156e0 Update Czech translation (#2694)
- c666c4f Bump vite from 5.4.19 to 5.4.20 in /frontend (#2691)
- π 39658c4 Add minor security enhancements (#2682)
- 2085abe Handle Postmark spam complaints. (#2679)
- π fb60455 Bump vite from 5.4.18 to 5.4.20 in /frontend/email-builder (#2660)
- 27f58ef Bump axios from 1.8.2 to 1.12.0 in /frontend (#2666)
- β‘οΈ 06275f1 Update Czech translations (#2688)
- β‘οΈ 2c5dc61 Update it.json (#2667)
- π d661fa8 Fix typo in docs (#2664)
- a76099e incorrect ALTCHA Form challengeurl (#2654)
- π 943a961 Update release details on the static homepage.
-
v5.1.0 Changes
September 09, 2025β‘οΈ v5.1.0 contains an important security update (CSRF prevention - CVE-2025-58430) along with other minor bug fixes and improvements.
What's new?
- π ALTCHA (self-contained proof-of-work CAPTCHA alternative) in addition to hCaptcha (deprecated)
- π¨ Refactored media gallery with a new UI and improved UX.
- π» Bulk subscriber blocklisting directly from the bounces UI.
- 0οΈβ£ Auto-creation of OIDC users with default user and list roles.
π₯ Breakings change to subscription-form.html
β‘οΈ If you are loading a custom
subscription-form.htmlstatic template with--static-dir, you have to update your template with the breaking changes (CAPTCHA logic) from the new subscription-form.htmlβ¬οΈ 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbπ Changelog
- π 30846f8 Ignore altcha.umd.js from frontend build so that goreleaser ignores it.
- β e27a390 Expand the warning on
subscribers:sql_querypermission on arbitrary SQL functions. - 6d99316 Auto-translate new i18n language strings.
- d4007d5 Fix Go tpl expressions breaking in Visual editor HTML.
- π deb41f8 Add i18n translation helper script.
- 81d05e4 Suppress optin e-mail send errors on subscriber insert/edit APIs.
- β‘οΈ fcbebc2 Update Cypress trests on the campaign file attach UI.
- e8b0eaf Bump github.com/go-viper/mapstructure/v2 from 2.3.0 to 2.4.0 (#2634)
- 301c13a Add optional
subjectparam to tx API. Closes #2333. - π» ad66878 Fix list action icons not showing on the UI based on permissions. Closes #2640.
- fbe4c5c Make
sessioncookie samesite to prevent CSRF requests. - ea88b94 Add link for n8n node (#2649)
- π 7d38890 Change OIDC init to lazy-load instead of loading once on boot. Fixes #2626.
- 9611164 Refresh i18n language files.
- π 09d291e Add support for built-in ALTCHA CAPTCHA implementation.
- 38387d0 Fix
List-Unsubscribeheader incorrectly sent on opt-in confirmation. Closes #2619. - eef0021 Add support for loading secrets from *_FILE env vars in Docker environment.
- 4a93184 Bump tmp from 0.2.3 to 0.2.4 in /frontend (#2617)
- π¨ ad67fc6 Refactor landing page on the website.
- π» 4d74cf4 Tweak log viewer to optionally hide filename from log lines (on the import UI).
- 26c61f8 Bump form-data from 4.0.1 to 4.0.4 in /frontend (#2587)
- π¨ fb39d61 Refactor media gallery UI.
- π» ba24c64 Add subsriber blocklisting on the bounces UI (#2409)
- π c9c678c Add support for OIDC user auto-creation (#2578)
- β‘οΈ 66d7413 Update OpenAPI specification (#2581)
- π ae84fa3 Add listmonk-mcp to SDKs documentation (#2573)
- β‘οΈ 6b7e423 Update OIDC doc with latest KeyCloak realm URL (#2568)
- β‘οΈ 89b2704 Update deps and remove obsolete
replacein go.mod. Closes #2567. - π 98d2ad6 Add Korean i18n translation (#2565)
- π 38c784f Update release details on the static homepage.
-
v5.0.3 Changes
July 06, 2025β v5.0.3 contains fixes for some minor, but annoying bugs, primarily SMTP errors not being captured and displayed while sending test mails.
β¬οΈ 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbπ Changelog
- 48643aa Disallow
POST /api/subscriptionon disabling public subscription in settings. Closes #2530. - π¨ a424f01 Print full line with error in the importer log. Close #2549.
- 4f6880d Fix opt-in send errors silently ignored on signup form. Closes #2535.
- π b71d80e Upgrade
smtppoollib with error-return bugfix. Ref: #2503 - 419f88a Fix incorrect line counts due to empty lines in CSV importer (#2542)
- aa864fd Bump github.com/go-viper/mapstructure/v2 from 2.2.1 to 2.3.0 (#2543)
- π§ d7e4ecf Fix typo in configuration.md (#2540)
- a9d3591 Add heading in template functions doc (#2527)
- β 78f3db7 Add permanent warning to docs about Sprig functions.
- π 2081048 Update release info on homepage.
- 48643aa Disallow
-
v5.0.2 Changes
June 08, 2025β‘οΈ v5.0.2 contains an important security update which disables the
envandexpandenvSprig template functions preventing accessing of env variables from templates. This affects v4.0.0 - v5.0.1 installations that have unprivileged users in a multi-user setup.β¬οΈ 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbπ Changelog
- π d27d2c3 Remove dangerous tpl funcs in Sprig that's enabled by default.
- π 6fc6c1e Fix Vietnamese translation issues (#2487)
- d6f5292 Fix subscribers unsubscription status being reset to confirmed on save (#2517)
- π 8b8358e Add Nodion Deployment Option (#2518)
- β‘οΈ 3f39508 updates simples3 to latest version (#2520)
- d027cb5 Add kloudbean hosting link to static website (#2508)
- π bf502ba Update release details on the static homepage.
-
v5.0.1 Changes
May 25, 2025π v5.0.1 is a bug-fix release on top of the major v5.0.0 release. It features the addition of long pending features such as the visual drag-and-drop e-mail builder, per-campaign SMTP selection, and numerous other fixes and improvements.
What's new?
Visual editor and templates
- The much requested and awaited visual e-mail builder and template editor is now integrated, with one-click conversion between formats. Thanks to @vividvilla for the big PR integrating @usewaypoint/email-builder-js
Campaigns:
- Replace CodeFlask with the more mature and robust CodeMirror for a much better code-editing experience (HTML, CSS, Javascript, Markdown) on campaigns, forms, templates,and settings UI.
- Ability to preview campaign archive view.
- Make paused campaigns editable and allow unscheduling with new
Unschedulebutton. - UX improvement that automatically switches scheduled campaigns to
draftwhensend_atis removed. - Add format/content type selection to the first screen on campaign creation.
Ctrl+Sshort for saving campaigns while working on them
π Security:
- Campaign viewing and management are now filtered by a user's list permissions and now use the new new
campaigns:get_allandcampaigns:manage_allpermissions. Important: This is a behavioural change from v4.1.0. - Disallow private list UUIDs on public subscriber endpoints.
- Make OIDC provider name on the login button configurable.
- Add
getlist permission check to bulk subscriber list management. - Proper enforcement of the
subscribers:sql_querypermission with SQL query analysis and table allow-listing. Addresses #2412.
- Campaign viewing and management are now filtered by a user's list permissions and now use the new new
SMTP & e-mail:
- Name SMTP servers and select an SMTP-server per campaign.
- Add List-Unsubscribe header to opt-in confirmation emails.
π» General UI
- One-click
Copybutton on subscribers and campaigns tables for copying names and e-mails to clickboard. - Checkered bg on media thumbnails to visualize transparency.
- One-click
APIs:
- Add new search param to paginated API responses.
- Introduce LISTMONK_ADMIN_API_USER for installation.
Others
- Major cleanup and restructuring of the codebase for better maintainability.
- Upgrade of various dependencies .
- Many other small 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbπ Changelog
- dc466fc Fix quotes issue in
TrackLinkregexp. - 70fe7cb Bump vite from 5.4.18 to 5.4.19 in /frontend (#2497)
- π b0ecd74 Add OIDC SSO tutorials to docs for Keycloak and authentic.
- e49253b Fix name conflict in frontend JS util lib.
- π 29b2766 Add missing requirements.txt to docs. Closes #2494.
- β± 71ae2bb Fix scheduled campaigns not finishing. Closes #2480.
- 86f808b Allow
@in usernames. Closes #2478. - 4da91a0 Fix broken
TrackLinkregexp. Closes #2448. - β± 03285ab Display detailed d:h:m duration schedule on campaigns page. Closes #2460.
- βͺ 3895fbd Fix race in selected template reverting to default on the campaign page. Closes #2461.
- 9540d49 Fix subscription status filter param not being picked up on subscribers page. Closes #2447.
- b04fe6b Fix bounces not being sorted by
typefield. Closes #2444. - 2e56322 Fix incorrect query check in bulk subscriber actions. Closes #2491.
- 00a7eff Enforce lowercasing of email in user creation. Closes #2482.
- β‘οΈ 4a132e0 Fix broken template funcs in visual campaign update.
- f687ac8 Fix incorrect order of translated day names in Hungarian locale (#2485)
- β‘οΈ ae55e64 Update Dutch i18n (#2449)
- π 85ead71 docs: add listmonk and forward email for secure newsletter delivery guide (#2440)
- π 6336ec4 Update release details on the static homepage.
-
v5.0.0 Changes
April 28, 2025π Skip this release and upgrade to v5.0.2 instead for multiple fixes (UX bugs and a security fix)
π Changelog
- π 3b8a8c2 Add email-builder/dist to .gitignore.
- β‘οΈ 8902320 Update screenshot on README.
- β‘οΈ a7085cb Update homepage.
- 11f52ee Switch migration version to v5
- 0οΈβ£ 47e8f81 Default
body_sourceto null instead of empty string in non-visual campaigns. - π 925cdf2 Add visual template and new permissions to docs.
- 1599957 Add and auto-translate missing i18n strings in all language packs.
- π db81dc1 Remove default dummy admin notification email settings.
- β 9de19ea Fix Codemirror Cypress tests in templates and form pages.
- β‘οΈ 92fc646 Update sdks.md: add client for java/kotlin (#2426)
- 81b62a4 Fix race condition in immediate campaign pause-start actions.
- β¬οΈ d3c8eca Upgrade Go deps.
- π» 0dc29b7 Fix CSV example on the subscriber import UI.
- π» 953deef Hide 'New' and 'Save' buttons on the templates UI if there's no manage permission.
- 7791327 Make
Mustconfig variables non-Mustso that the app doesn't panic on their absence. - 8fc3d27 Merge pull request #2423 from knadh/dependabot/npm_and_yarn/frontend/email-builder/vite-5.4.18
- 3dfdf48 Merge pull request #2424 from knadh/dependabot/npm_and_yarn/frontend/email-builder/babel/runtime-7.27.0
- π§ 12bc798 Make OIDC provider name display on login button configurable. Closes #2211
- π 8885437 Bump @babel/runtime from 7.26.0 to 7.27.0 in /frontend/email-builder
- π 6707b63 Bump vite from 5.4.10 to 5.4.18 in /frontend/email-builder
- π 5477c16 Merge pull request #2373 from knadh/feat-visual-editor
- ed700d7 Add a
Previewoption to the campaign archive tab. Closes #2245. - π» b67fc5e Replace
CodeFlaskcode editor withCodeMirroron the UI. - 53d7929 Prepare first RC.
- β¬οΈ ffbda01 Add sample visual campaign template on install and upgrade.
- π― 445d7e5 Fix
clone campaignby fetching campaign body on clone. - β 1559c55 Add visual editor Cypress tests.
- π» ded0fcf Fix broken visual template cloning on the templates UI.
- π» dcdef8e Add format/content type selection to campaign creation UI.
- β d3da0be Fix `test campaign' sending wrong template for visual campaigns.
- 5207dff Fix visual editor change event/init/import sequences.
- 968b366 Stop fetching bodies for all campaigns and explicitly fetch for visual campaign import.
- 20e4b10 Fix DB state issues in visual campaign cloning.
- π¨ f4c0e66 Refactor 'media upload' integration in campaign visual editor.
- π 3aba2b0 Fix frontend/email-builder Makefile build steps.
- 343d405 Add Ctrl+S campaign save shortcut and add Ctrl+S and F9 to richtext editor.
- β‘οΈ e4e735e Update tsx formatting in email-builder.
- π 503e985 Add support for converting all types to visual editor blocks.
- f1fbadf Fix incorrect template states in DB in campaign creation and broken preview.
- π cee2589 Move
email-buildersrc from/to/frontend. - π¨ 110345d Refactor and simplify state management in campaign editor.
- π» fca5ec5 Change visual editor UI language.
- 7786b18 Add DB migrations for visual editor.
- c1f81cf Fix compatibility issues with
master. - π 82e2b70 fix: Move visual-editor to iframe so that CSS styles are isolated.
- π 4a524c9 feat: Integrate media selector to visual editor and add minor fixes.
- π e6f08a0 feat: Inject email-builder instead of loading it as ES module
- π ae98280 feat: Integrate email-builder on campaign/template editor UI and backend.
- π» 5a0980e Add on-hover one-click
Copybutton to subscribers and campaigns tables UI. - a85e467 Add missing charset for numbers in TrackLink regex. (#2404)
- π fb52700 Remove
GET /api/settingsdependency on the Lists -> Forms UI. - π b44ea0c Merge branch 'fix-sql-search'
- 75aad8e Add new
searchparam to paginated API response structure. - 29591c1 Add
getlist permission check to bulk subscriber list management. - fca8d6d Bump vite from 5.4.17 to 5.4.18 in /frontend (#2416)
- 4b805f8 Fix broken
subscribers:sql_querypermission. - 375e385 Bump golang.org/x/net from 0.36.0 to 0.38.0 (#2413)
- β‘οΈ 4d8c8cd Update installation.md (#2405)
- π» 5971bc4 Fix Raw CSV example on import UI (#2392)
- 562e52c Introduce
LISTMONK_ADMIN_API_USERto--install. Closes #2314, #2322. - b3e6b09 Bump vite from 5.4.15 to 5.4.17 in /frontend (#2391)
- π 0826f40 Remove repetitive URL param
:idvalidation and simplify handlers. - β e6d3aad Add ability to wait and healthcheck for backend app in Cypress settings tests.
- π 78366ab Clean up main initialization to remove
appinterdepencies in init. - π 8848922 Remove superfluous
constsdep in init functions by separating URL consts. - π¦ e2f24a1 Turn
notifsinto a special stateful global singleton package, removing clunky deps. - π e327ebb Move all HTTP handlers directly to
Appand remove the redundant in-between layer. - π¨ b3d46a8 Refactor system notification callbacks into a new
notifspackage. - π¨ 00c858f Refactor all HTTP handlers and attach them to a single struct.
- π 007f4de Fix a number of cosmetic inconsistenies across handlers and functions.
- fcf2449 Replace awkward auth user object access in handlers with an explicit func.
- π¨ 17998fb Refactor user auth models and permission checks.
- π¨ 5c78506 Refactor superfluous list perm check middleware into standalone function.
- a271bf5 Introduce per-campaign filter permissions. Closes #2325.
- β± a5f8b28 Fix inconsistent behaviour in campaign scheduling on the UI.
- π¨ fbc27ae Refactor UI time diff display function to prefix '-' on past dates.
- β 92e5d63 Fix various static-check/idiom warnings.
- π» b18c7ad Fix incorrect loading spinner on the Lists UI. Closes #1822.
- d1c964d Bump vite from 5.4.12 to 5.4.15 in /frontend (#2379)
- π b8f50ea Add support for domain allowlists in addition to blocklists. Closes #2230.
- β¬οΈ 6efb6e7 Upgrade
smtppooltov2and add support for concrete SSL options. - π e4a18da Remove forcing unique filename on all media uploads.
- π ef8f319 Remove obsolete language key and refresh i18n files.
- β‘οΈ 9224e34 Update i18n refresh script to remove deleted base keys from all other files.
- π 5f1b676 Remove ASCII-only restriction on media filenames. Closes #2277.
- π» 0be7a79 Fix broken log rendering on importer UI.
- π 1b43e1a Add minor i18n Hungarian language pack fixes (#2375)
- π 06c2f3b Add Nuxt.js module to Supported Libraries Lists (#2371)
- π 473f942 Add i18n Hungarian language pack fixes (#2370)
- 7d3e6e6 Fix too greedy TrackLink regex replacement. (#2355)
- π 79f8b60 Updating documentation to reflect AWS Console changes (#2365)
- π³ 625f616 Change the docker-compose example to bind Postgres locally. Closes #2357.
- π de9a8ea Add Bulgarian i18n translation (#2349)
- β‘οΈ f310131 Update Go version to v1.24.1
- d43ac10 Tidy go.mod
- f34551d Bump golang.org/x/net from 0.33.0 to 0.36.0 (#2348)
- 2005e7a Bump github.com/go-jose/go-jose/v3 from 3.0.3 to 3.0.4 (#2346)
- bc5b817 Bump axios from 1.7.9 to 1.8.2 in /frontend (#2347)
- a986961 Disallow private list UUIDs on public sub endpoints. Closes #2296.
- 8dc5bc2 Bump prismjs from 1.29.0 to 1.30.0 in /frontend (#2345)
- π f8d07ad Fix DELETE list documentation. (#2335)
- 06768ba Fix ru i18n lang (#2330)
- π e649cf6 docs: improve clarity and consistency of user-related translations (#2324)
- d3a417d Fix typo in function name.
- π¨ 2defef3 Refactor SMTP name to always have
email-prefix for consistency. - β‘οΈ 24af0bc Update ca.json (#2303)
- π d055cc5 Add support for selecting SMTP per campaign (#2290)
- βοΈ 756e391 Fix typos in subscribers.md (#2302)
- β‘οΈ 61d7a9d Update cs-cz.json (#2293)
- π 2f5ab4c Display filename and milliseconds in timestamp on the logs admin UI (#2280)
- ad162c2 Bump vite from 5.4.11 to 5.4.12 in /frontend (#2268)
- 86f9ad0 Add Norwegian BokmΓ₯l (no.json) i18n language pack (#2289)
- d0321ba fix: typo in callout under the settings page (#2283)
- β‘οΈ c3069e5 Update Finnish translation (#2270)
- π 672d8ff Merge pull request #2269 from s-en-o/patch-1
- 1446fbb fix(static): no matching closing anchor tag
- π 7153777 Merge pull request #2266 from vinitparekh17/patch-1
- π 7c952e7 docs: removed duplicate line
- β¬οΈ afa717f Upgrade smtp-pool lib fixing non-FQDN hostnames. Closes #2146.
- π» ff19a34 Fix bounce meta JSON overflowing in the table on admin UI. Closes #1797.
- π 0e49a4b Merge pull request #2264 from knadh/edit-campaign
- 3d383cd Make paused campaigns editable.
- β± 5ba0adc Automatically switch scheduled campaigns to
draftwhensend_atdate it removed. - β± 61c6b7e Add explicit
Unschedulebutton on campaign UI. - π fd31ac6 Remove redundant
send_laterparam in campaign POST/PUT. - e8fd12b Add
List-Unsubscribeheader to opt-in confirmation mails. Closes #2224. - π 2e8a5ac Add user roles/perms documentation. Closes #2242.
- π§ 0930a22 Add VACUUM to maintenance section in docs.
- e2aa9c5 Make media image background checkered to show transparency. Closes #2080.
- c877156 Bump golang.org/x/net from 0.23.0 to 0.33.0 (#2253)
- a5e56c3 fix: forwardemail bounce processing invalid signature issue (#2250)
- π 0878f3e Add Laravel SDK to Supported Libraries Lists (#2240)
- π 50b296d Remove GitHub from OIDC shortcuts as it doesn't support OIDC. Closes #2235.
- π b75de39 Fix elest.io image in docs (#2239)
- cb9b798 Fix typo in de i118 (#2236)
- 62c996b Fix typo (#2233)
- π 2abc0a8 Apply minor Go code fixes (#2219)
- π³ 98934e6 Fix outdated docker local dev suite (#2200)
- 97fde64 Make CSV (import) header fields agnostic of surrounding spaces. Closes #2189.
- 6371228 Fix schema and add migration for incorrect subscriber count (null) in materialized view.
- 5c0de6e Fix broken sorting lists by
subscriber_count. Closes #2151. - 7bfbd6a Add
allto subscriber deletion by query which broke withqueryvalidation. Ref: #2122. - a129111 Replace broken
indentJS lib withjs-beautify. Closes #2182. - π 1c33d32 Remove redundant event from boun...
-
v4.1.0 Changes
November 12, 2024π v4.1.0 is a major release with a significant number of improvements and fixes.
β¬οΈ β οΈ Important: Upgrading from v3.x.x
β¬οΈ As always, take a backup of your Postgres database before upgrading.
π v4.1.0 is a major upgrade that introduces multi-user management and authentication features, fundamentally changing how login and authentication works. It no longer relies on the browser-based BasicAuth prompt and ships with a built-in login system. The upgrade automatically creates a new Super Admin user based on the
admin_usernameandadmin_passwordfields from the TOML configuration file, after which, the credentials in the TOML file are no longer needed. Read more.What's new?
- π Multi-user support with granular permissions, user, role, per-list permissions and API token management.
- π Support for OIDC (OpenID Connect) authentication.
- π» First-time Super Admin setup UI for fresh installations.
- π Significant performance improvements to SQL queries underlying concurrent campaign processing. Performance gains of several orders of magnitude on large installations.
- π» Styling improvements to UI for better UX including new tabs UI in subscriber modal popup.
- Markdown syntax highlighting.
- Static email template subjects are now scriptable with template syntax.
- π Support for CC and BCC in custom email headers.
- Syntax highlighting in HTML form generator.
- β¬οΈ 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.ymldocker-compose down docker-compose pull&&docker-compose run --rm app ./listmonk --upgrade docker-compose up -d app dbπ Changelog
- π» 0a27de1 Replace type field in user creation UI with radio-button for better usability.
- 894d284 Fix GET subscribers not filtering by list permissions. Closes #2129.
- β‘οΈ 8b213f0 adds property
descriptiontoListandNewList, updates docs (#2150) - 18edc65 Add v4.1.0 migrations.
- π¨ abe09d6 Refactor OIDC redirect state to have nonce validation. Closes #2138.
- b995cce Switch login form URLs to relative URIs.
- cb8b54f Add ForwardEmail (provider) bounce integration (#2016)
- π 0392582 Add % on campaign analytics pie chart hover (#2124)
- π c35ed68 Fix quotes in JSON API req example in docs.
- π e182fb5 Fix the delete/blocklist by SQL query example in docs.
- 1ac9ccb Reject blocklist-by-query API requests with no query.
- ac5e101 Reject query-by-delete API requests with no query. Ref #2122.
- β‘οΈ d8a394d Update it.json (#2134)
- β‘οΈ 68df637 Update curl example to remove username/api_username confusion. Closes #2136.
- π 2c02e01 #2114 - Fix issue of wrong platform used during docker build (#2123)
- 599147c fix: favicon markup (#2115)
- β‘οΈ be9fe9c Update hu.json (#2102)
- 5abf004 fix dummy detection for OIDC client secret (#2116)
- cf7d664 Fix broken individual list GET API. Closes #2117.
- ca73e4f Change wording to 'one-way mailing list' on the static homepage.
- π³ 998b6e3 Remove version info from docker-compose docs to avoid confusion.
- π³ f6ed13a Add explicit instructions for older docker-compose files.
- π 319053d Update release link on static site homepage.
- π f5dfb0c Remove root URL from login setup form to prevent bad redirect on first install. Closes #2103.
- π³ 136d9d1 Don't fail on chown in Docker entry script. Closes #2104.
- π³ 8ef71aa Fix docker-compose curl command examples.
- π 120d275 Update release link on static site homepage.
- π 3894571 Remove obsolete demo file reference from Docker build commands.
- π 0f2c679 Remove deprecated goreleaser flag from GitHub action workflow.
- π 11cb3ce Update gorelease Go build version to latest.
- π 79f94d3 Update gorelease command and remove deprecated flags.
- π³ afd5db9 Fix incorrect image tag in docker-compose.
- π fd04fc1 Refresh i18n language files and add (GPT 3.5) auto-translations for new strings.
- π 4eefd42 Remove redundant campaign manager config validations (#2095)
- 9bad699 Bump google.golang.org/protobuf from 1.31.0 to 1.33.0 (#2083)
- d35dbb0 Bump github.com/go-jose/go-jose/v3 from 3.0.1 to 3.0.3 (#2084)
- b8ae4f6 Change v4.0.0 migration script to not auto-generate credentials.
- π¨ 7fcc6f7 Simplify and refactor docker-compose.yml and remove install scripts.
- 24bab75 Add first time login setup template
- β‘οΈ 178fa94 Update user login time on password login.
- π» 5b3d6e2 Add first-time Super Admin setup UI on fresh install.
- 1e4b3a2 Separate get individual user and get all users queries.
- β 87db0d5 Fix Cypress admin form test to support rendered HTML.
- 25cdb7b Pull e-mail from userinfo endpoint if OIDC token endpoint doesn't return it.
- π a37d414 Add missing GH token to Swagger docs workflow.
- π 9760d19 Fix button focus/active styles on the UI.
- π 69de02a Restyle and simplify subscriber form UI with tabs.
- β b5382b8 Add user UI frontend tests.
- π b2866b1 Apply minor style changes and improvements to modals.
- β 74e77bd Add names to user form fields for testing.
- π» 3fdf6fe Add individual list permission checks on admin UI.
- 887d582 Fix get-users query to return all users when no ID param is given.
- π 1075485 Merge branch 'fix-user-query'
- e7109da Fix missing email validation in OIDC exchange.
- 7847167 Fix incorrect id logic in user selection.
- β 13222b5 Fix random timing related Cypress test failures (huh).
- π» 29aa977 Expand search input width on subscribers UI for smaller screens.
- 354fb30 Replace hardcoded perm literal with const.
- π» 6258fd5 Increase settings UI poll interval to reduce broken requests.
- π² 30be235 Add microseconds to log lines.
- β 0f785b7 Fix Cypress tests to work with new auth and other UI changes.
- 8c07a2a Fix broken status in subscriber export query.
- β 71f9e86 Show OIDC URL warning only when enabled on the UI.
- 03744e0 Fix broken settings references on forms page
- β‘οΈ d02a9d6 Update it.json (#2085)
- π 6fe47b2 Merge pull request #2082 from knadh/multiuser
- 39463d7 Refresh i18n langauge strings.
- β cc71899 Add non-prod ODIC URL warning on admin settings UI.
- β¬οΈ af06d2e Upgrade prismjs.
- f226aca Add missing auth permissions file.
- π¨ cea65c0 Fix and refactor subscriber batch fetching in campaign processing.
- ee119b0 Fix import not 'unsubscribing' list subs for already blacklisted subscribers. Ref #1931.
- π¨ a268341 Refactor subscriber APIs list permission filtering.
- d9b4bae Rename migration to v4.0.0
- 0331e3c Sory users by
created_atalways. - eb47e80 Fix list auth by adding an explicit 'getAll' flag to query.
- β‘οΈ 3671a52 Update profile UI with new user data structures.
- π ae2a386 Add support for "list roles".
- 12a6451 Add list permission check to subscriber calls.
- d74e067 Add per-list permission to list management.
- β¬οΈ 982e8d8 Fix post v4.x.x upgrade warning on admin UI.
- β¬οΈ f8e6eaa Add docs for v4.x.x multi-user upgrade changes.
- π 26c6db0 Remove admin user/password from ...
-
v4.0.1 Changes
October 28, 2024π Skip this version and upgrade to v4.1.0 instead.

