Skip to content

feat: require Node.js 22 or newer - #1403

Draft
l2ysho wants to merge 1 commit into
masterfrom
claude/node20-support-removal-e57cdc
Draft

feat: require Node.js 22 or newer#1403
l2ysho wants to merge 1 commit into
masterfrom
claude/node20-support-removal-e57cdc

Conversation

@l2ysho

@l2ysho l2ysho commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Node 20 reached EOL on 2026-04-30, and the dependency tree already excluded it — chalk@6 declares engines: ">=22". engines: ">=20" was a promise the install could not keep. This is what the Node 20 legs of Local Tests have been failing on.

Changes

  • engines.node: >=20>=22
  • devEngines.runtime.node: drop the ^20.19.0 arm, leaving >=22.12.0
  • Local Tests matrix: [20, 22, 24][22, 24]

No source or docs changes needed. SUPPORTED_NODEJS_VERSION reads pkg.engines.node (src/lib/consts.ts:69), so the runtime guard and all user-facing messages follow automatically. README and the installation docs already said 22+.

Why >=22 and not a patch-level floor

The strictest transitive runtime constraints are which@7 (^22.22.2 || ...) and @inquirer/core (^22.13.0), so no single patch version is "the" true floor for long — it moves with every dependency bump.

engines.node is also enforced by a hard exit here (processVersionCheck, src/entrypoints/_shared.ts:58), not just an npm warning, so an over-strict floor blocks users who would otherwise be fine. A transitive engine mismatch is only a warning.

devEngines keeps the stricter >=22.12.0 that the build tooling needs. That is the contributor requirement; engines.node is the support claim made to users, and it tracks the Node major line — the same one the CI matrix and base images track.

Checked

  • Branch protection requires only Local Tests (…, 22) contexts — no …, 20) context is left permanently pending
  • Standalone bundle users are unaffected: processVersionCheck early-returns for installMethod === 'bundle'
  • pnpm run lint && format && build pass. test:local has 8 pre-existing failures in run.test.ts ("input tests") that reproduce identically on unmodified master — unrelated to this change

Follow-ups

🤖 Generated with Claude Code

@github-actions github-actions Bot added this to the 149th sprint - Tooling team milestone Sep 8, 2026
@github-actions github-actions Bot added the t-tooling Issues with this label are in the ownership of the tooling team. label Sep 8, 2026
Node 20 reached end of life on 2026-04-30 and the dependency tree already
excluded it: chalk@6 declares engines >=22, so `engines: ">=20"` was a
promise the install could not keep. README and the installation docs have
said 22+ for a while — this makes the manifest agree.

Raise engines.node to >=22, drop the ^20.19.0 arm from devEngines, and
remove Node 20 from the Local Tests matrix, which is what is currently
failing on master.

devEngines keeps the stricter >=22.12.0 floor that the build tooling needs.
That is the contributor requirement; engines.node is the support claim made
to users, and it tracks the Node major line.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@l2ysho
l2ysho force-pushed the claude/node20-support-removal-e57cdc branch from 17696e7 to 2644f94 Compare September 8, 2026 19:47
@l2ysho l2ysho changed the title feat: require Node.js 22.12 or newer feat: require Node.js 22 or newer Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

t-tooling Issues with this label are in the ownership of the tooling team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants