cloudflare / cloudflare/workerd
Implement `remove_nodejs_compat_eol_v26` (and 25) for Node 26
- 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
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