listmonk
High performance, self-hosted newsletter and mailing list manager
Alternative to: mailchimp
v4.1.0
2024-11-12v4.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
- 0a27de16c6e23b7d4b84d4d91fe59bea10877ad1 Replace type field in user creation UI with radio-button for better usability.
- 894d284309378efd8b9e18ffd067579df6869c3f Fix GET subscribers not filtering by list permissions. Closes #2129.
- 8b213f09965668a52fbec7eb0848e1b76743e848 adds property
descriptiontoListandNewList, updates docs (#2150) - 18edc653a8cb7d8711f272bda2ab44053985fe50 Add v4.1.0 migrations.
- abe09d67edbdb88f6583a42664bf9d9bf4cb9159 Refactor OIDC redirect state to have nonce validation. Closes #2138.
- b995cce5d12973a9b827895d10afab1ffb94ba18 Switch login form URLs to relative URIs.
- cb8b54fd00e8fad997f4ce566b10126e3d4e24ec Add ForwardEmail (provider) bounce integration (#2016)
- 03925821fb992b57ae208d1d6f1aef876bfe14bd Add % on campaign analytics pie chart hover (#2124)
- c35ed68759946c3ec1674768060d6b7e8a41c095 Fix quotes in JSON API req example in docs.
- e182fb5660da47dd1923133bc887504f9dabd783 Fix the delete/blocklist by SQL query example in docs.
- 1ac9ccbb8ba10d280c72e54f83bda7cab4049561 Reject blocklist-by-query API requests with no query.
- ac5e10158a0639bf59480caeb7df8c2fa2ad2d4c Reject query-by-delete API requests with no query. Ref #2122.
- d8a394d0f45d76051905d3fb6e89c6efbc658979 Update it.json (#2134)
- 68df63773dc1cfcd3703cba288777435f53172a4 Update curl example to remove username/api_username confusion. Closes #2136.
- 2c02e01aaa3a4908ac1d2e4be9dcfd7e773f3708 #2114 - Fix issue of wrong platform used during docker build (#2123)
- 599147c1029cf27c3a6a9298eaf1ff1006809ca7 fix: favicon markup (#2115)
- be9fe9c7a2a9936c980364e571cb412b3af59a8d Update hu.json (#2102)
- 5abf004655ad457e0fe319ce18487c73957b36b3 fix dummy detection for OIDC client secret (#2116)
- cf7d6644f1df0dc19d4b2a1067a8473f53932d3b Fix broken individual list GET API. Closes #2117.
- ca73e4f1dc71a05591e4410b5bda1270e06727c5 Change wording to ‘one-way mailing list’ on the static homepage.
- 998b6e300af688b27ef02434313d0fc67447771b Remove version info from docker-compose docs to avoid confusion.
- f6ed13a6a968c0f5e362721c67c9004052f19598 Add explicit instructions for older docker-compose files.
- 319053dd7a908e45cf85c9cc78826bed8d786e15 Update release link on static site homepage.
- f5dfb0cf62f1097545ff315a5c1d9ac540d54b9e Remove root URL from login setup form to prevent bad redirect on first install. Closes #2103.
- 136d9d1fa9e69bec8c8c3de2720609ad2f704aeb Don’t fail on chown in Docker entry script. Closes #2104.
- 8ef71aa7a4d85f801a7ae5d592bf3de3888eaff9 Fix docker-compose curl command examples.
- 120d27575b66e314db9d13f4dc52369ab4ac15f1 Update release link on static site homepage.
- 3894571d1ac0b5baa5bcb15a173e4e1020d7a113 Remove obsolete demo file reference from Docker build commands.
- 0f2c679e5b7476b246a8b4a5a3854b55e7abff31 Remove deprecated goreleaser flag from GitHub action workflow.
- 11cb3ce8908aa144a77f87761541765d1301e0c1 Update gorelease Go build version to latest.
- 79f94d35287367deb8867fa3e0b10ee795a1272a Update gorelease command and remove deprecated flags.
- afd5db994a928d57f2844f3571bf29a657bbfc56 Fix incorrect image tag in docker-compose.
- fd04fc1c3ab1d7e7c9ab5f21e3161c8e4d2747be Refresh i18n language files and add (GPT 3.5) auto-translations for new strings.
- 4eefd4215e785f59ab7dec7c7d5fe4157e1c776f Remove redundant campaign manager config validations (#2095)
- 9bad699a5c1633976e49ff4dd4b8186a35795426 Bump google.golang.org/protobuf from 1.31.0 to 1.33.0 (#2083)
- d35dbb0f55119b856a68244620553053aed8308e Bump github.com/go-jose/go-jose/v3 from 3.0.1 to 3.0.3 (#2084)
- b8ae4f6f9e968f53baf756b08535a2562e9e7ff4 Change v4.0.0 migration script to not auto-generate credentials.
- 7fcc6f71e29b0e0866bc8cc746430064b572cb71 Simplify and refactor docker-compose.yml and remove install scripts.
- 24bab75996235b0954005aeb379792d38ad3c515 Add first time login setup template
- 178fa948803176524c03826b4278d697291004e0 Update user login time on password login.
- 5b3d6e2be0af4b24498f537c32d661aecec01ded Add first-time Super Admin setup UI on fresh install.
- 1e4b3a26f2c307ad21a0945d23e614e5681a3546 Separate get individual user and get all users queries.
- 87db0d596b1c1860e76fa90ccfe0d28face4b70d Fix Cypress admin form test to support
rendered HTML. - 25cdb7b18eb41821d76e99ae98929e2b5d714b96 Pull e-mail from userinfo endpoint if OIDC token endpoint doesn’t return it.
- a37d41486940723fae278c0ff5f87a350c2e6156 Add missing GH token to Swagger docs workflow.
- 9760d19b4dbaccb0c4aeeb5b2bbd1758038ab720 Fix button focus/active styles on the UI.
- 69de02ab6dbc0aecf1869bffe6e3adb3ad654735 Restyle and simplify subscriber form UI with tabs.
- b5382b81a166e1a4c512e4d360be08c32d7d88f0 Add user UI frontend tests.
- b2866b1f122a10009ea55c31f548aac9f32001e9 Apply minor style changes and improvements to modals.
- 74e77bd6e0eb5224759e2ea26cc0761e5ba4e9f3 Add names to user form fields for testing.
- 3fdf6fe31e6a4a383991436ecb80c974bd11b1d6 Add individual list permission checks on admin UI.
- 887d5823f47ff218fd1b904f57be820fafd9320c Fix get-users query to return all users when no ID param is given.
- 1075485ca984d372d452a2258b1825a5f17ca5de Merge branch ‘fix-user-query’
- e7109daaf3a34d613b05133f23bdb2608bf6e10d Fix missing email validation in OIDC exchange.
- 7847167145d6b1d9a75e7453284cdf071455d4f6 Fix incorrect id logic in user selection.
- 13222b5eb9a3e5cb0e6fe5401036d687a35573d4 Fix random timing related Cypress test failures (huh).
- 29aa977e6a2b865a7087cff7e0a398b1866f6550 Expand search input width on subscribers UI for smaller screens.
- 354fb300f7ba7fab1ee0aa0f02152d40bc30c241 Replace hardcoded perm literal with const.
- 6258fd5ceef5052a6df003e4b2395c7f01e4aa48 Increase settings UI poll interval to reduce broken requests.
- 30be235e2ab87697d563f0adc8fef8d72a8f3ce6 Add microseconds to log lines.
- 0f785b71736333bde1dc2aba96fd2d90bea83e57 Fix Cypress tests to work with new auth and other UI changes.
- 8c07a2a1c492138b337ca26d3a82d1d23fd2f2fd Fix broken status in subscriber export query.
- 71f9e861e4189ed79057ee548c6a9460f4e25187 Show OIDC URL warning only when enabled on the UI.
- 03744e0dded12f2781b3ddcea9cd6bb764bce610 Fix broken settings references on forms page
- d02a9d62b50f0cd373b5ed49c73eb8ea824cdd49 Update it.json (#2085)
- 6fe47b2e61e52190496eef8bc183cbecba852373 Merge pull request #2082 from knadh/multiuser
- 39463d719db4efb62e2d71e6465d90f5541c6900 Refresh i18n langauge strings.
- cc71899e86465faf831d431ce8b286b7f0087f89 Add non-prod ODIC URL warning on admin settings UI.
- af06d2e462eb30add90b3ae39de34abdcd3e6b54 Upgrade prismjs.
- f226acaa231d426562692cf6ce61337ccf765e92 Add missing auth permissions file.
- cea65c009d3b6675ae5a92bf507f233c502db541 Fix and refactor subscriber batch fetching in campaign processing.
- ee119b008849d6584be119818d53b5956b9a2d53 Fix import not ‘unsubscribing’ list subs for already blacklisted subscribers. Ref #1931.
- a26834196e5ef7419459c8803154f15c24f19f51 Refactor subscriber APIs list permission filtering.
- d9b4bae0a8c73b6f8540b839eef83d540eb96663 Rename migration to v4.0.0
- 0331e3ce4e91db06ff735adf4984cc5d0ffb2dd2 Sory users by
created_atalways. - eb47e80c359d46c8eacec2dab2678a2055b64670 Fix list auth by adding an explicit ‘getAll’ flag to query.
- 3671a5254eedec6fede8636f22641ac86d40e99c Update profile UI with new user data structures.
- ae2a386193193bec2a7cf0d816bf786ee1782484 Add support for “list roles”.
- 12a6451ed01db7df66eda3f85f8e6793b14550e2 Add list permission check to subscriber calls.
- d74e0679617af7df4273bc2308dd1e887efc56d4 Add per-list permission to list management.
- 982e8d8320cbddc2ed1a1a7db4862106978d8506 Fix post v4.x.x upgrade warning on admin UI.
- f8e6eaa2d915b30d92acad423d25914f43650fe3 Add docs for v4.x.x multi-user upgrade changes.
- 26c6db0a1354b35d68bcd547ab56594c4bd442b8 Remove admin user/password from sample config generation.
- 1649b3b135f03dacc55588d4357322d5dec4eeba Fix logic for preventing sole super admin from being wrongly updated/deleted.
- bf00fd2951fce2d7c7ffadeb3f0670cbe91683cb Add support for setting admin user/password via env on
--install. - 68870ad6b181cad058c20833c39a4f8f7e99223b Fix update check looping on failed HTTP requests.
- 2da920d634f50a4e2ab78350f56fd91a525075b5 Add legacy TOML user+password to API auth on init with warning.
- 5024ded763a7234f8dfddf0e93f5399de916d793 Add API user authentication to auth module with caching of creds on user CRUD.
- 0bea9989ec77ff9e91e3a594a49535ffc7d8101d Fix role selection on in user form.
- e6ec1cb9b3dd52da9dfc858824612e31ec008fb6 User legacy (TOML) admin credentials as API creds for backwards compatibility.
- b7155a45e41348dc73f32acb951a0a9b45e4e4a3 Fix admin UI legacy user warning.
- b0f6c22baaf51c07757e43115eb3e1f5f22d10d2 Fix broken subscription status tag on subscriber form UI.
- 1e875afa67def9abcece82e7ecd818e10a9479ca Add OIDC auth hooks (init, callback, session) and finish OIDC support.
- 7c92b654c724067f37554b8f376a6fcdc9073478 Add
avatarfield to user schema for OIDC avatars. - 834f5412639125e751a21c75c690e5de8506d7bd Update OIDC auth URL in login form.
- 90591fc57e88905c7a56a58f9d41e4a943913927 Apply OIDC/user profile related changes to admin UI.
- 193f8a866bec54a5912520411ea4ac4d2d176f9d Add one-click provider config shortcut in OIDC settings.
- 4eabd967d8192ec7d3249244bb5f9713b662c978 Refactor update check.
- a8c17780f905f8d8ba99a282164f90510b9408c5 Add warning on admin UI for legacy creds in the TOML file.
- ee90496df91dff86a87523c3b66e2ccc2b4d32db Apply minor linting fixes to role form.
- 72c7676ce5ebde534b6cff74b29ab8cab576d7e7 Add cookie check hack to auth for v3 -> 4 browser BasicAuth session issue.
- 17b5cc177457b2f11adc6b0e08a92835061fc4c2 Sort roles by created date.
- d52eac0948f1c7210dd6e71606b17fd79f63f6fa Update user APIs and queries to embed role + list permissions.
- 612c1d6eac0f6d907381f351bbd088abc0825596 Add per-list permission management to roles.
- 19527f97ebc7b87a74108c2ad64fa47153a4b0ac Add new fields to
/api/configto remove/settingsdependency in camapign UI. - f69aa300b420a08e536434cfbe5ea816d525200c Move User/Roles nav items under Settings.
- 4a69f0ac5b00efe627b7c5951a648dba95f717c4 Minor refactor to subscribers UI. Remove superfluous status column.
- 474f93559f8aa4f12d5ebee0b2e03121bebbb88c Add permission checks to admin UI to toggle visibility/functionality of components.
- dd9612b1ed57ada5d282851a52b1a9982cbbfb02 Add user profile based permission check in auth middleware.
- 09145b4abe001fcbda07f7d14108f3cff1895465 Fix profile edit page.
- 32d5823dfe496ae49aa0438fd39d5c013998f88c Refactor ‘super’ user type to a pre-defined super admin role.
- 8126eec358f8cc443941faa55895d25c94e343c3 Restyle tags on the UI.
- d4e4c5fa9982979cfe9814200c4dffb0291a7aaa Add granular permissions and role management to backend and admin UI.
- 2000e9fa122e9bc4548ca0405fafcfb6d7f055b5 Style and add OIDC logo to the login page.
- 7bb14de42e0fb6c101ccd54ff1526c8d0edff397 Upgrade simplesessions to v3.
- 313b2af6cf0da57e3a01451b1214c6d7d1652c02 Make user avatar field nullable.
- 4997c10b97fa7340428fbb8fbe2b2ddf5bcf44d6 Add user profile APIs and update UI.
- 6a34ebc6297cd7949672d3ea999f5a5d53094a32 Update login credentials doc in sample config.
- a6e06d92f808ccc8c1e0d8ba0584b41ebac9c064 Refactor migration for the latest version.
- 906e0f57b61d9063c9c7e5bfd3369ccd77cd1e16 Refactor handler groups and add mising auth features like logout.
- 57ac9dca4b62e46c7a868876266be57964fc9d1e Add public login page and auth middleware and handlers.
- 1516bf216ffe7ec1132d720d06b9954fa914e4ba Add
apitype user. - bf0b500bb01e8112b3a9d9f93ea680bb4d852141 Add API token authentication.
- 10f1c38996af3d52dec2f9752fed63e4db102ec7 Add missing user UI files.
- 0968e5876634b75757b8d8cc31fcc4365125daaf Add user/password login handler.
- 435d6d5169525be51d4c9447d1fe1060de54d805 Add create/add/delete user management UI and database schema.
- 4648f9122d65fcbafea6b47e8cb1b5b581306b35 Fix bug in OIDC cookie check.
- 83e4f5def475d0aa4e294485493e941ad6c26887 Add migrations for OIDC db fields.
- f8b3ddb5ee26380e5868575428fef28722473520 Refactor the
oidcpackage and separate out handlers. - 8ca95f6827ce22a25ab7f0d938b1e4558cb1ad46 Refactor OIDC middleware handler logic.
- e406b2516afc259b2a47ace586924d49295ffb5a Add a settings UI for OIDC.
- 1b7128abf2367697ee729dee706c92b85cd07021 Implement OIDC
- 5074987544583f606cc16e76976f148169fa3d2f Add Markdown syntax highlighting (#2068)
- b0f38916291acdb4b12dcb7ebdfdf2496ebf4069 Make import overwrite off by default and add warning (#2078)
- 39e1a0344eb78634c78f5588e7c1d2c405ae776b misc:add word wrap to HTML editor (#2081)
- 36cf85b4996edf83f25db741049f7a8bb9a303cb Fix Catalan translation and add Esperanto. (#2075)
- 58b13afa294e191767e229b1805c0ff2beb54566 Fix tx template not being cached on update. Closes #2061.
- 98fed80b8000cba83665f0957ba446c04b593575 Slightly improve docker-compose feedback (#2054)
- 5e81d9e1f56ebd07fedf606031d3727de9b02ae1 Fix typo in German translation (#2064)
- 560789d506109f739bf89581956b4d18f120a719 Bump vite from 5.0.13 to 5.1.8 in /frontend (#2047)
- aa168f0f074f288d1c54ed820bfcb8406189618f Bump rollup from 4.9.1 to 4.22.4 in /frontend (#2050)
- 16f4dfd3e9dd5b1619734333dfeb2cf37607295d Fix incorrect bulk blocklisting behaviour (#2041). Fixes #1841
- 550cd3e1f87f6740ca85cea7363ccb4ecf43fe78 Update README.md (#2034)
- 06e49831ddf036923423c95e85dfe777f532b5e5 Fix tag queyr param in lists.md (#2033)
- 51e3f1789bade0c416e8bea8b3b1eccef39399b7 Fix pre-confirm status not working on subscriber update. Closes #1927.
- 139267d57ef16dcf0ed26edc9564657a39b95823 Tweak docs to highlight one-way mailing lists. Closes #1931.
- d7fe13c4b90e55821fc21fba2bec5fce8203ed37 Fix typo and formatting (#2028)
- 181948015366c2111013f7121806217a097587b5 docs: suggest an FQDN in docker compose file (#2019)
- c812caad1a3ecf685aa545275e5b55d550628ebc Fix syntax error in GetBounce method (#2007)
- 242c90d09537c6087ad6761b7c924f07cb468b88 updating campaigns api doc (#2011)
- e6bf3691c7f83376199fcfeae9ba4fa1b68d4d4c adding listmonk-newsletter sdk link (#2013)
- 55e81f0df69840734c69a04c744ad9d93b6d312b Bump axios from 1.6.2 to 1.7.4 in /frontend (#2006)
- d28e40ee5cc4787a720f9cdaca039443dd210252 update subscribers api docs (#1989)
- 579fa71eed37c371063177d39483ca1795b1ab2b docs: Add Zeabur one-click button (#1994)
- edc9f7382f142933a886e6eaa4c4e27f513f6d95 Fix typo on the website.
- d2cd9b169ef75dba17cd79dd2cb4c257ce3e35dc chore: Deploy to Elestio button updated (#2005)
- fb090f238366cd37f91825005c6256ea08d3d8bf Update querying-and-segmentation.md (#1983)
- 6353fb64912dbf3688a91b3932d15a27a035994b Add bounces API link to the docs page (#1981)
- 679457cb1271d8f906890001e67dc45d547ba804 Ensure unique upload filenames by adding a suffix (#1963)
- 46187b9d2596098d276d5df7b9e0a2f1a57197f8 Add public list API doc (#1976)
- 41f01d5a182a845d067f69b83f069c5f25a97101 Add docs for bounces api (#1978)
- e4dcb066d9ec5991c5cc27a6f877c76fbad8a4b1 Update API docs of media with missing api (#1975)
- 1e6e97e750882e386dce095737dc78c9b53ccc86 Add validation for filename with non-ASCII chars in media upload (#1973)
- 01f7450bf0b335f59df144ea59dad383a567486a Clean section in config doc.
- ebac8b3b4c844cbf2226c37179df4f1a7b9ed2b8 Fix broken campaign clone with deleted lists (#1966)
- d284e3510296ae9316251b543dd18c838972315a Update configuration.md +performance, batch size (#1967)
- c334d2e6e181a75578ec58ae862fcf47edb3836c fix #1950:Export of unsubscribed users exports all users (#1965)
- fedc51514dafb818a333e70e17e54307be8a7cf3 Fix incorrect count in subscriber query when there are no results.
- 45f1f80a766913204205846cf26c018e0cbd3c2a fix(analytics): add to and from dates to campaign analytics URL (#1952)
- 23d236fec07ce855b5bf597c9693540380544e41 docs: send_at will error out without a Z at the end of the timestamp (#1949)
- 821b43d74ffc892fc20c25ef32c0ea0adc02236f Add support for running Docker container as non-root user using docker-entrypoint.sh (#1892)
- 888e33e5e31c48397ad42f5f8722fafc6fe84d72 fix [docs]: correct invalid example request of basic auth in docs (#1946)
- 326fc300eddcfd1d550799b082b113ca79addd38 Refactor subscription form generator to render syntax-highlighted HTML.
- c2e7c713cab96060436a1596172dcf9d10563cdc Increase campaign subject char limit. Closes #1909.
- c520337a36f3619f9a6d89ab0fee4193e8928d72 Add issue/PR comment messages to GitHub stale action bot.
- 12f32f1470f1aeb4b5f1ad6b738e4b726ce2f518 Set GitHub stale issue bot to prod.
- 766d62b4a3d6c822e78fd393e322ea76c1f04eae Merge branch ‘stale-action’
- 870b3f7fb146dea452c9a434494871ff7f483477 Add GitHub stale-action bot to handle stale issues.
- b38f1562ee2a065420479dc755a0aeb0e0c7458c fix vanishing attachments in campaign in more the one campaigns setup (#1936)
- b4294c1eea95c260b8c8baf186bcc36d43dfbaa7 fix(docker): support multi-platform builds (#1935)
- 2bda94f5d70445031a14ac577519d2aa1e2fb325 Update configuration.md (#1930)
- 22890a17a121eacf57bfad92f00844a5d5639adc Bump golang.org/x/image from 0.10.0 to 0.18.0 (#1914)
- 5d5f48494c456eafc9893069524d98e2b9216b4a docs: add important step regarding ses in bounces.md (#1907)
- 0940e81109444a372d0bd7fd7ff2531a0527e3fd Bump braces from 3.0.2 to 3.0.3 in /frontend (#1898)
- 1ba35d54fb1860fa659de2fecd820dc0a29dfb94 Add one-click deploy on sealos (#1880)
- 3babd9020e015ca3e5325256b73a98b771c8d69c parse cc and bcc from custom headers to add them on email envelope (#1865)
- 6886878ec52a1f1e151d12ce8c913fa54492421d ci: add a compile check for open PRs (#1858)
- c1084860418db233c6e2ab8db25e92ecce811799 Fix syntax error in manager from a previous, simple looking PR merge. Huh :O
- c30068d3ea7804c7912a3b48a0b1c4b61685d76c Add kubernetes helm installation instructions to docs (#1847)
- 42ba157904037c821d3d68c2ff66db910b9a7774 Add a note about starting listmonk without a config file.
- c3f4379b1709a02db18f34160ed97f4dea356025 chore: fix function name in comment (#1836)
- e968718935c59875b7b96279af85f20d428ef7cb Bump golang.org/x/net from 0.20.0 to 0.23.0 (#1833)
- 1bf7e362bf6bee23e5e2e15f8c7cf12e23860df6 Fix incorrect filter query in bounces UI. Closes #1820.
- 1d32d4c368c19c5bada6870cdc4467b0edffac66 👌 IMPROVE: make RootURL available in email templates (#1812)
- c48fe973e2f83c1a15986e8826a2aaf98879b78e Bump vite from 5.0.12 to 5.0.13 in /frontend (#1809)
- d5cfaa9bb333a38668a79a6ea817df23488c1f0a Remove obsolete subscriber
disabledstatus from docs. Closes #1793. - 7bf9481488d1637056e63c1f5874ac963d588ea8 Add
/uploads/path to HTTP config docs. Closes #1803. - e4589d6236170231bf9962761ca768596117d774 Update pl.json (#1800)
- 124af1ee293ec2b8507c29680f35a696d6310249 Make static e-mail template subjects scriptable. Closes #1727.
- f04798a3299b9644479a3bbb546efe68717dd782 Add URL validation to settings URL inputs on admin UI.
- 1bd55e1a03e22c9109487db207aad6f6eef93a69 Bump follow-redirects from 1.15.4 to 1.15.6 in /frontend (#1786)
- 3a0cf98d2f0191b6a986b30e62df51457367e4cf chore: remove repetitive word (#1790)
- 1817bba284d5894dc170aacb2fcc9af56a8ee497 Update templating.md (#1788)
- d64ff73755ca38f4c8c7c1dccd3ac3a40b084c1c Merge zh-TW i18n updates from #1741. Closes #1741.
- 7ffe1a4972321a859746f2bbc4fce77e691c6644 Add French Canada (fr-CA) i18n translation.
- 107e6fb8a4bca2fd0914ad40fdc1da0098c34342 Randomize archive slug when cloning campaign on the UI. Closes #1725.
- 2afac2469e925cd49e7b051b22c09584216ce725 fix: check errors.Is instead of strings.Contains for http: Server closed error (#1779)
- 860009b866fc27b22e9fb494f3113b052c245f28 chore: remove repetitive words (#1778)
- ec50bef2927c59798bdddd1281e881f46fa6d13e fix: query campaign does not search numbers (#1758)
- 21c1af0d02372e3eaebda2c4cc44fde14799cc66 fix: empty list breaks subscriber page (#1755)
- d9e2dce66cccac463bc9c14cac9a018e83346a56 Update zh-TW.json (#1744)
- d7b55cd1473ef5d2f36f960e5c75f8b71729ca51 fix: trim config before use (#1756)
- 12ab492701119fffa6ea18f2bd396fb718f8146f fix: use translated string (#1757)
- fa239db13956dc6e1c216e1f539a3be3f7990956 Update de.json (#1749)
- 51f996d3d6ae2eaa956e1214658278074f123eb5 Fixes typo in es.json (#1751)
- 00a44c01a40a5ba4068c42c8efff388c439bc225 fix: easy install docker script for macOS (#1742)
- 3e06b29b0ae0aa4158bb61f77eb967a0459420ec Add new SDK/libs page and update messenger list. Closes #1723.
- 6689b716d9ff3f7036025b3a213b4de83a7f8513 Update installation.md (#1700)
- 1995471f5b7c0bb30c305b9213790f292211b991 fix: incorrect docs url. (#1715)
- 2f0f1eeda1522519eff1a8a6dc970eef946459a1 Remove arm release links from the website.
- 1edf86df2064c4e0224dd1c1bd1decd0c3489a4a Update website with the latest release.
New Contributors
- @abhinavxd made their first contribution in https://github.com/knadh/listmonk/pull/1715
- @paulocr made their first contribution in https://github.com/knadh/listmonk/pull/1751
- @Biepa made their first contribution in https://github.com/knadh/listmonk/pull/1749
- @Sedna1125 made their first contribution in https://github.com/knadh/listmonk/pull/1744
- @tgolang made their first contribution in https://github.com/knadh/listmonk/pull/1778
- @mkadirtan made their first contribution in https://github.com/knadh/listmonk/pull/1779
- @ericbegin made their first contribution in https://github.com/knadh/listmonk/pull/1729
- @availhang made their first contribution in https://github.com/knadh/listmonk/pull/1790
- @imklau made their first contribution in https://github.com/knadh/listmonk/pull/1800
- @violoncelloCH made their first contribution in https://github.com/knadh/listmonk/pull/1812
- @largemouth made their first contribution in https://github.com/knadh/listmonk/pull/1836
- @th0th made their first contribution in https://github.com/knadh/listmonk/pull/1847
- @usverger made their first contribution in https://github.com/knadh/listmonk/pull/1865
- @yangchuansheng made their first contribution in https://github.com/knadh/listmonk/pull/1880
- @bhartshorn made their first contribution in https://github.com/knadh/listmonk/pull/1907
- @frankievalentine made their first contribution in https://github.com/knadh/listmonk/pull/1930
- @zevszym made their first contribution in https://github.com/knadh/listmonk/pull/1936
- @Prachi-Jamdade made their first contribution in https://github.com/knadh/listmonk/pull/1946
- @lmmendes made their first contribution in https://github.com/knadh/listmonk/pull/1892
- @iloveitaly made their first contribution in https://github.com/knadh/listmonk/pull/1949
- @admoya made their first contribution in https://github.com/knadh/listmonk/pull/1952
- @keshavg2 made their first contribution in https://github.com/knadh/listmonk/pull/1965
- @Bowrna made their first contribution in https://github.com/knadh/listmonk/pull/1966
- @kaiwalyakoparkar made their first contribution in https://github.com/knadh/listmonk/pull/2005
- @pan93412 made their first contribution in https://github.com/knadh/listmonk/pull/1994
- @flow6979 made their first contribution in https://github.com/knadh/listmonk/pull/2007
- @eastonman made their first contribution in https://github.com/knadh/listmonk/pull/2019
- @vnoitkumar made their first contribution in https://github.com/knadh/listmonk/pull/2028
- @knpwrs made their first contribution in https://github.com/knadh/listmonk/pull/2033
- @bish0polis made their first contribution in https://github.com/knadh/listmonk/pull/2034
- @j-maas made their first contribution in https://github.com/knadh/listmonk/pull/2064
- @xeruf made their first contribution in https://github.com/knadh/listmonk/pull/2054
- @enricpineda made their first contribution in https://github.com/knadh/listmonk/pull/2075
- @rk9595 made their first contribution in https://github.com/knadh/listmonk/pull/2081
- @albanobattistella made their first contribution in https://github.com/knadh/listmonk/pull/2085
- @abhinandkakkadi made their first contribution in https://github.com/knadh/listmonk/pull/2095
- @pbence made their first contribution in https://github.com/knadh/listmonk/pull/2116
- @ovari made their first contribution in https://github.com/knadh/listmonk/pull/2102
- @salim-b made their first contribution in https://github.com/knadh/listmonk/pull/2115
- @Dygwah98 made their first contribution in https://github.com/knadh/listmonk/pull/2134
- @shaunwarman made their first contribution in https://github.com/knadh/listmonk/pull/2016
- @smoebody made their first contribution in https://github.com/knadh/listmonk/pull/2150
Full Changelog: https://github.com/knadh/listmonk/compare/v3.0.0…v4.1.0
