cloudflare / cloudflare/workerd

Implement `remove_nodejs_compat_eol_v26` (and 25) for Node 26

Open
#7,003 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
8.7k
Forks
739
Avg merge
2d 20h
Merged PRs (30d)
174

Description

We have the [22, 23, and 24 flags](https://github.com/cloudflare/workerd/blob/3d43d416091364edaf7905448ecf8dcb0cc7b503/src/workerd/io/compatibility-date.capnp#L1037-L1057) to remove EOL Node features in the corresponding releases.

We should add flags for 25 and 26 as well.

Refs:
- https://nodejs.org/en/blog/release/v25.0.0
- https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V25.md
- https://nodejs.org/en/blog/release/v26.0.0
- https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V26.md

Here is what gemini thinks we should handle (to give an idea):

### Node.js 25

#### 🛑 Removed / EOL Features
* **Buffer:** The legacy `SlowBuffer` API was finalized and completely removed.
* **File System (`fs`):** The legacy file access constants `fs.F_OK`, `fs.R_OK`, `fs.W_OK`, and `fs.X_OK` were completely removed.
* **Process & Async Hooks:**
* The `multipleResolves` event on the `process` object was removed.
* The `asyncResource` property on bound functions in `async_hooks` reached EOL.
* **Network & URL:** The legacy URL parser's tolerance for bad/malformed ports was moved to EOL (developers must strictly use the WHATWG `URL()` API).
* **Testing & Assertions:**
* The experimental `CallTracker` in the `assert` module was moved to EOL.
* Passing multiple arguments to `assert.fail()` was removed.
* **Package Management:** `Corepack` is no longer bundled with Node.js starting from version 25.0.0.

---

### Node.js 26

Node.js 26 (released in May 2026) continues the cleanup process and promotes several doc-deprecations to runtime-deprecations or full removals. Note: With the release of Node.js 26, the Node.js 25 release line reached its End-of-Life (EOL) on June 1, 2026.

### 🛑 Removed / EOL Features
* **Legacy Internal Streams:** The legacy stream private modules (`_stream_wrap`, `_stream_readable`, `_stream_writable`, `_stream_duplex`, `_stream_transform`, and `_stream_passthrough`) are now fully removed.
* **HTTP (DEP0063):** `http.Server.prototype.writeHeader()` is fully removed. Developers should use `http.Server.prototype.writeHead()` instead.
* **Transform Types:** The `--experimental-transform-types` CLI flag has been removed.
* **Web Storage API:** `localStorage` now returns `undefined` if accessed without a properly configured backing file.

Contributor guide

Open the contributing guide

Research direction

Read the existing Node 22, 23, and 24 flags in src/workerd/io/compatibility-date.capnp around lines 1037-1057, then compare the Node 25 and 26 release references linked in the issue. Determine which documented EOL or removed behaviors belong in compatibility flags and add the entries for both releases; done when the flags reflect the relevant changelog changes.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js
Domain
backend
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.