diff --git a/.github/workflows/tests-e2e.yml b/.github/workflows/tests-e2e.yml index ab6cfe059ff9..f54352b3c4a6 100644 --- a/.github/workflows/tests-e2e.yml +++ b/.github/workflows/tests-e2e.yml @@ -38,7 +38,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: ['18.0', '20', '22', '24'] + node: ['20.0', '20', '22', '24'] steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 diff --git a/.github/workflows/tests-windows.yml b/.github/workflows/tests-windows.yml index 4e18fe892ab1..119a7d4b7918 100644 --- a/.github/workflows/tests-windows.yml +++ b/.github/workflows/tests-windows.yml @@ -27,7 +27,7 @@ jobs: runs-on: windows-latest strategy: matrix: - node: ['18.0', '20', '22', '24'] + node: ['20.0', '20', '22', '24'] steps: - name: Support longpaths run: git config --system core.longpaths true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d902b011ea02..129906513617 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: ['18.0', '20', '22', '24'] + node: ['20.0', '20', '22', '24'] steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 diff --git a/packages/create-docusaurus/package.json b/packages/create-docusaurus/package.json index 7c2ce37e28e0..d48cff974089 100755 --- a/packages/create-docusaurus/package.json +++ b/packages/create-docusaurus/package.json @@ -37,6 +37,6 @@ "@types/supports-color": "^8.1.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/create-docusaurus/templates/classic-typescript/package.json b/packages/create-docusaurus/templates/classic-typescript/package.json index 543f44f99b90..6232d002b216 100644 --- a/packages/create-docusaurus/templates/classic-typescript/package.json +++ b/packages/create-docusaurus/templates/classic-typescript/package.json @@ -42,6 +42,6 @@ ] }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/create-docusaurus/templates/classic/package.json b/packages/create-docusaurus/templates/classic/package.json index 91083729fd8b..34ac77fad369 100644 --- a/packages/create-docusaurus/templates/classic/package.json +++ b/packages/create-docusaurus/templates/classic/package.json @@ -39,6 +39,6 @@ ] }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/create-docusaurus/templates/shared/docs/intro.md b/packages/create-docusaurus/templates/shared/docs/intro.md index 45e8604c8bf8..88f95714453a 100644 --- a/packages/create-docusaurus/templates/shared/docs/intro.md +++ b/packages/create-docusaurus/templates/shared/docs/intro.md @@ -14,7 +14,7 @@ Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new ### What you'll need -- [Node.js](https://nodejs.org/en/download/) version 18.0 or above: +- [Node.js](https://nodejs.org/en/download/) version 20.0 or above: - When installing Node.js, you are recommended to check all checkboxes related to dependencies. ## Generate a new site diff --git a/packages/docusaurus-babel/package.json b/packages/docusaurus-babel/package.json index 1c111b7c8b7c..262d3163a2e9 100644 --- a/packages/docusaurus-babel/package.json +++ b/packages/docusaurus-babel/package.json @@ -45,6 +45,6 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-bundler/package.json b/packages/docusaurus-bundler/package.json index 6b6e252cdf9f..098eea624d30 100644 --- a/packages/docusaurus-bundler/package.json +++ b/packages/docusaurus-bundler/package.json @@ -55,6 +55,6 @@ "@total-typescript/shoehorn": "^0.1.2" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-cssnano-preset/package.json b/packages/docusaurus-cssnano-preset/package.json index d4d8fbacd148..9458712ef679 100644 --- a/packages/docusaurus-cssnano-preset/package.json +++ b/packages/docusaurus-cssnano-preset/package.json @@ -26,6 +26,6 @@ "to-vfile": "^6.1.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-faster/package.json b/packages/docusaurus-faster/package.json index 2fc0bba999e8..dbb59ca34cb8 100644 --- a/packages/docusaurus-faster/package.json +++ b/packages/docusaurus-faster/package.json @@ -29,7 +29,7 @@ "webpack": "^5.95.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@docusaurus/types": "*" diff --git a/packages/docusaurus-logger/package.json b/packages/docusaurus-logger/package.json index 14a58f1009b9..3f280dad8ad4 100644 --- a/packages/docusaurus-logger/package.json +++ b/packages/docusaurus-logger/package.json @@ -24,7 +24,7 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "devDependencies": { "@types/supports-color": "^8.1.1" diff --git a/packages/docusaurus-mdx-loader/package.json b/packages/docusaurus-mdx-loader/package.json index 46ba90b8bccd..ed3f544c5e53 100644 --- a/packages/docusaurus-mdx-loader/package.json +++ b/packages/docusaurus-mdx-loader/package.json @@ -62,6 +62,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-client-redirects/package.json b/packages/docusaurus-plugin-client-redirects/package.json index 7dcee5be1f66..8520c63a8e2f 100644 --- a/packages/docusaurus-plugin-client-redirects/package.json +++ b/packages/docusaurus-plugin-client-redirects/package.json @@ -36,6 +36,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-content-blog/package.json b/packages/docusaurus-plugin-content-blog/package.json index 615ce7501397..4a4d3cd21c66 100644 --- a/packages/docusaurus-plugin-content-blog/package.json +++ b/packages/docusaurus-plugin-content-blog/package.json @@ -56,7 +56,7 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "devDependencies": { "@total-typescript/shoehorn": "^0.1.2", diff --git a/packages/docusaurus-plugin-content-docs/package.json b/packages/docusaurus-plugin-content-docs/package.json index 7ac48ffa898c..4f5f836ab563 100644 --- a/packages/docusaurus-plugin-content-docs/package.json +++ b/packages/docusaurus-plugin-content-docs/package.json @@ -65,6 +65,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-content-pages/package.json b/packages/docusaurus-plugin-content-pages/package.json index 16d3d9ed16be..dd3beced4ddc 100644 --- a/packages/docusaurus-plugin-content-pages/package.json +++ b/packages/docusaurus-plugin-content-pages/package.json @@ -32,6 +32,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-css-cascade-layers/package.json b/packages/docusaurus-plugin-css-cascade-layers/package.json index 56c9bc6b346d..1adc84cf5531 100644 --- a/packages/docusaurus-plugin-css-cascade-layers/package.json +++ b/packages/docusaurus-plugin-css-cascade-layers/package.json @@ -25,6 +25,6 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-debug/package.json b/packages/docusaurus-plugin-debug/package.json index 6c7987ea9d68..a58da46b0027 100644 --- a/packages/docusaurus-plugin-debug/package.json +++ b/packages/docusaurus-plugin-debug/package.json @@ -32,6 +32,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-google-analytics/package.json b/packages/docusaurus-plugin-google-analytics/package.json index 1bba44dffff9..9d4225ecb9b7 100644 --- a/packages/docusaurus-plugin-google-analytics/package.json +++ b/packages/docusaurus-plugin-google-analytics/package.json @@ -28,6 +28,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-google-gtag/package.json b/packages/docusaurus-plugin-google-gtag/package.json index 477dafd9b73d..36a36170df9b 100644 --- a/packages/docusaurus-plugin-google-gtag/package.json +++ b/packages/docusaurus-plugin-google-gtag/package.json @@ -29,6 +29,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-google-tag-manager/package.json b/packages/docusaurus-plugin-google-tag-manager/package.json index 47444e25901b..79e1c182bb26 100644 --- a/packages/docusaurus-plugin-google-tag-manager/package.json +++ b/packages/docusaurus-plugin-google-tag-manager/package.json @@ -28,6 +28,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-ideal-image/package.json b/packages/docusaurus-plugin-ideal-image/package.json index 80244aa6194e..a6e77f562185 100644 --- a/packages/docusaurus-plugin-ideal-image/package.json +++ b/packages/docusaurus-plugin-ideal-image/package.json @@ -45,6 +45,6 @@ } }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-pwa/package.json b/packages/docusaurus-plugin-pwa/package.json index 824070ac91f5..411778c7ab1d 100644 --- a/packages/docusaurus-plugin-pwa/package.json +++ b/packages/docusaurus-plugin-pwa/package.json @@ -49,6 +49,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-rsdoctor/package.json b/packages/docusaurus-plugin-rsdoctor/package.json index 49bb6ed89490..d7e57cbf860d 100644 --- a/packages/docusaurus-plugin-rsdoctor/package.json +++ b/packages/docusaurus-plugin-rsdoctor/package.json @@ -30,6 +30,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-sitemap/package.json b/packages/docusaurus-plugin-sitemap/package.json index 62cd1ceb1c3e..54dab7877e7f 100644 --- a/packages/docusaurus-plugin-sitemap/package.json +++ b/packages/docusaurus-plugin-sitemap/package.json @@ -36,6 +36,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-svgr/package.json b/packages/docusaurus-plugin-svgr/package.json index a395bbfc46ec..6e303179e30e 100644 --- a/packages/docusaurus-plugin-svgr/package.json +++ b/packages/docusaurus-plugin-svgr/package.json @@ -32,6 +32,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-plugin-vercel-analytics/package.json b/packages/docusaurus-plugin-vercel-analytics/package.json index 3cd3a72593d7..69671f0f5ae7 100644 --- a/packages/docusaurus-plugin-vercel-analytics/package.json +++ b/packages/docusaurus-plugin-vercel-analytics/package.json @@ -31,6 +31,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-preset-classic/package.json b/packages/docusaurus-preset-classic/package.json index 0ce142ee55f8..e9688ac1a18d 100644 --- a/packages/docusaurus-preset-classic/package.json +++ b/packages/docusaurus-preset-classic/package.json @@ -39,6 +39,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-remark-plugin-npm2yarn/package.json b/packages/docusaurus-remark-plugin-npm2yarn/package.json index c8c62b2c2ff1..22f16b013b71 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/package.json +++ b/packages/docusaurus-remark-plugin-npm2yarn/package.json @@ -30,6 +30,6 @@ "to-vfile": "^6.1.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-theme-classic/package.json b/packages/docusaurus-theme-classic/package.json index 1b76c00b8a2e..c2c887ef794d 100644 --- a/packages/docusaurus-theme-classic/package.json +++ b/packages/docusaurus-theme-classic/package.json @@ -60,6 +60,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-theme-common/package.json b/packages/docusaurus-theme-common/package.json index 16de5ceb7aa9..0448a7c44184 100644 --- a/packages/docusaurus-theme-common/package.json +++ b/packages/docusaurus-theme-common/package.json @@ -56,6 +56,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-theme-live-codeblock/package.json b/packages/docusaurus-theme-live-codeblock/package.json index 696adb818094..541cea0db2d9 100644 --- a/packages/docusaurus-theme-live-codeblock/package.json +++ b/packages/docusaurus-theme-live-codeblock/package.json @@ -42,6 +42,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-theme-mermaid/package.json b/packages/docusaurus-theme-mermaid/package.json index 47ecf7dca52f..327e8a29e453 100644 --- a/packages/docusaurus-theme-mermaid/package.json +++ b/packages/docusaurus-theme-mermaid/package.json @@ -55,6 +55,6 @@ } }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-theme-search-algolia/package.json b/packages/docusaurus-theme-search-algolia/package.json index cd20a5510849..c536cd4c2945 100644 --- a/packages/docusaurus-theme-search-algolia/package.json +++ b/packages/docusaurus-theme-search-algolia/package.json @@ -58,6 +58,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-theme-translations/package.json b/packages/docusaurus-theme-translations/package.json index dd6d77946d57..78ddde4b8205 100644 --- a/packages/docusaurus-theme-translations/package.json +++ b/packages/docusaurus-theme-translations/package.json @@ -30,6 +30,6 @@ "lodash": "^4.17.21" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-utils-common/package.json b/packages/docusaurus-utils-common/package.json index a4d9b37692fc..cc2e54cd2109 100644 --- a/packages/docusaurus-utils-common/package.json +++ b/packages/docusaurus-utils-common/package.json @@ -23,6 +23,6 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-utils-validation/package.json b/packages/docusaurus-utils-validation/package.json index faa78bddb545..a8c40528d474 100644 --- a/packages/docusaurus-utils-validation/package.json +++ b/packages/docusaurus-utils-validation/package.json @@ -31,6 +31,6 @@ "tmp-promise": "^3.0.3" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus-utils/package.json b/packages/docusaurus-utils/package.json index efcdce2b3462..030266b428ba 100644 --- a/packages/docusaurus-utils/package.json +++ b/packages/docusaurus-utils/package.json @@ -41,7 +41,7 @@ "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "devDependencies": { "@types/dedent": "^0.7.0", diff --git a/packages/docusaurus/package.json b/packages/docusaurus/package.json index 1f48d810b44b..c93d2e1a33f3 100644 --- a/packages/docusaurus/package.json +++ b/packages/docusaurus/package.json @@ -96,6 +96,6 @@ "react-dom": "^18.0.0 || ^19.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/docusaurus/src/server/i18n.ts b/packages/docusaurus/src/server/i18n.ts index 9b0021ae8746..7c1aae5bcd78 100644 --- a/packages/docusaurus/src/server/i18n.ts +++ b/packages/docusaurus/src/server/i18n.ts @@ -76,6 +76,7 @@ function getDefaultDirection(localeStr: string) { // see https://github.com/tc39/proposal-intl-locale-info // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo // Node 18.0 implements a former version of the getTextInfo() proposal + // TODO Docusaurus v4: remove the fallback to locale.textInfo // @ts-expect-error: The TC39 proposal was updated const textInto = locale.getTextInfo?.() ?? locale.textInfo; return textInto.direction; diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 3a0548254a39..c968b537e276 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -31,6 +31,6 @@ "eslint": ">=6" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } } diff --git a/packages/lqip-loader/package.json b/packages/lqip-loader/package.json index 8f9fc307bdd4..3a89e0dd0277 100644 --- a/packages/lqip-loader/package.json +++ b/packages/lqip-loader/package.json @@ -24,7 +24,7 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "devDependencies": { "@types/file-loader": "^5.0.1" diff --git a/website/community/5-release-process.mdx b/website/community/5-release-process.mdx index 5377f3dd65b2..a30cdaaddccd 100644 --- a/website/community/5-release-process.mdx +++ b/website/community/5-release-process.mdx @@ -49,6 +49,12 @@ If you only use our [public API surface](#public-api-surface), you should be abl ::: +:::caution About End-of-Life Node.js versions + +We may drop support for End-of-Life Node.js versions in minor Docusaurus versions. Check the [Node.js support policy](#nodejs-support) section for more details. + +::: + ### Patch versions {#patch-versions} The `patch` version number is incremented on bugfixes releases. @@ -57,6 +63,16 @@ Whenever a new patch version is released, we publish: - an exhaustive changelog entry +## Node.js support policy {#nodejs-support} + +Each major version of Docusaurus supports a minimum Node.js version. This retro-compatibility will be preserved all along that release line. This runtime backward compatibility will be preserved throughout all the minor versions of the release line, except for End-of-Life Node.js versions. + +:::caution Support for End-of-Life versions + +On minor releases, we reserve the right to drop support for Node.js versions that reached End-of-Life ([Node.js release process and schedule](https://nodejs.org/en/about/previous-releases). **We do not consider it a Docusaurus breaking change**. We highly recommend using a maintained Node.js version. Beware that [End-of-Life Node.js versions do not receive security updates anymore](https://nodejs.org/en/blog/announcements/node-18-eol-support). + +::: + ## Versions {#versions} ```mdx-code-block diff --git a/website/docs/installation.mdx b/website/docs/installation.mdx index 1295709b94c8..df6ffa3d7d87 100644 --- a/website/docs/installation.mdx +++ b/website/docs/installation.mdx @@ -21,7 +21,7 @@ Use **[docusaurus.new](https://docusaurus.new)** to test Docusaurus immediately ## Requirements {#requirements} -- [Node.js](https://nodejs.org/en/download/) version 18.0 or above (which can be checked by running `node -v`). You can use [nvm](https://github.com/nvm-sh/nvm) to manage multiple Node.js versions on a single machine. +- [Node.js](https://nodejs.org/en/download/) version 20.0 or above (which can be checked by running `node -v`). You can use [nvm](https://github.com/nvm-sh/nvm) to manage multiple Node.js versions on a single machine. - When installing Node.js, it is recommended to check all checkboxes related to dependencies. ## Scaffold project website {#scaffold-project-website}