Skip to content

chore(core)!: bump Node engine to >=22, drop EOL Node 20#287

Open
TylerVigario wants to merge 4 commits intomainfrom
chore/bump-node-22-26
Open

chore(core)!: bump Node engine to >=22, drop EOL Node 20#287
TylerVigario wants to merge 4 commits intomainfrom
chore/bump-node-22-26

Conversation

@TylerVigario
Copy link
Copy Markdown
Collaborator

@TylerVigario TylerVigario commented May 2, 2026

Summary

BREAKING: minimum supported Node version is now 22. Users on Node 20 (now EOL as of April 2026) must upgrade.

  • engines.node: >=20>=22 (oldest non-EOL LTS).
  • CI test matrix: ['20', '22', '25']['22', '26']. Coverage gate stays on Node 24 (LTS).
  • Release workflow: Node '25''26'. Node 25 hit EOL with Node 26's release.
  • Tooling jobs (lint, build, pr-title): stay on Node 24 LTS.
  • Docs/comments: README, CONTRIBUTING, CLAUDE.md, rollup.config.js comment all updated.
  • ava v7 → v8 (also drops Node 20 — consistent with the engine bump). No test code or ava config changes needed; 264 tests pass on v8.
  • Dev-dep minors: @babel/preset-env, @commitlint/cli, @commitlint/config-conventional.
  • node --run adoption for chained package.json scripts. Node 22+ stable feature; skips the npm shell wrapper for ~100-300ms savings per nested call. Outer entry points (npm test, npm run build, etc.) unchanged from a user perspective.

Versioning

The ! marks this as a breaking change → next release will be a major bump (5.0.0). Consistent with how prior Node engine drops have been handled in this repo.

Test plan

  • npm test passes locally on Node 24 with ava v8
  • npm run build, npm run lint, npm run lint:fix, npm run clean:all verified after node --run conversion
  • CI green on Node 22, 24 (Node 26 currently failing — actions/setup-node manifest hasn't picked it up yet, not a code issue)
  • Release workflow dry-run on Node 26 (verify on next release trigger)

🤖 Generated with Claude Code

@TylerVigario TylerVigario requested a review from forzagreen as a code owner May 2, 2026 20:47
BREAKING CHANGE: minimum supported Node version is now 22. Users on
Node 20 (now EOL as of April 2026) must upgrade.

- engines.node: >=20 -> >=22 (oldest non-EOL LTS)
- CI matrix: ['20','22','25'] -> ['22','26']; coverage stays on 24 (LTS)
- Release workflow: Node 25 -> 26 (25 hit EOL with 26's release)
- Tooling jobs (lint, build, pr-title) stay on 24 LTS
- README, CONTRIBUTING, CLAUDE.md, rollup comment: 20 references updated

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@TylerVigario TylerVigario force-pushed the chore/bump-node-22-26 branch from 94ce654 to 5a7972b Compare May 2, 2026 20:50
@TylerVigario TylerVigario changed the title chore(core): bump Node engine to >=22, drop EOL Node 20 chore(core)!: bump Node engine to >=22, drop EOL Node 20 May 2, 2026
TylerVigario and others added 3 commits May 2, 2026 14:05
- ava: ^7.0.0 -> ^8.0.0 (major)
- @babel/preset-env: ^7.29.2 -> ^7.29.3
- @commitlint/cli: ^20.5.0 -> ^20.5.3
- @commitlint/config-conventional: ^20.5.0 -> ^20.5.3

ava v8 drops Node 20 support (requires 22.20+/24.12+), aligning with
the engine bump in this branch. No config or test code changes needed:
existing ava config (extensions, files, timeout, concurrency,
workerThreads) is unchanged in v8, and the suite is already pure ESM
with no CommonJS, transpiler hooks, or @ava/typescript usage. 264 tests
pass on v8 without modification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Node 22+ ships a built-in `node --run <script>` that skips the npm
shell wrapper, shaving ~100-300ms per invocation. Replaces nested
`npm run X && npm run Y` chains in package.json scripts.

- build, build:dist, build:types, clean, clean:all: nested calls now use node --run
- coverage: c8 node --run test:unit
- lint: node --run lint:js && node --run lint:md
- test: node --run test:unit && node --run build:types
- lint:fix: inlined as `standard --fix && markdownlint-cli2 --fix`
  (node --run does not forward CLI args, so the indirection is removed)

Outer entry points (npm test, npm run build, npm run lint) keep working
unchanged from a user perspective; they just dispatch faster internally.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Node 26 entries currently fail with "Unable to find Node version '26'"
because actions/node-versions hasn't published a v26 build yet, even
though Node 26 itself is released. Adding a comment to clarify the
matrix red is upstream tooling, not a code or workflow issue.

Will resolve automatically when actions/node-versions ships v26.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant