You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MJML before 5.0.0-alpha.9 allows mj-include directory traversal to test file existence and (in the type="css" case) read files. NOTE: this issue exists because of an incomplete fix for CVE-2020-12827.
HTML minification now uses htmlnano instead of html-minifier.
CSS minification now uses cssnano presets wired via mjml-core.
Minification options can be added via .mjmlconfig.js
Impact [potential breaking changes]
Generated HTML is more aggressively minified. If you rely on exact formatting (e.g. diffing raw HTML, parsing by regex, or checking snapshots), you may see changes.
Some obscure html-minifier specific options used in custom tooling will no longer apply; options are now expressed as htmlnano/cssnano configs.
Template tags may error in PostCSS (see Template syntax handling and sanitization below)
ignoreIncludes / allowIncludes (CLI) defaults and behavior have changed to be more secure. Includes are ignored by default
A new includePath option is introduced to explicitly control where includes can be loaded from outside of a templates filePath
Support MJML, HTML and CSS includes only
Impact [potential breaking changes]
Includes are ignored by default, you will need to explicitly allow them
Projects that relied on implicit include behavior (e.g. loading templates from arbitrary paths without explicit configuration) may now fail, warn, or simply skip includes.
In locked‑down environments (containers, CI, hosting), path resolution for includes may change and require configuration.
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: pnpm-lock.yaml
Scope: all 7 workspace projects
. | WARN Ignoring broken lockfile at /tmp/renovate/repos/github/ksv-vc/postbote: Lockfile /tmp/renovate/repos/github/ksv-vc/postbote/pnpm-lock.yaml not compatible with current pnpm
WARN GET https://registry.npmjs.org/@testing-library%2Freact error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@types%2Fcolor error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@types%2Fhtml-minifier error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@types%2Fjest error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/eslint error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@typescript-eslint%2Feslint-plugin error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@typescript-eslint%2Fparser error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/eslint-config-prettier error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-import error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-jsx-a11y error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-react error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-react-hooks error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/typescript error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@types%2Fmjml error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@types%2Freact error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@types%2Freact-dom error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@testing-library%2Freact error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@types%2Fcolor error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@types%2Fhtml-minifier error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@types%2Fjest error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/eslint error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@typescript-eslint%2Feslint-plugin error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@typescript-eslint%2Fparser error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/eslint-config-prettier error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-import error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-jsx-a11y error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-react error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/eslint-plugin-react-hooks error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/typescript error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@types%2Fmjml error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@types%2Freact error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
WARN GET https://registry.npmjs.org/@types%2Freact-dom error (ERR_INVALID_THIS). Will retry in 1 minute. 1 retries left.
ERR_PNPM_META_FETCH_FAIL GET https://registry.npmjs.org/@testing-library%2Freact: Value of "this" must be of type URLSearchParams
WARN GET https://registry.npmjs.org/expect-type error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/jest error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/jest-environment-node error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/ts-jest error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^4.13.0→^5.0.04.13.0→5.0.0MJML allows mj-include directory traversal due to an incomplete fix for CVE-2020-12827
CVE-2025-67898 / GHSA-45h5-66jx-r2wf
More information
Details
MJML before 5.0.0-alpha.9 allows mj-include directory traversal to test file existence and (in the type="css" case) read files. NOTE: this issue exists because of an incomplete fix for CVE-2020-12827.
Severity
CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
mjmlio/mjml (mjml)
v5.0.0Compare Source
Upgrade Guide
These are the changes users need to actively consider when upgrading to MJML 5.x.x from MJML 4.x (and early MJML 5 alphas):
Highlights
html-minifierandjs-beautifywithhtmlnano+cssnano. [breaking change]mj-includeandignoreIncludes[breaking change]<body>tag is now driven bymj-body, not the global skeleton. [breaking change]mjml-browserbuild/minification pipeline updatedborder-radius). [breaking change]HTML/CSS minification & formatting
What changed
htmlnanoinstead ofhtml-minifier.cssnanopresets wired viamjml-core..mjmlconfig.jsImpact [potential breaking changes]
html-minifierspecific options used in custom tooling will no longer apply; options are now expressed ashtmlnano/cssnanoconfigs.What to do
minify/beautifyflags or custom minifier options, re‑map them to the newhtmlnano/cssnanoconfig.Notes
cssnanouseslitepreset by default. Due to this issue: #2919.defaultpreset can be used if your fonts don’t contain numeralsMore detail: (#2858 (comment))
Template syntax handling and sanitization (PostCSS)
What changed
{{ }}) is now sanitized before PostCSS and with syntax restored post-processing.Impact
CssSyntaxErrorerror will occur when applying CSS minification to files with some template syntaxWhat to do
More detail: (#2858 (comment))
Includes are more locked down
What changed
ignoreIncludes/allowIncludes(CLI) defaults and behavior have changed to be more secure. Includes are ignored by defaultincludePathoption is introduced to explicitly control where includes can be loaded from outside of a templates filePathImpact [potential breaking changes]
What to do
ignoreIncludes/allowIncludes.includePath(and related options) in your.mjmlconfigor CLI usage to match your desired include directories (see docs)More detail: (#2858 (comment))
mj-body and skeleton structure
What changed
<body>HTML tag is now generated under mj-body instead of a global skeleton file.idattribute tomj-bodymj-bodyattributes have been refactored:classattribute is applied to thebodytag rather than the childdivbackground-colorremoved frombody, applies to childdivonlyImpact [potential breaking changes]
<body>lived, what attributes were on it), this structure is now different.classmay no longer applyWhat to do
classorbackground-colorattributes that were applied tomj-bodyNotes
Browser bundle / build scripts
What changed
mjml-browserbuild/minification pipeline has been updated to use new minifiersWhy
Impact
mjml-browserdirectly or depended on its legacy build scripts, behavior and bundle size/shape might change.What to do
mjml-browserand verify they still load, minify, and run as expected.Attributes & layout consistency
What changed
border-radiusattributes now accept a string, previously this was inconsistent across components. Allows more flexible inputinner-paddingattributes ofmj-heroand fixed an Outlook issue withwidth/paddingImpact [potential breaking changes]
border-radiusvalues are less strictinner-paddingformj-herois now applied to all clients, not just OutlookWhat to do
border-radiusandmj-hero'sinner-paddingMigration helper removal
What changed
mjml-migratetool and associatednoMigrateWarnoption are removed.Impact [potential breaking changes]
What to do
Node.js version support
What changed
Impact [potential breaking changes]
What to do
Full Changelog: mjmlio/mjml@v4.18.0...v5.0.0
v4.18.0Compare Source
What's Changed
Documentation
Full Changelog: mjmlio/mjml@v4.17.2...v4.18.0
v4.17.2Compare Source
What's Changed
Fixes
Full Changelog: mjmlio/mjml@v4.17.1...v4.17.2
v4.17.1Compare Source
What's Changed
Fixes
Full Changelog: mjmlio/mjml@v4.17.0...v4.17.1
v4.17.0Compare Source
What's Changed
Features
Fixes
Documentation
Other
New Contributors
Full Changelog: mjmlio/mjml@v4.16.1...v4.17.0
v4.16.1Compare Source
Fixes
Full Changelog: mjmlio/mjml@v4.16.0...v4.16.1
v4.16.0Compare Source
What's Changed
Features
Fixes
Documentation
Dependencies
New Contributors
Full Changelog: mjmlio/mjml@v4.15.3...v4.16.0
v4.15.3Compare Source
What's Changed
Full Changelog: mjmlio/mjml@v4.15.2...v4.15.3
v4.15.2Compare Source
Full Changelog: mjmlio/mjml@v4.15.1...v4.15.2
v4.15.1Compare Source
v4.15.0Compare Source
What's Changed
New Contributors
Full Changelog: mjmlio/mjml@v4.14.1...v4.15.0
v4.14.1Compare Source
What's Changed
New Contributors
Full Changelog: mjmlio/mjml@v4.14.0...v4.14.1
v4.14.0Compare Source
What's Changed
New
Fixes
Documentation
fontsoption. by @tdelmas in #2522New Contributors
Full Changelog: mjmlio/mjml@v4.13.0...v4.14.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.