The interactive file manager requires Javascript. Please enable it or use sftp or scp.
You may still browse the files here.
v5.0.0 is a major 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
Unschedule
button. - UX improvement that automatically switches scheduled campaigns to
draft
whensend_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
andcampaigns: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.
- 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
Copy
button 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
:::shell
# cd /directory/with/docker-compose.yml
docker-compose down
docker-compose pull && docker-compose run --rm app ./listmonk --upgrade
docker-compose up -d app db
Changelog
- 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 withCodeMirror
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
tov2
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
whensend_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 withquery
validation. Ref: [#2122]. - a1291114 Replace broken
indent
JS lib withjs-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