From 1b13e90621a515b7d9547dfb9e0f0821a5e845f0 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Thu, 17 Sep 2026 16:34:37 +0100 Subject: [PATCH] fix(web): declare a Node floor the lint toolchain can actually run on MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Web and React Native templates promise `"node": ">=18.0.0"` while pulling `@eslint/js` 10.0.1 and `eslint` 10.10.0, which declare `^20.19.0 || ^22.13.0 || >=24`. A contributor on the Node version the package advertises gets engine warnings, fails `npm ci` under `engine-strict`, and cannot run `npm run lint` at all. The floor now matches what those dependencies accept. Narrowing it costs nothing real: Node 18 reached end of life in April 2025 and 20.19 is the lowest version eslint 10 runs on, so this is the smallest range that makes the declaration true. The alternative — holding lint tooling back to a release that still supports an EOL Node — trades a live toolchain for a promise nobody is keeping. Only these two templates declare `engines`; the Node template pulls the same eslint 10 without one, so it is unaffected. --- templates/react-native/package.json.twig | 2 +- templates/web/package.json.twig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/react-native/package.json.twig b/templates/react-native/package.json.twig index b4ac3430b1..1d3ad0d7e6 100644 --- a/templates/react-native/package.json.twig +++ b/templates/react-native/package.json.twig @@ -34,7 +34,7 @@ "analyse": "tsc --noEmit" }, "engines": { - "node": ">=18.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "devDependencies": { "@eslint/js": "10.0.1", diff --git a/templates/web/package.json.twig b/templates/web/package.json.twig index 49ed8bb986..672478f381 100644 --- a/templates/web/package.json.twig +++ b/templates/web/package.json.twig @@ -34,7 +34,7 @@ "analyse": "tsc --noEmit" }, "engines": { - "node": ">=18.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "dependencies": { "json-bigint": "1.0.0"