Skip to content

chore: upgrade Node.js 20 (EOL) → 24 LTS#417

Merged
islandbitcoin merged 3 commits into
mainfrom
chore/upgrade-node-24
Jun 26, 2026
Merged

chore: upgrade Node.js 20 (EOL) → 24 LTS#417
islandbitcoin merged 3 commits into
mainfrom
chore/upgrade-node-24

Conversation

@islandbitcoin

Copy link
Copy Markdown
Contributor

Summary

Node.js 20 reached end-of-life in April 2026. This bumps the project to Node 24 (LTS, supported through ~April 2028).

Changes by category

  • package.json engines>=20.18.1 <21>=24.0.0 <25
  • @types/node^20.6.2^24 (resolves to 24.13.2 in yarn.lock)
  • 4 DockerfilesDockerfile, Dockerfile-debug, Dockerfile-migrate, Dockerfile-websocket: node:20-alpinenode:24-alpine; distroless nodejs20-debian11nodejs24-debian12 (incl. :debug tag)
  • 9 GitHub Actions workflowsnode-version: 2024 (bats, check-code, integration-test, audit, mongodb-migrate, generate-graphql-docs, unit-test, vendor/nodejs-audit, vendor/nodejs-check-code)
  • flake.nixnodejs_20nodejs_24 (overlay + yarn override)
  • DEV.md — Node version references updated to 24; corrected the stale "Node 22+ breaks yarn install" warning (see below)
  • tsconfig.json — added "lib": ["es2022"] (required after the @types/node@24 bump; see below)
  • src/utils/grpc-stream-client/stream.ts — replaced as AddEventListenerOptions (a DOM type no longer in scope) with an inline { once?: boolean } cast

Validation (run under Node v24.18.0)

  • yarn installpassed, exit 0 (the repo's .yarnrc has ignore-engines true, so engine checks are bypassed). The old DEV.md claim that "Node 22+ will fail on yarn install" did not hold true under Node 24; the warning has been corrected.
  • yarn build (tsconfig-build.json, the production build) — passed, exit 0.
  • yarn tsc-check — the @types/node@24 bump initially surfaced 2 new type errors (Array.prototype.at() needing es2022 lib, and a removed AddEventListenerOptions DOM type). Both are fixed by the tsconfig.json lib addition and the inline cast. The remaining tsc-check failures are pre-existing errors in test/flash/integration/** spec files (verified identical on main under Node 20) and are unrelated to this upgrade.

Distroless image note

Verified gcr.io/distroless/nodejs24-debian12 exists via docker manifest inspect (OK). nodejs24-debian11 does not exist (MISSING), so all distroless references use debian12.

🤖 Generated with Claude Code

bobodread876 and others added 3 commits June 26, 2026 10:47
Node 20 reached end-of-life in April 2026. Bump engines, Docker base
images, CI workflows, Nix flake, and @types/node to Node 24 (LTS,
supported through ~April 2028).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The setup script's Node version guard and nvm fallback still pinned
Node 20; align with the Node 24 LTS upgrade.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolved the rebase conflict by taking main's lockfile (with its audit
fixes) and regenerating the @types/node entry for the ^24 bump.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@islandbitcoin islandbitcoin force-pushed the chore/upgrade-node-24 branch from ddaf195 to 528e25c Compare June 26, 2026 17:48
@islandbitcoin islandbitcoin merged commit a795d08 into main Jun 26, 2026
9 of 14 checks passed
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.

2 participants