v7 (beta.2) is a major release with a significant number of improvements and fixes. It's one of the biggest releases to date and has taken several months of work. Check out the beta demo.
It fully replaces the admin UI with a lightweight implementation. It is completely redesigned with major UI and UX improvements and is faster, significantly lighter, more accessible, with a much better mobile view. The admin UI bundle size is reduced by almost 80%.
Important: This is a beta release. If you encounter any issues or unintended behaviour, please report it by opening an issue
How to upgrade
As always, take a backup of your database before upgrading.
Binary
Download the binary from this release. Stop and replace the old binary. Run ./listmonk --upgrade. Start the app again.
Docker
# Edit your `docker-compose.yml` file and change the image name
# from `listmonk/listmonk:latest` to `listmonk/listmonk:beta`
docker compose down
docker compose pull && docker compose run --rm app ./listmonk --upgrade
docker compose up -d app dbBreaking changes
-
The
app.from_emailsetting is now an array of addresses instead of a string, which changes the settings API/api/settings. -
SES webhooks: Allowed SNS topic ARNs must now be configured. Bounce notifications are rejected without this.
-
Azure webhooks: Shared secret is now mandatory.
-
Settings API and storage,
bounce.*JSON structure has changed. -
Transactional API now requires
subscribers:getpermission to target existing subscribers in the DB. -
Several i18n language keys have changed. If you have custom templates with
--static-dir, the language strings will have to be changed. Refer to the upstream directory for changes. -
The old Vue frontend admin has been completely replaced. Certain Admin UI URLs have changed. There are changes to UX, for instance, new list and subscriber creation forms are standalone pages and not popup dialogs anymore.
-
The TinyMCE richtext editor (~500KB) has been replaced with the light weight (~16KB) Squire. TinyMCE after v5, removed several important features from the open-source version, which essentially made upgrades and fixes impossible.
-
For developers, the build steps have changed significantly after getting rid of most Javascript dependencies. The Docker developer environment has changed, and so have all the frontend e2e tests, which have now been ported to Playwright away from Cypress.
What's new?
- Completely redesigned, fast, lightweight, responsive admin UI.
- Native dark mode and a dark theme for the code editor.
- Distinct generated avatars for subscribers, lists, campaigns etc. for easy visual comprehension.
- Filter campaigns by type, status, and tags; sort by creation, update, start, or scheduled-send date.
- Filter lists by visibility and opt-in type, subscribers by status or missing list memberships, and users by type, status, and role.
- Bookmarkable filter/sort links for all views.
- Subscriber, list, user and settings forms are now standalone pages with grouped cards instead of popup dialogs.
- Fully redesigned settings page with better grouping and instant search.
- Media tag, filtering, and categorization.
- Public campaign archives and RSS feeds for individual public lists.
- A new list overview page with info, subscription stats, analytics etc.
- A new campaign overview page with info, subscription stats, analytics etc.
- New list analytics: subscriptions, unsubscriptions, campaign views etc.
- New optional unique-count graphs on campaigns and lists analytics.
- Exhaustive individual subscriber activity breakdown on campaign analytics.
- Support pasting images and files directly into the rich-text editor.
- Filter campaigns by type and status, and sort by created, updated, started and scheduled dates.
- Group by interval (day, week, month etc.), with a new date presets on the analytics page.
- Multiple
Fromaddresses configured in settings. - New standalone subscriber info and activity page.
- Clear subscriber's view / click activity in bulk from the UI and API (
DELETE /api/subscribers/:id/activity/:type). - Fully redesigned bounces page.
- Configurable login session duration, including day units such as
7d. - OIDC: automatic role mapping and autosync based on claims, RP-initiated logout, PKCE support, and several auth fixes.
- Ability to exclude specific SMTP servers from the default
emailmessenger pool. - A one-click Gmail Relay SMTP preset, with support for a custom
HELOhostname. - Improved POP bounce processing that handles many new scenarios.
- Support for plain text notification emails via
*-text.txttemplates. - Throttling for opt-in confirmation emails.
- One-click unsubscribe via the
List-Unsubscribeheader now also removes unconfirmed subscriptions. - New i18n translations and improvements including long pending fixes for date localization.
Fixes
- Many security fixes: permission checks, tightening of
sqlpermission etc. - Fix realtime campaign stats and 'unsent' count tracking.
- String literals now work in subscriber search.
- Bulk deletion now respects tag, status etc. filters.
- Relative CID images load properly in public archive pages.
- Multiple
@TrackLinkUnicode edge cases. - CSV import related issues.
- Campaign analytics miscounting.
- Forgot password/TOTP rate limits.
- Attachment encoding and content types for S3 media.
And numerous other improvements and fixes ...
New Contributors
- @ch4og made their first contribution in #3125
- @corretge made their first contribution in #3141
- @shustovTE made their first contribution in #3136
- @imparpaulo01 made their first contribution in #3152
- @odpay made their first contribution in #3142
- @ecogetaway made their first contribution in #3205
- @pavel1337 made their first contribution in #3204
- @joshuaboniface made their first contribution in #3171
- @derekantrican made their first contribution in #3234
- @moojen made their first contribution in #3232
- @spatterIight made their first contribution in #3242
- @kreshot made their first contribution in #2919
- @codedoga made their first contribution in #3247
- @CoderNasim2023 made their first contribution in #3265
- @biofool made their first contribution in #3255
- @bjarn made their first contribution in #3254
- @Sudaisib made their first contribution in #3201
- @mherzog4 made their first contribution in #3169
- @nemunaire made their first contribution in #3056
- @fuhrysteve made their first contribution in #3219
- @sadfun made their first contribution in #3277
- @CReimer made their first contribution in #3273
- @Mohamed-Almarag made their first contribution in #3281
- @velsa made their first contribution in #3263
- @pcbeingused333 made their first contribution in #3287
- @tiran133 made their first contribution in #3293
- @benoliver999 made their first contribution in #3296
- @jtatum made their first contribution in #3298
- @santhiprakash made their first contribution in #3300
- @kabeer7121 made their first contribution in #3330
- @iitsGaMa made their first contribution in #3322
- @shadavb-cyber made their first contribution in #3335
- @lwc18 made their first contribution in #3337
- @lodewijkloos made their first contribution in #3345
- @muskanbandta23 made their first contribution in #3343
Full Changelog: v6.2.0...v7.0.0-beta.2
