Skip to content

feat!: drop support for Node.js 20, require 22.13.0+ - #8356

Merged
serhalp merged 1 commit into
mainfrom
serhalp/feat/drop-nodejs-20
Jul 24, 2026
Merged

feat!: drop support for Node.js 20, require 22.13.0+#8356
serhalp merged 1 commit into
mainfrom
serhalp/feat/drop-nodejs-20

Conversation

@serhalp

@serhalp serhalp commented Jul 23, 2026

Copy link
Copy Markdown
Member

Summary

BREAKING: Node.js 20 is no longer supported. 22.13.0 is now the minimum supported version.

Node.js 20 reached End-of-Life (EOL) in April 2026, three months ago.

We require 22.13.0+ specifically because 22.12.0 added require(esm) support. Many of our own packages that Netlify CLI depends on as well as much of the community has been requiring 22.12.0+ in order to modernize and slim down dependency trees. (We go one further to 22.13.0 because a dependency in our tree already requires ^20.19.0 || ^22.13.0 || >=24 and cannot be removed or downgraded at this time.)

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bd553781-2d6b-4e6e-94c3-36cd0b8353b9

📥 Commits

Reviewing files that changed from the base of the PR and between f214e69 and 7e168dd.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (12)
  • .github/test-matrix.yml
  • CLAUDE.md
  • README.md
  • e2e/install.e2e.ts
  • package.json
  • src/commands/blobs/blobs-set.ts
  • src/utils/nodejs-compile-cache.ts
  • src/utils/proxy.ts
  • tests/integration/commands/dev/dev.config.test.ts
  • tests/integration/commands/dev/v2-api.test.ts
  • tests/integration/telemetry.test.ts
  • tsconfig.base.json
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • netlify/blueprints (manual)

📝 Walkthrough

Summary by CodeRabbit

  • Breaking Changes

    • Raised the minimum supported Node.js version to 22.13.0.
    • Updated installation and development requirements accordingly.
  • Bug Fixes

    • Improved blob uploads from file input by ensuring data is provided in the expected binary format.
  • Tests

    • Updated automated testing for Node.js 22.13.0 and 24.
    • Enabled previously skipped installation and integration tests across supported Node.js versions.

Walkthrough

The project minimum Node.js version was raised to 22.13.0, with CI and TypeScript configuration updated accordingly. Documentation and package metadata reflect the new requirement. ESM tests now load package metadata through createRequire, previously version-gated tests run unconditionally, blob input is converted to an ArrayBuffer, and proxy response aggregation receives an explicit Buffer type.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: eduardoboucas

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly states the breaking change: dropping Node.js 20 support and raising the minimum to 22.13.0+.
Description check ✅ Passed The description directly matches the change set and explains the Node.js 20 deprecation and new minimum version.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch serhalp/feat/drop-nodejs-20

Comment @coderabbitai help to get the list of available commands.

@netlify

netlify Bot commented Jul 23, 2026

Copy link
Copy Markdown

Deploy Preview for steady-pastelito-09e39e failed.

Name Link
🔨 Latest commit 372db1d
🔍 Latest deploy log https://app.netlify.com/projects/steady-pastelito-09e39e/deploys/6a626e017d07b60009ce520d

@github-actions

Copy link
Copy Markdown

📊 Benchmark results

Comparing with f214e69

  • Dependency count: 1,127 (no change)
  • Package size: 379 MB (no change)
  • Number of ts-expect-error directives: 358 (no change)

Comment thread src/utils/nodejs-compile-cache.ts Outdated
// The docs recommend turning this off when running tests to generate precise coverage
if (process.env.NODE_ENV === 'test') return

// TODO(serhalp): Consider enabling unconditionally now that we require Node.js 22.12.0+.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would have been a hard-break for 100% of users that are on an older Node.js version, for almost no benefit (deleting two lines of code), so I deferred.

Node.js 20 reached End-of-Life (EOL) in April 2026, three months ago.

We require 22.12.0+ specifically because that version added `require(esm)` support. Many of our own
packages that Netlify CLI depends on as well as much of the community has been requiring 22.12.0+ in
order to modernize and slim down dependency trees.
@serhalp
serhalp force-pushed the serhalp/feat/drop-nodejs-20 branch from 372db1d to 7e168dd Compare July 23, 2026 21:41
@serhalp serhalp changed the title feat!: drop support for Node.js 20, require 22.12.0+ feat!: drop support for Node.js 20, require 22.13.0+ Jul 24, 2026
import execa from 'execa'
import { expect, test } from 'vitest'

import pkg from '../../package.json'

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can switch these to with {type: 'json'} now in theory, but we need to upgrade prettier first.

@serhalp
serhalp marked this pull request as ready for review July 24, 2026 09:55
@serhalp
serhalp requested a review from a team as a code owner July 24, 2026 09:55
@serhalp
serhalp merged commit 8943e38 into main Jul 24, 2026
39 checks passed
@serhalp
serhalp deleted the serhalp/feat/drop-nodejs-20 branch July 24, 2026 11:20
serhalp pushed a commit that referenced this pull request Jul 24, 2026
🤖 I have created a release *beep* *boop*
---


## [27.0.0](v26.2.0...v27.0.0)
(2026-07-24)


### ⚠ BREAKING CHANGES

* **cli:** document exit codes, usage errors use exit code 2
([#8329](#8329))
* drop support for Node.js 20, require 22.13.0+
([#8356](#8356))

### Features

* **cli:** document exit codes, usage errors use exit code 2
([#8329](#8329))
([9098467](9098467))
* drop support for Node.js 20, require 22.13.0+
([#8356](#8356))
([8943e38](8943e38))


### Bug Fixes

* **cli:** piped --help no longer glues flag names to descriptions
([#8330](#8330))
([4b87cc7](4b87cc7))
* **init:** fix handling of gitlab repos
([#7945](#7945))
([f214e69](f214e69))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: token-generator-app[bot] <82042599+token-generator-app[bot]@users.noreply.github.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.

2 participants