v5.0.0
knadh/listmonkv5.0.0Apr 28, 2025by github-actions[bot]
AI Summary
v5.0.0 is a major release introducing the visual email builder. Note: Users should upgrade to v5.0.2 for bug fixes and security improvements.
Key Highlights
- Visual email builder and template editor with one-click conversion
- CodeMirror for HTML, CSS, Javascript, Markdown editing
- Per-campaign SMTP selection
- Campaign archive view with slug support
- OIDC authentication support
- Multi-user permission system
- Query caching for large databases
New Features
- Visual email builder
- CodeMirror editor
- Per-campaign SMTP
- Campaign slugs
- OIDC auth
Full Release Notes
Skip this release and upgrade to [v5.0.2](https://github.com/knadh/listmonk/releases/tag/v5.0.2) instead for multiple fixes (UX bugs and a security fix) ## Changelog * 3b8a8c23 Add email-builder/dist to .gitignore. * 8902320a Update screenshot on README. * a7085cb5 Update homepage. * 11f52ee8 Switch migration version to v5 * 47e8f816 Default `body_source` to null instead of empty string in non-visual campaigns. * 925cdf28 Add visual template and new permissions to docs. * 1599957d Add and auto-translate missing i18n strings in all language packs. * db81dc1d Remove default dummy admin notification email settings. * 9de19ea2 Fix Codemirror Cypress tests in templates and form pages. * 92fc6469 Update sdks.md: add client for java/kotlin (#2426) * 81b62a4a Fix race condition in immediate campaign pause-start actions. * d3c8eca4 Upgrade Go deps. * 0dc29b7d Fix CSV example on the subscriber import UI. * 953deef4 Hide 'New' and 'Save' buttons on the templates UI if there's no manage permission. * 77913275 Make `Must` config variables non-`Must` so that the app doesn't panic on their absence. * 8fc3d27b Merge pull request #2423 from knadh/dependabot/npm_and_yarn/frontend/email-builder/vite-5.4.18 * 3dfdf48d Merge pull request #2424 from knadh/dependabot/npm_and_yarn/frontend/email-builder/babel/runtime-7.27.0 * 12bc7986 Make OIDC provider name display on login button configurable. Closes #2211 * 88854376 Bump @babel/runtime from 7.26.0 to 7.27.0 in /frontend/email-builder * 6707b634 Bump vite from 5.4.10 to 5.4.18 in /frontend/email-builder * 5477c169 Merge pull request #2373 from knadh/feat-visual-editor * ed700d7a Add a `Preview` option to the campaign archive tab. Closes #2245. * b67fc5ea Replace `CodeFlask` code editor with `CodeMirror` on the UI. * 53d79297 Prepare first RC. * ffbda019 Add sample visual campaign template on install and upgrade. * 445d7e53 Fix `clone campaign` by fetching campaign body on clone. * 1559c55a Add visual editor Cypress tests. * ded0fcfa Fix broken visual template cloning on the templates UI. * dcdef8ea Add format/content type selection to campaign creation UI. * d3da0be6 Fix `test campaign' sending wrong template for visual campaigns. * 5207dff7 Fix visual editor change event/init/import sequences. * 968b366b Stop fetching bodies for all campaigns and explicitly fetch for visual campaign import. * 20e4b100 Fix DB state issues in visual campaign cloning. * f4c0e66a Refactor 'media upload' integration in campaign visual editor. * 3aba2b00 Fix frontend/email-builder Makefile build steps. * 343d405b Add Ctrl+S campaign save shortcut and add Ctrl+S and F9 to richtext editor. * e4e735e0 Update tsx formatting in email-builder. * 503e9855 Add support for converting all types to visual editor blocks. * f1fbadf6 Fix incorrect template states in DB in campaign creation and broken preview. * cee2589a Move `email-builder` src from `/` to `/frontend`. * 110345d6 Refactor and simplify state management in campaign editor. * fca5ec5a Change visual editor UI language. * 7786b184 Add DB migrations for visual editor. * c1f81cfa Fix compatibility issues with `master`. * 82e2b705 fix: Move visual-editor to iframe so that CSS styles are isolated. * 4a524c93 feat: Integrate media selector to visual editor and add minor fixes. * e6f08a05 feat: Inject email-builder instead of loading it as ES module * ae982808 feat: Integrate email-builder on campaign/template editor UI and backend. * 5a0980e5 Add on-hover one-click `Copy` button to subscribers and campaigns tables UI. * a85e467c Add missing charset for numbers in TrackLink regex. (#2404) * fb527008 Remove `GET /api/settings` dependency on the Lists -> Forms UI. * b44ea0c3 Merge branch 'fix-sql-search' * 75aad8ec Add new `search` param to paginated API response structure. * 29591c18 Add `get` list permission check to bulk subscriber list management. * fca8d6de Bump vite from 5.4.17 to 5.4.18 in /frontend (#2416) * 4b805f88 Fix broken `subscribers:sql_query` permission. * 375e3856 Bump golang.org/x/net from 0.36.0 to 0.38.0 (#2413) * 4d8c8cde Update installation.md (#2405) * 5971bc4a Fix Raw CSV example on import UI (#2392) * 562e52cd Introduce `LISTMONK_ADMIN_API_USER` to `--install`. Closes #2314, #2322. * b3e6b099 Bump vite from 5.4.15 to 5.4.17 in /frontend (#2391) * 0826f401 Remove repetitive URL param `:id` validation and simplify handlers. * e6d3aad0 Add ability to wait and healthcheck for backend app in Cypress settings tests. * 78366ab7 Clean up main initialization to remove `app` interdepencies in init. * 88489223 Remove superfluous `consts` dep in init functions by separating URL consts. * e2f24a14 Turn `notifs` into a special stateful global singleton package, removing clunky deps. * e327ebbb Move all HTTP handlers directly to `App` and remove the redundant in-between layer. * b3d46a8c Refactor system notification callbacks into a new `notifs` package. * 00c858fc Refactor all HTTP handlers and attach them to a single struct. * 007f4de8 Fix a number of cosmetic inconsistenies across handlers and functions. * fcf2449a Replace awkward auth user object access in handlers with an explicit func. * 17998fbf Refactor user auth models and permission checks. * 5c785064 Refactor superfluous list perm check middleware into standalone function. * a271bf54 Introduce per-campaign filter permissions. Closes #2325. * a5f8b28c Fix inconsistent behaviour in campaign scheduling on the UI. * fbc27ae4 Refactor UI time diff display function to prefix '-' on past dates. * 92e5d630 Fix various static-check/idiom warnings. * b18c7ad0 Fix incorrect loading spinner on the Lists UI. Closes #1822. * d1c964da Bump vite from 5.4.12 to 5.4.15 in /frontend (#2379) * b8f50eaf Add support for domain allowlists in addition to blocklists. Closes #2230. * 6efb6e76 Upgrade `smtppool` to `v2` and add support for concrete SSL options. * e4a18dab Remove forcing unique filename on all media uploads. * ef8f3191 Remove obsolete language key and refresh i18n files. * 9224e344 Update i18n refresh script to remove deleted base keys from all other files. * 5f1b6764 Remove ASCII-only restriction on media filenames. Closes #2277. * 0be7a79d Fix broken log rendering on importer UI. * 1b43e1a0 Add minor i18n Hungarian language pack fixes (#2375) * 06c2f3b9 Add Nuxt.js module to Supported Libraries Lists (#2371) * 473f9427 Add i18n Hungarian language pack fixes (#2370) * 7d3e6e61 Fix too greedy TrackLink regex replacement. (#2355) * 79f8b60e Updating documentation to reflect AWS Console changes (#2365) * 625f6167 Change the docker-compose example to bind Postgres locally. Closes #2357. * de9a8ea4 Add Bulgarian i18n translation (#2349) * f3101316 Update Go version to v1.24.1 * d43ac107 Tidy go.mod * f34551d2 Bump golang.org/x/net from 0.33.0 to 0.36.0 (#2348) * 2005e7a4 Bump github.com/go-jose/go-jose/v3 from 3.0.3 to 3.0.4 (#2346) * bc5b8175 Bump axios from 1.7.9 to 1.8.2 in /frontend (#2347) * a9869612 Disallow private list UUIDs on public sub endpoints. Closes #2296. * 8dc5bc29 Bump prismjs from 1.29.0 to 1.30.0 in /frontend (#2345) * f8d07ad9 Fix DELETE list documentation. (#2335) * 06768ba8 Fix ru i18n lang (#2330) * e649cf6f docs: improve clarity and consistency of user-related translations (#2324) * d3a417d1 Fix typo in function name. * 2defef38 Refactor SMTP name to always have `email-` prefix for consistency. * 24af0bc2 Update ca.json (#2303) * d055cc53 Add support for selecting SMTP per campaign (#2290) * 756e3915 Fix typos in subscribers.md (#2302) * 61d7a9d2 Update cs-cz.json (#2293) * 2f5ab4c6 Display filename and milliseconds in timestamp on the logs admin UI (#2280) * ad162c25 Bump vite from 5.4.11 to 5.4.12 in /frontend (#2268) * 86f9ad05 Add Norwegian Bokmål (no.json) i18n language pack (#2289) * d0321baf fix: typo in callout under the settings page (#2283) * c3069e55 Update Finnish translation (#2270) * 672d8ffb Merge pull request #2269 from s-en-o/patch-1 * 1446fbb5 fix(static): no matching closing anchor tag * 7153777b Merge pull request #2266 from vinitparekh17/patch-1 * 7c952e78 docs: removed duplicate line * afa717fd Upgrade smtp-pool lib fixing non-FQDN hostnames. Closes #2146. * ff19a34f Fix bounce meta JSON overflowing in the table on admin UI. Closes #1797. * 0e49a4bb Merge pull request #2264 from knadh/edit-campaign * 3d383cd5 Make paused campaigns editable. * 5ba0adcb Automatically switch scheduled campaigns to `draft` when `send_at` date it removed. * 61c6b7e1 Add explicit `Unschedule` button on campaign UI. * fd31ac6f Remove redundant `send_later` param in campaign POST/PUT. * e8fd12bd Add `List-Unsubscribe` header to opt-in confirmation mails. Closes #2224. * 2e8a5ace Add user roles/perms documentation. Closes #2242. * 0930a22b Add VACUUM to maintenance section in docs. * e2aa9c53 Make media image background checkered to show transparency. Closes #2080. * c8771562 Bump golang.org/x/net from 0.23.0 to 0.33.0 (#2253) * a5e56c34 fix: forwardemail bounce processing invalid signature issue (#2250) * 0878f3e6 Add Laravel SDK to Supported Libraries Lists (#2240) * 50b296da Remove GitHub from OIDC shortcuts as it doesn't support OIDC. Closes #2235. * b75de39f Fix elest.io image in docs (#2239) * cb9b7985 Fix typo in de i118 (#2236) * 62c996bc Fix typo (#2233) * 2abc0a86 Apply minor Go code fixes (#2219) * 98934e60 Fix outdated docker local dev suite (#2200) * 97fde644 Make CSV (import) header fields agnostic of surrounding spaces. Closes #2189. * 63712285 Fix schema and add migration for incorrect subscriber count (null) in materialized view. * 5c0de6ef Fix broken sorting lists by `subscriber_count`. Closes #2151. * 7bfbd6a8 Add `all` to subscriber deletion by query which broke with `query` validation. Ref: #2122. * a1291114 Replace broken `indent` JS lib with `js-beautify`. Closes #2182. * 1c33d32b Remove redundant event from bounces UI. Closes #1850. * cb99d600 Fix loading of messengers from serverConfig on line 629 (#2187) * 3f5bad1a Fix incorrent curl command in docs. * fce46b21 fix: update OpenAPI specs for routes and correct docs for campaign endpoints (#2179) * 882c49f1 Bump cross-spawn from 7.0.3 to 7.0.6 in /frontend (#2169) * ee9677cd removes example properties from attribs property and allow additional properties (#2154) * 1451c4b1 Improve API auth/permission docs and examples. * 392bc872 Add curl example to subscriber import docs. * 1198f6f3 Update release link on static site homepage. ## New Contributors * @dylancetin made their first contribution in https://github.com/knadh/listmonk/pull/2179 * @centja1 made their first contribution in https://github.com/knadh/listmonk/pull/2187 * @flyotlin made their first contribution in https://github.com/knadh/listmonk/pull/2200 * @ANU7MADHAV made their first contribution in https://github.com/knadh/listmonk/pull/2219 * @bharatkashyap made their first contribution in https://github.com/knadh/listmonk/pull/2233 * @xelayz made their first contribution in https://github.com/knadh/listmonk/pull/2236 * @trishitchar made their first contribution in https://github.com/knadh/listmonk/pull/2239 * @theafolayan made their first contribution in https://github.com/knadh/listmonk/pull/2240 * @vinitparekh17 made their first contribution in https://github.com/knadh/listmonk/pull/2266 * @s-en-o made their first contribution in https://github.com/knadh/listmonk/pull/2269 * @mlaht made their first contribution in https://github.com/knadh/listmonk/pull/2270 * @yeskunall made their first contribution in https://github.com/knadh/listmonk/pull/2283 * @vegardgithub made their first contribution in https://github.com/knadh/listmonk/pull/2289 * @savioribeiro made their first contribution in https://github.com/knadh/listmonk/pull/2280 * @matejdivecky made their first contribution in https://github.com/knadh/listmonk/pull/2293 * @candidexmedia made their first contribution in https://github.com/knadh/listmonk/pull/2302 * @lcd1232 made their first contribution in https://github.com/knadh/listmonk/pull/2290 * @fquinto made their first contribution in https://github.com/knadh/listmonk/pull/2303 * @appleboy made their first contribution in https://github.com/knadh/listmonk/pull/2324 * @Impeck made their first contribution in https://github.com/knadh/listmonk/pull/2330 * @marcw made their first contribution in https://github.com/knadh/listmonk/pull/2335 * @listumps made their first contribution in https://github.com/knadh/listmonk/pull/2349 * @brismuth made their first contribution in https://github.com/knadh/listmonk/pull/2365 * @0xdeb made their first contribution in https://github.com/knadh/listmonk/pull/2355 * @trustedtomato made their first contribution in https://github.com/knadh/listmonk/pull/2370 * @roncallyt made their first contribution in https://github.com/knadh/listmonk/pull/2371 * @pierreneillo made their first contribution in https://github.com/knadh/listmonk/pull/2392 * @hlassiege made their first contribution in https://github.com/knadh/listmonk/pull/2426 **Full Changelog**: https://github.com/knadh/listmonk/compare/v4.1.0...v5.0.0