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.
- 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 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