#18327·sequelize

Drop Node 20 support and remove the node-gyp pin it requires

Author: WikiRikCreated Sep 3, 2026Updated Sep 7, 2026
Labelstype: refactor

Summary

Drop Node 20 once it is out of maintenance, and remove the workarounds that only exist to keep it building.

Node 20 reaches end-of-life on 2026-04-30. We currently test on Node 20, 22 and 24, and @sequelize/core declares "node": "^20.9.0 || ^22.11.0 || >=24.0.0".

This issue is to track the changes that we'll need to do then. It will be picked up by @WikiRik or one of the other maintainers. This one is not one for the community to take on.

What to change

  • Drop 20 from every node-version matrix in .github/workflows/ci.yml (the install/build, unit test, Windows, and per-dialect jobs all list it).
  • Update the engines.node range in packages/core/package.json (and any other package that declares one) to drop ^20.9.0.
  • Remove the node-gyp resolution from the root package.json:
    json
    "node-gyp@npm:latest": "11.5.0"
    This pin exists only because node-gyp@latest is now 13, which requires Node >= 22, while pg-native builds through node-gyp and CI still tests Node 20. Once Node 20 is gone, the pin can go and node-gyp can float again. It is worth removing promptly: holding a build tool back is the kind of thing that quietly rots, and the reason for it is not discoverable from the JSON itself.
  • Re-run yarn install to refresh the lockfile, and confirm pg-native still builds.

Context

The node-gyp pin was introduced alongside a lockfile refresh. It is a deliberate, temporary hold rather than a considered version choice, and this issue exists so it does not outlive its reason.


This issue was generated with Claude Code

https://claude.ai/code/session_01EgPPfqYYk6PFGbanp5mAFh