v4.1.0
knadh/listmonkv4.1.0Nov 12, 2024by github-actions[bot]
AI Summary
v4.1.0 is a major release introducing multi-user support, OIDC authentication, and significant performance improvements for large databases.
Key Highlights
- Multi-user support with granular permissions, roles, and per-list permissions
- OIDC (OpenID Connect) authentication support
- First-time Super Admin setup UI for fresh installations
- Major performance improvements for SQL queries in concurrent campaign processing
- Static email template subjects now scriptable with template syntax
- Support for CC and BCC in custom email headers
- Markdown syntax highlighting in campaign editor
Breaking Changes
- Fundamental change to login and authentication - no longer relies on browser-based BasicAuth prompt
- Built-in login system with automatic Super Admin user creation from TOML config
- New campaigns:get_all and campaigns:manage_all permissions
New Features
- Multi-user management
- OIDC authentication
- Role management
- Per-list permissions
- API token authentication
- Query caching for performance
Full Release Notes
[](https://listmonk.app) 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](https://listmonk.app/docs/upgrade/#upgrading-to-v4xx). ## 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** ```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 * 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 `description` to `List` and `NewList`, 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 <codeflask> 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_at` always. * 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 `avatar` field 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/config` to remove `/settings` dependency 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 `api` type 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 `oidc` package 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 `disabled` status 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