Releases: knadh/listmonk
v5.0.3
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.yml
docker-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
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.yml
docker-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
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
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
# cd /directory/with/docker-compose.yml
docke
8000
r-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
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
- 47e8f81 Default
body_source
to null instead of empty string in non-visual campaigns. - 925cdf2 Add vis 10000 ual 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 withCodeMirror
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
tov2
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
whensend_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 withquery
validation. Ref: #2122. - a129111 Replace broken
indent
JS lib withjs-beautify
. Closes #2182. - 1c33d32 Remove redundant event from boun...
v4.1.0
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.yml
docker-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
toList
andNewList
, 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
v4.0.0
v3.0.0
v3.0.0 is a major release with a significant number of improvements and fixes.
What's new?
- The concurrent core or the "engine" is completely re-written. Campaign pausing and cancellations are now near-instant and lossless. Concurrent campaign sending performance has improved significantly. The
sent
count now accounts for every single message rather than an approximation. - Major performance improvements for large databases with the new
Settings -> Performance -> Cache slow queries
option. On installations with millions of subscribers, enabling this speeds up database queries (retrieving lists, subscribers etc.) by several orders of magnitude. On a production database with ~14 million subscribers, the speed up on the lists page was 2000x, from ~20s to ~10ms. - New frontend dependency and build system refactor, speeding the admin pages (and the development build process).
- Addressed the root cause of mysterious SMTP sending errors that triggered only in certain SMTP environments.
- New fields for filtering lists, campaigns, subscribers in query APIs.
- Campaign archives now support βslugsβ (clean permalinks) for public URLs instead of UUIDs.
- Major refactor and cleanup of documentation.
F9
shortcut key for campaign and template previews.- Many quality-of-life improvements, fixes, and dependency upgrades.
How to upgrade
As always, take a backup of your database before upgrading.
Binary
Download the latest binary. Stop and replace the old binary. Run ./listmonk --upgrade
. Start the app again.
Docker
# cd /directory/with/docker-compose.yml
docker-compose down
docker-compose pull && docker-compose run --rm app ./listmonk --upgrade
docker-compose up -d app db
Changelog
- f9120d9 Auto-translate one missing i18n key..
- 36e39e5 Auto-translate missing i18n scripts.
- 8939d27 Reformat
sl
i18n language file. - 82894e5 Simplify default e-mail template.
- dc43e9c Configure Markdown parser to not escape double quotes. Closes #1698.
- 3103bbc feat: Add Slovenian localization (#1704)
- d70236c Fix incorrect error message in tx template preview.
- 2841586 Fix sorting in camapaign analytics view counts.
- 6cb9982 Add
.IndividualTracking
to public templates. Closes #1663. - 74ef6f5 Add a 'view' link on the lists page. Closes #1674.
- 7c44eb0 Replace Go easyjson lib.
- f14df89 Update Go deps.
- f0a3cbd Remove redundant SMTP test error toast on the admin UI.
- 45f4ae1 Add performance/query caching docs.
- 9adc5e7 Refactor navigation and styling in docs.
- bb1492b Merge branch 'query-performance'
- 5a3664a Add support for caching slow queries on large databases.
- a5b06a8 fixed railway icon and spelling bug (#1696)
- 9e96649 Update schema.sql - change default bounce settings (#1669)
- 67bc2ce Improve SES bounce processing docs (#1676)
- 98fa3e0 Update templating.md with command to fetch templates from repo (#1677)
- e42ab9c Bump vite from 5.0.10 to 5.0.12 in /frontend (#1680)
- 0935e9c Bump follow-redirects from 1.15.3 to 1.15.4 in /frontend (#1664)
- 4c5df16 Add deploy template for RepoCloud.io (#1662)
- 2f487de Log subscriber id/uuid on failed opt-in message push. Closes #1333.
- 908173c Style the 'fix code' buttn on campaign archive tab.
- d8ca26e Add a 'template reference' docs link next to campaign editor. Closes #1405.
- 9109097 Remove incorrect API def from docs. Closes #1658.
- 7067f05 Update listmonk-simple.service - add optional log file (#1640)
- 8677151 Merge branch 'slug'
- 0d319ad Add 'slug' (permalink) support for campaign archives. Closes #1394.
- 78caa35 fix: add copying campaign object before sending test message (#1659)
- 3335171 Fix (accidentally) broken migration scripts.
- 3711bed Fix clipboard copy prop on template form.
- bd2990f Add F9 shortcut key for toggling campaign and template previews.
- 234fd11 Fix incorrect label on maintenance UI. Closes #1652.
- a93031d Make Makefile accept custom build versions from env for dev builds.
- fa2c840 Rename v2.6.0 migration to v3.0.0, the next major release.
- a6d55d6 Upgrade smtp-pool lib fixing bad conn state issues.
- 8add9d6 Merge branch 'fix-campaign-sent'
- 9a96134 Update installation.md +tut & minor changes (#1647)
- 772476c Add accurate sent count, last sent subscriber tracking on campaigns.
- 414c5c0 Refactor the core concurrent campaign manager logic.
- 0c9dc07 Add a
?v=hash
cache breaker (that changes on restart) to static assets. - a2629c2 Make all ID/UUID labels on the UI onclick -> clipboard copy.
- b946c33 Fix broken chart components.
- 2feb1b0 Make the name part in
from
e-mails optional. Closes #1602. - b2a5e37 Fix incorrect form messages on public re-subscription to double opt-in lists. Closes #1638.
- bce6758 Fix preconfirm option not working on bulk 'select all' subscriber list management. Closes #1646.
- 0d74619 Make providing
name
in subscriber creation optional and assign internally. Closes #1630. - a9a7156 Scroll TinyMCE richtext editor back to caret on dialog close. Closes #1635.
- db17fa1 Restore tab selection on campaign page on reload.
- 49bbf92 Merge branch 'upgrade-frontend'
- ef77a7e Replace c3js with chart.js for major dep size reduction.
- f4b2446 Update configuration.md +logs section (#1641)
- 9bd7511 Update italian translation (#1644)
- af8b420 Refactor and upgrade the frontend vue code to work with vite instead of webpack.
- 51af75c Add subscription status filter to subscriber list query and admin UI.
- 8f12c03 Fix newly created lists not showing up on other pages automatically. Closes #1589.
- 01acd38 Add tag/type/optin filter options to lists and campaigns APIs. Closes #1631.
- c468e7a Upgrade Cypress to latest version.
- 5d63574 Skip non-existent dirs in
--static-dir
mode to use default stuffed dirs. Closes #1599. - aba7111 Fix default non-stuffed frontend dir path.
- dd87a10 Addte listmonk-simple.service (#1622)
- 6a26580 Update general-question.md
- 9a30067 Create da.json (Danish translation) (#1628)
- 80b2537 Bump golang.org/x/crypto from 0.15.0 to 0.17.0 (#1632)
- be62c50 feat: Add
from_email
to postback struct for sending tx postbacks (#1623) - e869f7b Translate to Ukrainian (#1606)
- b6922b0 Suppress 'no campaign' errors on pixel view registration. Closes #1588.
- 95dabe5 Update upgrade.md +binary info (#1613)
- e06d379 Update installation.md +tutorials (#1611)
- 7c99167 Update installation.md +changing port (#1607)
- fa50664 Add i18n Greek translation (#1605)
- 53eb71a Add 404 HTTP handlers to prevent those requests going to BasicAuth endpoints.
- 2ce2a11 feat: docker compose use alpine for postgres (#1603)
- 52ee79b chore: noreferrer for listmonk url in footer (#1601)
- 524be27 Bump tinymce from 5.10.8 to 5.10.9 in /frontend (#1592)
- 75befe5 ππ β Fix /api/subscribers/lists doc (#1594)
- 4577868 chore: remove refs to deprecated io/ioutil (#1593)
- c59825f Fix broken sorting (lists -> subcount, subscribers -> status) in queries. Closes #1076.
- 06b4 DA97 494 Fix incorrect sanitisation of search queries on list/campaign frontend.
- 82c74cd Bump golang.org/x/image from 0.6.0 to 0.10.0 (#1580)
- 4c8c19e Update configuration.md - update path due to recent install path change (#1581)
- d439ecf Bump axios from 0.27.2 to 1.6.0 in /frontend (#1587)
- ef08495 Make the unsub form on opt-in confirmation e-mail open 'manage' by default. Closes #1515.
- 44d3462 Fix 'confirmed' subscriptions becoming 'unconfirmed' on public form re-signup. Closes #1441.
- 62be5e2 Fix mysteriously broken frontend build by switching eslint parser dep.
- 49ec11c Merge branch 'refactor-docs'
- e8ecdf8 Fix mkdocs links in docs.
- ff135ec Add 'copy code' button to code snippets in docs.
- be4be72 Refactor and clean up API Markdown docs.
- f8a55f8 Fix mkdocs navbar shadow
- 9e3af91 Update fr.json (#1586)
- f720e88 Refactor hr style in mkdocs template.
- b29f565 Fix broken table in campaign doc. Closes #1585.
- 3641f74 Add missing
header
field in campaign creation docs. Closes #1561. - ccceaa6 Bump @babel/traverse from 7.21.3 to 7.23.2 in /frontend (#1563)
- c7882bb Bump tinymce from 5.10.7 to 5.10.8 in /frontend (#1564)
- fd05a6d Update installation.md - add cd listmonk (#1576)
- 06332d5 Update de.json (#1572)
- 1ebd80c Add Hebrew translation. Closes #1517.
- 491fab3 Update i18n language files.
- 764a052 Bump golang.org/x/net from 0.8.0 to 0.17.0 (#1555)
- c911aeb Fix attachments being omitted from postback (#1557)
- 954ed45 Fix incorrect Slovak language code. Closes #1533.
- a61a9d8 Fix preference management logic to avoid unnecessary DB calls.
- 99c71a2 fix: update inlang settings (#1529)
- 82c3c68 Clean root URL of trailing slashes when updating settings.
- 04e571d Fix file fetch in attachments failing for signed URLs. Closes #1499.
- 8f2a08b Fix invalid suffix 'd' in timestring string in s3 expiry config.
- 11f90b2 Fix typo in i18n S3 expiry description.
- 5af6252 Fix make not picking up semver from git archive builds. Fixes #1380.
- 717a636 Add Sprig and other tpl functions to static templates as well. Closes #1527.
- 7019f26 Fix docs for public subscription api (#1522)
- 9423c74 Docker Multi Arch (esp. ARM) builds: Improving Build File (#1451)
- 2b95c88 Add Postmark bounce webhook support (refactor #1385) (#1485)
- e5ac111 Update installation.md - fly.io instructions not working (#1487)
- 34d86fc Update installation.md (#1494)
- 5664e5c fix: replace docker-compose with docker compose (#1490)
- 83c88d7 Escape search query in list search. Closes #1471.
- 16eeb94 added "tutorials" section and other minor edits (#1444)
- e317f2c Modify
sed
flag based on OS. Closes #1474. - 25513b8 go: bump to 1.20 (#1479)
- eefcbc3 Fix hardcoded DB name in 'about' SQL query. Closes #1477.
- 52a7298 Update bounces...
v2.5.1
What's new
- The major new feature in this release is support for arbitrary file attachments. The media "gallery" UI/UX has changed to accept arbitrary file uploads which can be attached to campaigns.
- "Record opt-in IP" option in Settings -> Privacy that optionally records the IP from which a subscriber completes a double opt-in. This is a compliance requirement in certain jurisdictions.
- A new table on the subscriber editing popup that shows subscription details for all lists (including the optional opt-in IP)
- New API
/api/about
that returns generally useful system and installation info. - Better error notification. Async errors that were logged in Settings -> Logs are now streamed to the UI and displayed as toasts.
- New bounce types and support for variable actions per type.
Note: v2.5.0 was the major release, however, v2.5.1
was worth releasing just to have this one tiny UI bug fix that would have otherwise confused annoyed a lot of users.
This version has several minor bug 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.yml
docker-compose down
docker-compose pull && docker-compose run --rm app ./listmonk --upgrade
docker-compose up -d app db
Changelog
- a6a2b69 Make public subscription API follow the 'enable public' setting.
- 79ff729 Fix broken dummy password warning on SMTP test UI. Closes #1450.
- 32b979e Update subscriber docs and add public subscription API. Closes #1449.
- 2f07435 Update bounces docs (#1445)
- e258ffd Update configuration docs (#1446)
- f3e9b08 Update release on website.
- ea2f93e Fix GH actions write permission.
- 54979c5 ci: add qemu for multi-arch
- 14e2837 ci: Update release.yml (#1440)
- 0562e5d Apply minor fixes to the admin maintenance page template.
- f4f51d1 Add classes to public forms to make them scriptable.
- b1fa289 update documentation for api/tx to include file attachments and multiple recipients (#1436)
- acca61f Fix race conditions in Cypress tests (sigh).
- 1164afa Fix private lists being unsubscribed from public form and re-factor subscription status view in admin.
- eafae46 Fix incorrect unsubscription behaviour in the public 'Manage' flow. Closes #1407.
- 104c4fc Remove non-crossplatform syscalls from
/api/about
. - a1c507b Fix typo in queries.sql (#1432)
- 2215511 Increase the arbitrarily low max-input-length limit. Closes #1416.
- dcb87a3 Removed unused syscall in
/about
API. Closes #1421, closes #1422. - e89b9ff Remove dead media cleanup flag. Closes #1423.
- a440b79 modified mistakes and typos in translation (#1419)
- 2bfbae7 Update Postgres version in doc strings.
- 3865e95 Update untranslated i18n language strings. Auto-translated with GPT 3.5.
- 93db7c4 Fix incorrect Buefy checkbox colour.
- ad80c71 Add new privacy option 'Record opt-in IP' to record IP address of optin confirmation.
- b26950c Add new subscription list table to the subscriber edit UI modal.
- a628519 Mask passwords on the UI accurately with the actual passwords length.
- 0be5901 Fix lists UI queries overriding full lists in selections elsewhere. Closes #1400.
- 534c875 Ignore common on-reload xhr errors in Cypress.
- 7dd7166 Bump word-wrap from 1.2.3 to 1.2.4 in /frontend (#1403)
- 3663a8b feat: add multiarch docker build support (#1344)
- e1c0bf5 Fix unsubbed subscribers not getting re-sub optin confirmation. Closes #1315.
- d69b766 Enable extra system calls in systemd service (#1309)
- 329b645 Add documentation for archive function. Closes #1396. (#1399)
- 1894af1 Bump semver from 5.7.1 to 5.7.2 in /frontend (#1398)
- c581fe2 Add
GET /api/about
that returns useful system info. Closes #1354. - 5b40461 Stop requiring a DELETE call for fresh impo F438 rt after finished imports. Closes #1369.
- 530165f Fix typos in comments (#1368)
- f94c1f3 fix function name in comment (#1374)
- 92a4d99 Update es.json (#1378)
- 5e24ef9 Update it.json (#1379)
- f577522 Update inlang.config.js (#1359)
- e0cda4b Fix
all
pagination. Closes #1356. Closes #1357. - a2da75c Merge branch 'events'
- 0b2da4c Add support for streaming async events via HTTP serverside events.
- 63bc00d Fix issues in the Swagger collection (#1322). Closes #1321.
- d359ad2 Refactor media management.
- 3b9a0f7 Add support for file attachments on campaigns (#1341)
- cb2a579 Update ro.json (#1326)
- cbbbe40 Fix missing fields in Swagger collection. Closes #1317.
- 5a26279 Fix Swagger collection. Closes #1308. Closes #1313 (PR #1314)
- 917696a Refactor
Messenger
interface. - 9ffc912 Refactor media provider.
- be16297 Fix incorrect assignment of subscriber in message struct. Closes #1307.
- e332622 Added remaining endpoints to the Swagger Collection (#1283)
- 39a627d Upgrade koanf lib to fix mapstructure []byte unmarshal bug.
- 9381e08 Link the Swagger pages on the API doc.
- 8c46b75 build: push docker image to ghcr.io (#1237)
- 101459f actions: generate swagger ui for github pages (#1281)
- 81ac627 Add white background to logo in README for dark mode. Closes #1268.
- 5fc28a7 Add support for variable bounce processing actions.
- 13ad9ad Upgrade
koanf
to v2. - 3baf18e Add support for wildcards in the email domain blocklist.
- 98729f6 Refactor email domain blocklist config field in importer package.
- 476d5be Add support for publishing full content in public archive RSS feed body (#1262)
- 146e8e7 Add missing translation message in maintenance page (#1279)
- 0d4c1d1 Fix portuges missing translations (#1278)
- 7db3d7d Improve i18n editor.
- 71a9138 Add missing i18n languages to the editor
- ad53632 Expanded docs about PUT /api/subscribers/:id (#1269)
- b433ef6 Fix broken SES bounce type check.
- a955102 Add functions to notification templates (#1263)
- d1d0922 Fix gh-pages workflow script to run on push to
master
. - ec7a246 Fix link to the docs repo.
- d4fb3a3 Remove obsolete files.
- 5d3c10d Add new README to the
docs
directory. - 684c15a Add static Hugo website and mkdocs documentation to
docs
directory. (#1261) - 152bd37 Fix no opt-in mails when existing subscribers subscriber to new opt-in lists. Closes #1257.
- 5aedc3a Make media upload file extension validation case insensitive. Closes #1256.
- bf72154 Add Swagger collection for APIs (#1253)
- 4821dd7 Update es.json (#1258)
- d87a01f Include CAPTCHA in HTML form generation.
- eb1d4a3 add support for arm binaries (#1249)
New Contributors
- @navanchauhan made their first contribution in #1249
- @alfredosola made their first contribution in #1258
- @rohansh-tty made their first contribution in #1253
- @peix187 made their first contribution in #1278
- @Thunderbottom made their first contribution in #1281
- @uhlhosting made their first contribution in #1326
- @NilsJacobsen made their first contribution in #1359
- @cuishuang made their first contribution in #1374
- @sonologic made their first contribution in #1399
- @runningnoodle made their first contribution in #1309
- @UnmeshSagar made their first contribution in #1419
- @eltociear made their first contribution in #1432
- @winterleitner made their first contribution in #1436
v2.5.0
What's new
- The major new feature in this release is support for arbitrary file attachments. The media "gallery" UI/UX has changed to accept arbitrary file uploads which can be attached to campaigns.
- "Record opt-in IP" option in Settings -> Privacy that optionally records the IP from which a subscriber completes a double opt-in. This is a compliance requirement in certain jurisdictions.
- A new table on the subscriber editing popup that shows subscription details for all lists (including the optional opt-in IP)
- New API
/api/about
that returns generally useful system and installation info. - Better error notification. Async errors that were logged in Settings -> Logs are now streamed to the UI and displayed as toasts.
- New bounce types and support for variable actions per type.
This version has several minor bug 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.yml
docker-compose down
docker-compose pull && docker-compose run --rm app ./listmonk --upgrade
docker-compose up -d app db
Changelog
- ea2f93e Fix GH actions write permission.
- 54979c5 ci: add qemu for multi-arch
- 14e2837 ci: Update release.yml (#1440)
- 0562e5d Apply minor fixes to the admin maintenance page template.
- f4f51d1 Add classes to public forms to make them scriptable.
- b1fa289 update documentation for api/tx to include file attachments and multiple recipients (#1436)
- acca61f Fix race conditions in Cypress tests (sigh).
- 1164afa Fix private lists being unsubscribed from public form and re-factor subscription status view in admin.
- ea 10000 fae46 Fix incorrect unsubscription behaviour in the public 'Manage' flow. Closes #1407.
- 104c4fc Remove non-crossplatform syscalls from
/api/about
. - a1c507b Fix typo in queries.sql (#1432)
- 2215511 Increase the arbitrarily low max-input-length limit. Closes #1416.
- dcb87a3 Removed unused syscall in
/about
API. Closes #1421, closes #1422. - e89b9ff Remove dead media cleanup flag. Closes #1423.
- a440b79 modified mistakes and typos in translation (#1419)
- 2bfbae7 Update Postgres version in doc strings.
- 3865e95 Update untranslated i18n language strings. Auto-translated with GPT 3.5.
- 93db7c4 Fix incorrect Buefy checkbox colour.
- ad80c71 Add new privacy option 'Record opt-in IP' to record IP address of optin confirmation.
- b26950c Add new subscription list table to the subscriber edit UI modal.
- a628519 Mask passwords on the UI accurately with the actual passwords length.
- 0be5901 Fix lists UI queries overriding full lists in selections elsewhere. Closes #1400.
- 534c875 Ignore common on-reload xhr errors in Cypress.
- 7dd7166 Bump word-wrap from 1.2.3 to 1.2.4 in /frontend (#1403)
- 3663a8b feat: add multiarch docker build support (#1344)
- e1c0bf5 Fix unsubbed subscribers not getting re-sub optin confirmation. Closes #1315.
- d69b766 Enable extra system calls in systemd service (#1309)
- 329b645 Add documentation for archive function. Closes #1396. (#1399)
- 1894af1 Bump semver from 5.7.1 to 5.7.2 in /frontend (#1398)
- c581fe2 Add
GET /api/about
that returns useful system info. Closes #1354. - 5b40461 Stop requiring a DELETE call for fresh import after finished imports. Closes #1369.
- 530165f Fix typos in comments (#1368)
- f94c1f3 fix function name in comment (#1374)
- 92a4d99 Update es.json (#1378)
- 5e24ef9 Update it.json (#1379)
- f577522 Update inlang.config.js (#1359)
- e0cda4b Fix
all
pagination. Closes #1356. Closes #1357. - a2da75c Merge branch 'events'
- 0b2da4c Add support for streaming async events via HTTP serverside events.
- 63bc00d Fix issues in the Swagger collection (#1322). Closes #1321.
- d359ad2 Refactor media management.
- 3b9a0f7 Add support for file attachments on campaigns (#1341)
- cb2a579 Update ro.json (#1326)
- cbbbe40 Fix missing fields in Swagger collection. Closes #1317.
- 5a26279 Fix Swagger collection. Closes #1308. Closes #1313 (PR #1314)
- 917696a Refactor
Messenger
interface. - 9ffc912 Refactor media provider.
- be16297 Fix incorrect assignment of subscriber in message struct. Closes #1307.
- e332622 Added remaining endpoints to the Swagger Collection (#1283)
- 39a627d Upgrade koanf lib to fix mapstructure []byte unmarshal bug.
- 9381e08 Link the Swagger pages on the API doc.
- 8c46b75 build: push docker image to ghcr.io (#1237)
- 101459f actions: generate swagger ui for github pages (#1281)
- 81ac627 Add white background to logo in README for dark mode. Closes #1268.
- 5fc28a7 Add support for variable bounce processing actions.
- 13ad9ad Upgrade
koanf
to v2. - 3baf18e Add support for wildcards in the email domain blocklist.
- 98729f6 Refactor email domain blocklist config field in importer package.
- 476d5be Add support for publishing full content in public archive RSS feed body (#1262)
- 146e8e7 Add missing translation message in maintenance page (#1279)
- 0d4c1d1 Fix portuges missing translations (#1278)
- 7db3d7d Improve i18n editor.
- 71a9138 Add missing i18n languages to the editor
- ad53632 Expanded docs about PUT /api/subscribers/:id (#1269)
- b433ef6 Fix broken SES bounce type check.
- a955102 Add functions to notification templates (#1263)
- d1d0922 Fix gh-pages workflow script to run on push to
master
. - ec7a246 Fix link to the docs repo.
- d4fb3a3 Remove obsolete files.
- 5d3c10d Add new README to the
docs
directory. - 684c15a Add static Hugo website and mkdocs documentation to
docs
directory. (#1261) - 152bd37 Fix no opt-in mails when existing subscribers subscriber to new opt-in lists. Closes #1257.
- 5aedc3a Make media upload file extension validation case insensitive. Closes #1256.
- bf72154 Add Swagger collection for APIs (#1253)
- 4821dd7 Update es.json (#1258)
- d87a01f Include CAPTCHA in HTML form generation.
- eb1d4a3 add support for arm binaries (#1249)
New Contributors
- @navanchauhan made their first contribution in #1249
- @alfredosola made their first contribution in #1258
- @rohansh-tty made their first contribution in #1253
- @peix187 made their first contribution in #1278
- @Thunderbottom made their first contribution in #1281
- @uhlhosting made their first contribution in #1326
- @NilsJacobsen made their first contribution in #1359
- @cuishuang made their first contribution in #1374
- @sonologic made their first contribution in #1399
- @runningnoodle made their first contribution in #1309
- @UnmeshSagar made their first contribution in #1419
- @eltociear made their first contribution in #1432
- @winterleitner made their first contribution in #1436