chore: upgrade Node.js 20 (EOL) → 24 LTS#417
Merged
Merged
Conversation
bobodread876
approved these changes
Jun 26, 2026
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>
ddaf195 to
528e25c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.jsonengines —>=20.18.1 <21→>=24.0.0 <25@types/node—^20.6.2→^24(resolves to 24.13.2 inyarn.lock)Dockerfile,Dockerfile-debug,Dockerfile-migrate,Dockerfile-websocket:node:20-alpine→node:24-alpine; distrolessnodejs20-debian11→nodejs24-debian12(incl.:debugtag)node-version: 20→24(bats, check-code, integration-test, audit, mongodb-migrate, generate-graphql-docs, unit-test, vendor/nodejs-audit, vendor/nodejs-check-code)flake.nix—nodejs_20→nodejs_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@24bump; see below)src/utils/grpc-stream-client/stream.ts— replacedas AddEventListenerOptions(a DOM type no longer in scope) with an inline{ once?: boolean }castValidation (run under Node v24.18.0)
yarn install— passed, exit 0 (the repo's.yarnrchasignore-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@24bump initially surfaced 2 new type errors (Array.prototype.at()needing es2022 lib, and a removedAddEventListenerOptionsDOM type). Both are fixed by thetsconfig.jsonlib addition and the inline cast. The remainingtsc-checkfailures are pre-existing errors intest/flash/integration/**spec files (verified identical onmainunder Node 20) and are unrelated to this upgrade.Distroless image note
Verified
gcr.io/distroless/nodejs24-debian12exists viadocker manifest inspect(OK).nodejs24-debian11does not exist (MISSING), so all distroless references usedebian12.🤖 Generated with Claude Code