All Versions
30
Latest Version
Avg Release Cycle
106 days
Latest Release
102 days ago

Changelog History
Page 1

  • v6.2.0 Changes

    June 26, 2026

    listmonk-logo

    πŸ”’ 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 db
    

    What'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 $GOPATH is not set by @dfabulich in #3097
    • βž• Added API endpoint for SQL based list changes by @NWTrident in #3093
    • πŸ‘Œ Support robots.txt in 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

    Full Changelog : v6.1.0...v6.2.0

  • v6.1.0 Changes

    March 29, 2026

    listmonk-logo

    πŸ”’ 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/:id endpoint for partial subscriber updates.
    • πŸ†• New granular campaigns:send permission, separate from campaigns:manage for finer access control.
    • πŸ†• New altbody param to /api/tx for 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:send permission and separate it from campaigns:manage.
    • ⚑️ 00bae68 Update go-pop3 with BOM fix. Closes #2959.
    • 24817d5 Add PATCH /api/subscribers/:id to 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_EPOCH in 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.yml to .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 manifest to docker buildx imagetools in nightly job to fix manifest error.
    • πŸ— 5436d08 Add --amend to 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 nightly releases.
    • 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

    listmonk-logo

    πŸš€ 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 password reset flow.
    • Ability to archive lists.
    • πŸ’» Subscriber activity in the Subscriber profile UI.
    • Ability to send transactional mails to non-subscribers via the /api/tx API.
    • Campaign-level JSON {} attributes just like subscriber attributes.
    • Granular override on subscriptions / subscriber profile in bulk import.
    • 🚧 In-built Postgres VACUUM cron in Maintenance settings for large databases.
    • πŸ”’ CORS origin configuration in Security settings

    πŸ›  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 attribs to 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 viewport meta 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-config file 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 ANALYZE support for DB maintenance.
    • πŸ‘ 67ad4d5 Add external recipient support to /api/tx endpoint.
    • 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_lists on list update. Closes #2734.
    • πŸ‘ 2074604 Add archival support to lists.
    • 6417f30 Stop recording to send count 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 query param 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 password reset flow to the admin. Closes #2753.
    • ⚠ ea1eb3f Add warning to users:manage permission 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=all not working on GET bounces API. Closes #2678.
    • b7e8b1e Fix tx handler incorrectly sanitizing subscriber_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

    listmonk-logo

    ⚑️ 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.html static 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_query permission 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 subject param to tx API. Closes #2333.
    • πŸ’» ad66878 Fix list action icons not showing on the UI based on permissions. Closes #2640.
    • fbe4c5c Make session cookie 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-Unsubscribe header 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 replace in 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

    listmonk-logo

    βœ… 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/subscription on 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 smtppool lib 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.
  • v5.0.2 Changes

    June 08, 2025

    listmonk-logo

    ⚑️ v5.0.2 contains an important security update which disables the env and expandenv Sprig 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

    listmonk-logo

    πŸš€ 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.

    πŸ‘€ listmonk-dashboard

    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 Unschedule button.
      • UX improvement that automatically switches scheduled campaigns to draft when send_at is removed.
      • Add format/content type selection to the first screen on campaign creation.
      • Ctrl+S short 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_all and campaigns:manage_all permissions. 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 get list permission check to bulk subscriber list management.
      • Proper enforcement of the subscribers:sql_query permission with SQL query analysis and table allow-listing. Addresses #2412.
    • 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 Copy button on subscribers and campaigns tables for copying names and e-mails to clickboard.
      • Checkered bg on media thumbnails to visualize transparency.
    • 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 TrackLink regexp.
    • 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 TrackLink regexp. 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 type field. 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_source to 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 Must config variables non-Must so 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 Preview option to the campaign archive tab. Closes #2245.
    • πŸ’» b67fc5e Replace CodeFlask code editor with CodeMirror on the UI.
    • 53d7929 Prepare first RC.
    • ⬆️ ffbda01 Add sample visual campaign template on install and upgrade.
    • πŸ‘― 445d7e5 Fix clone campaign by 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-builder src 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 Copy button to subscribers and campaigns tables UI.
    • a85e467 Add missing charset for numbers in TrackLink regex. (#2404)
    • 🚚 fb52700 Remove GET /api/settings dependency on the Lists -> Forms UI.
    • πŸ”€ b44ea0c Merge branch 'fix-sql-search'
    • 75aad8e Add new search param to paginated API response structure.
    • 29591c1 Add get list 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_query permission.
    • 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_USER to --install. Closes #2314, #2322.
    • b3e6b09 Bump vite from 5.4.15 to 5.4.17 in /frontend (#2391)
    • 🚚 0826f40 Remove repetitive URL param :id validation and simplify handlers.
    • βœ… e6d3aad Add ability to wait and healthcheck for backend app in Cypress settings tests.
    • 🚚 78366ab Clean up main initialization to remove app interdepencies in init.
    • 🚚 8848922 Remove superfluous consts dep in init functions by separating URL consts.
    • πŸ“¦ e2f24a1 Turn notifs into a special stateful global singleton package, removing clunky deps.
    • 🚚 e327ebb Move all HTTP handlers directly to App and remove the redundant in-between layer.
    • πŸ”¨ b3d46a8 Refactor system notification callbacks into a new notifs package.
    • πŸ”¨ 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 smtppool to v2 and 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 draft when send_at date it removed.
    • ⏱ 61c6b7e Add explicit Unschedule button on campaign UI.
    • 🚚 fd31ac6 Remove redundant send_later param in campaign POST/PUT.
    • e8fd12b Add List-Unsubscribe header 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 all to subscriber deletion by query which broke with query validation. Ref: #2122.
    • a129111 Replace broken indent JS lib with js-beautify. Closes #2182.
    • 🚚 1c33d32 Remove redundant event from boun...
  • v4.1.0 Changes

    November 12, 2024

    listmonk-logo

    πŸš€ 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_username and admin_password fields 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 description to List and NewList, 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_at always.
    • 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.