NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2083 most downloaded on npm
cloudflare preset for unenv
Last release 13 days ago
21 Sep 2026
Ships unpredictably
gaps range from 9 days to 5 months
Nearly every release is documented
notes for 50 of 50 stable releases
1 version withdrawn
withdrawn after publishing
2 years old
758 releases · first in 2024
One column per month.
Bundlers now retain side-effect-only polyfills that install runtime globals such as performance instead of tree-shaking them from applications.
#15745 14d946d Thanks @edmundhung! - Preserve runtime polyfills when bundling @cloudflare/unenv-preset
Bundlers now retain side-effect-only polyfills that install runtime globals such as performance instead of tree-shaking them from applications.
The following Node.js module compatibility flags are no longer experimental and are now automatically enabled for workers using nodejs_compat with a c
#12763 d028ffb Thanks @petebacondarwin! - Graduate experimental Node.js module flags to date-gated flags
The following Node.js module compatibility flags are no longer experimental and are now automatically enabled for workers using nodejs_compat with a compatibility date of 2026-03-17 or later: perf_hooks, v8, tty, child_process, worker_threads, readline, and repl. Each flag can still be explicitly enabled or disabled via the corresponding enable_/disable_ compatibility flags.
They are enabled when the enable_nodejs_perf_hooks_module compatibility flag is set. This feature is currently experimental and requires the above fla
#10618 5cc8fcf Thanks @petebacondarwin! - Use the native workerd node:perf_hooks module and Performance global classes when available
They are enabled when the enable_nodejs_perf_hooks_module compatibility flag is set. This feature is currently experimental and requires the above flag and experimental compatibility flag to be set.
This feature is currently experimental and requires both the enable_nodejs_readline_module and experimental compatibility flags to be set.
#11734 5f9f0b4 Thanks @petebacondarwin! - Add support for native node:readline module when the enable_nodejs_readline_module compatibility flag is enabled.
This feature is currently experimental and requires both the enable_nodejs_readline_module and experimental compatibility flags to be set.
#12043 452cdc8 Thanks @petebacondarwin! - Add support for native node:worker_threads module from workerd when the enable_nodejs_worker_threads_module compatibility flag is enabled.
This feature is currently experimental and requires nodejs_compat, experimental, and enable_nodejs_worker_threads_module compatibility flags to be set.
This feature is currently experimental and requires both the enable_nodejs_child_process_module and experimental compatibility flags to be set.
#12573 9a565d5 Thanks @petebacondarwin! - Add support for native node:child_process module from workerd when the enable_nodejs_child_process_module compatibility flag is enabled.
This feature is currently experimental and requires both the enable_nodejs_child_process_module and experimental compatibility flags to be set.
#12023 7f18183 Thanks @petebacondarwin! - Add support for native node:tty module from workerd when the enable_nodejs_tty_module compatibility flag is enabled.
This feature is currently experimental and requires nodejs_compat, experimental, and enable_nodejs_tty_module compatibility flags to be set.
#12363 39491f9 Thanks @petebacondarwin! - Add support for the native node:v8 module from workerd when the enable_nodejs_v8_module and experimental compatibility flags are enabled
This feature is currently experimental and requires nodejs_compat, experimental, and enable_nodejs_v8_module compatibility flags to be set.
Note that we only enable this if all of the following conditions are met:
#12377 312b5eb Thanks @vicb! - Use the native node:process v2 when it is available
Note that we only enable this if all of the following conditions are met:
fetch_iterable_type_support and fetch_iterable_type_support_override_adjustment are active (explicitly specified or implied by date or other flags).Note that EventEmitters (on, off, addListener, removeListener, ...) used to be available on the imported process module while they should not have been. They are now only available on the global process:
import p from "node:process";
// Working before this PR, not working after this PR
p.on("exit", exitHandler);
// Use the global process instead (works before and after the PR)
process.on("exit", exitHandler);
### Minor Changes - #12007 `5f060c9` Thanks @petebacondarwin! - Add support for native node:repl module when the enable_nodejs_repl_module and experim
5f060c9 Thanks @petebacondarwin! - Add support for native node:repl module when the enable_nodejs_repl_module and experimental compatibility flags are enabled.Those modules are no more experimental since workerd 1.20260115.0
### Minor Changes - #11701 `fec8f5b` Thanks @petebacondarwin! - Add support for native node:dgram module when the enable_nodejs_dgram_module compatibi
#11701 fec8f5b Thanks @petebacondarwin! - Add support for native node:dgram module when the enable_nodejs_dgram_module compatibility flag is enabled. This feature is currently experimental and requires both the enable_nodejs_dgram_module and experimental compatibility flags to be set.
#11799 d39777f Thanks @petebacondarwin! - Add support for native node:_stream_wrap module when the enable_nodejs_stream_wrap_module compatibility flag is enabled. This feature is currently experimental and requires nodejs_compat, experimental, and enable_nodejs_stream_wrap_module compatibility flags to be set.
The list of builtin modules should not depend on the version of Node. Switch to using the lists published by @cloudflare/unenv-preset.
#11841 beb96af Thanks @vicb! - Add support for native node:sqlite module when the enable_nodejs_sqlite_module compatibility flag is enabled. This feature is currently experimental and requires nodejs_compat, experimental, and enable_nodejs_sqlite_module compatibility flags to be set.
#11834 5c59217 Thanks @vicb! - Export the list of built-in node modules that are available without the node: prefix.
Modules that are only available with the node: prefix are not included (i.e. node:sqlite).
Note that new modules will be added with the node: prefix only and not be added to the list.
#11834 5c59217 Thanks @vicb! - fix handling of Node builtin modules
The list of builtin modules should not depend on the version of Node.
Switch to using the lists published by @cloudflare/unenv-preset.
This fixes an issue with trying to import i.e. node:sqlite with Node < 22.5.0
which does not implement this module.
To enable the native inspector module, add the following to your wrangler.jsonc:
#11733 62fd118 Thanks @petebacondarwin! - Add support for native node:inspector module when the enable_nodejs_inspector_module compatibility flag is enabled. This feature is currently experimental and requires both the enable_nodejs_inspector_module and experimental compatibility flags to be set.
To enable the native inspector module, add the following to your wrangler.jsonc:
{
"compatibility_flags": ["experimental", "enable_nodejs_inspector_module"]
}
Then you can import and use the inspector module in your Worker:
import inspector from "node:inspector";
// Access inspector APIs (note: workerd's implementation is a non-functional stub)
inspector.url(); // returns undefined
inspector.close(); // no-op
#11744 a7e9f80 Thanks @petebacondarwin! - Add support for native node:inspector/promises module when the enable_nodejs_inspector_module compatibility flag is enabled. This extends the existing node:inspector support to include the promises-based API.
To enable the native inspector/promises module, add the following to your wrangler.jsonc:
{
"compatibility_flags": ["experimental", "enable_nodejs_inspector_module"]
}
Then you can import and use the inspector/promises module in your Worker:
import inspector from "node:inspector/promises";
// Access inspector APIs (note: workerd's implementation is a non-functional stub)
inspector.url(); // returns undefined
inspector.close(); // no-op
It is enabled when the enable_nodejs_console_module compatibility flag is set. This flag defaults to true when nodejs_compat is turned on and the date
#10606 819e287 Thanks @petebacondarwin! - Use workerd node:console when it is available
It is enabled when the enable_nodejs_console_module compatibility flag is set.
This flag defaults to true when nodejs_compat is turned on and the date is >= 2025-09-21.
#10621 0aa959a Thanks @petebacondarwin! - Use native node:vm module when available
It is enabled starting on 2025-10-01 or when the enable_nodejs_vm_module compatibility flag is set.
Node modules punycode, trace_events, cluster, wasi, and domains will be used when enabled via a compatibility flag or by default when the compatibilit
It is enabled when the enable_nodejs_domain_module compatibility flag is set.
#11353 0cf696d Thanks @vicb! - Use the native node:domain module when available
It is enabled when the enable_nodejs_domain_module compatibility flag is set.
#11025 4a158e9 Thanks @devin-ai-integration! - Use the native node:wasi module when available
It is enabled when the enable_nodejs_wasi_module compatibility flag is set.
It is enabled when the enable_nodejs_trace_events_module compatibility flag is set.
#11024 cdcecfc Thanks @devin-ai-integration! - Use the native node:trace_events module when available
It is enabled when the enable_nodejs_trace_events_module compatibility flag is set.
### Patch Changes - #11080 `90a2566` Thanks @vicb! - Bump unenv to 2.0.0-rc.24
It is enabled when the enable_nodejs_cluster_module compatibility flag is set.
It is enabled when the enable_nodejs_punycode_module compatibility flag is set.
### Patch Changes - #10860 `2594130` Thanks @vicb! - Revert "Drop node:process polyfill when v2 is available"
Note that EventEmitters (on, off, addListener, removeListener, ...) used to be available on the import while they should not have been. They are now o
#10805 d0801b1 Thanks @vicb! - Drop node:process polyfill when v2 is available
Note that EventEmitters (on, off, addListener, removeListener, ...) used to be available on the import while they should not have been. They are now only available on the global process:
import p from "node:process";
// Working before this PR, not working after this PR
p.on("exit", exitHandler);
// Use the global process instead (works before and after the PR)
process.on("exit", exitHandler);
### Patch Changes - #10577 `e9b0c66` Thanks @vicb! - Use workerd node:process v2 when available
### Patch Changes - #10552 `3b78839` Thanks @vicb! - Bump unenv to 2.0.0-rc.21
The latest release include a fix for `node:tty` default export. See the changelog for full details.
#10527 818ce22 Thanks @vicb! - Bump unenv to 2.0.0-rc.20
The latest release include a fix for node:tty default export.
See the changelog for full details.
#10430 cb22f5f Thanks @anonrig! - Remove node:util and node:sys polyfills which are now fully implemented in workerd
#10536 a565291 Thanks @vicb! - Use the native node:http2 when available.
It is enabled starting on 2025-09-01 or when the enable_nodejs_http2_module compatibility flag is set.
The native node:constants module was implemented in this PR It was released as part of workerd 1.20250813.0
#10514 31ecfeb Thanks @vicb! - Use the native node:constants module
The native node:constants module was implemented in this PR
It was released as part of workerd 1.20250813.0
#10431 f656d1a Thanks @anonrig! - Remove node:module polyfills
#10443 bd21fc5 Thanks @anonrig! - Removes node:crypto polyfills
#10498 4851955 Thanks @vicb! - enabled native node:fs and node:os modules.
native node:fs is used when the enable_nodejs_fs_module is set or by default starting from 2025-09-15.
native node:os is used when the enable_nodejs_os_module is set or by default starting from 2025-09-15
See `node:http` and `node:https` for details.
### Patch Changes - #10432 `19e2aab` Thanks @anonrig! - Remove "node:tls" polyfill
A patched version of debug was previously introduced that resolved the package to a custom implementation. However, this caused issues due to CJS/ESM
#10374 20520fa Thanks @edmundhung! - Simplify debug package resolution with nodejs_compat
A patched version of debug was previously introduced that resolved the package to a custom implementation. However, this caused issues due to CJS/ESM interop problems. We now resolve the debug package to use the Node.js implementation instead.
The async_hooks module is now provided natively by workerd, making the polyfill unnecessary. This improves performance and ensures better compatibilit
#10243 d481901 Thanks @devin-ai-integration! - Remove async_hooks polyfill - now uses native workerd implementation
The async_hooks module is now provided natively by workerd, making the polyfill unnecessary. This improves performance and ensures better compatibility with Node.js async_hooks APIs.
### Minor Changes - #10208 `6b9cd5b` Thanks @vicb! - add support for native node:os - #10205 `7e204a9` Thanks @vicb! - Add support for http and https
### Minor Changes - #10048 `dbdbb8c` Thanks @vicb! - pass the compatibility date and flags to the unenv preset - #10078 `5991a9c` Thanks @vicb! - add
### Patch Changes - #10031 `823cba8` Thanks @vicb! - wrangler and vite-plugin now depend upon the latest version of unenv-preset
### Minor Changes - #10014 `189fe23` Thanks @edmundhung! - Shim debug npm package with patched version for cloudflare env support
189fe23 Thanks @edmundhung! - Shim debug npm package with patched version for cloudflare env support### Patch Changes - #9483 `3261957` Thanks @vicb! - Use crypto.constants from workerd
### Patch Changes - #9220 `f61a08e` Thanks @vicb! - Sync unenv-preset with workerd - #9219 `ea71df3` Thanks @vicb! - bump unenv to 2.0.0-rc.17
Uses checkServerIdentity, createSecureContext, and SecureContext from workerd rather than the unenv polyfill.
### Minor Changes - #8568 `a7bd79b` Thanks @vicb! - Use the native implementation of crypto APIs
### Minor Changes - #8514 `4ad78ea` Thanks @vicb! - Use the native implementation for connect and TLSSocket from node:tls
### Minor Changes - #8514 `4ad78ea` Thanks @vicb! - Use the native implementation for connect and TLSSocket from node:tls ### Patch Changes - #8514 `4
Fixes outdated dist files in the 2.0.1 release
### Patch Changes - Sync with unenv@2.0.0-rc.14
unenv@2.0.0-rc.14The preset is now delivered as ESM only
### Patch Changes - #7998 `576d931` Thanks @vicb! - Use builtin implementation for isArray and isDeepStrictEqual
These globals are now available in workerd (as of v1.20240815 - cloudflare/workerd@f07cd8e).
#7939 17ce7f5 Thanks @anonrig! - Remove clearImmediate() and setImmediate() injects
These globals are now available in workerd (as of v1.20240815 - cloudflare/workerd@f07cd8e).
### Minor Changes - #7853 `061587d` Thanks @anonrig! - Use the workerd implementation for Node net, timers, and timers/promises modules - drop the pol
Pull a couple changes in node:timers
#7806 d7adb50 Thanks @vicb! - chore: update unenv to 2.0.0-rc.0
Pull a couple changes in node:timers
The unenv update also includes #unjs/unenv/381 which implements
stdout, stderr and stdin of node:process with node:tty
Bump the Typescript dependency to ^5.7.3 as required by unbuild
Initial release of the Cloudflare unenv preset for Workers
Updated dependencies [`2194f88`]:
2194f88]:
Provides both a programmatic API and a CLI (pages-functions build) for converting a Cloudflare Pages functions/ directory into a Cloudflare Workers bu
#14785 5e6556a Thanks @dario-piotrowicz! - Publish helpers for compiling Pages Functions directories into Workers bundle
Provides both a programmatic API and a CLI (pages-functions build) for converting a Cloudflare Pages functions/ directory into a Cloudflare Workers bundle:
npx @cloudflare/pages-functions build ./functions --outdir ./dist
The package compiles the Worker and its auxiliary modules, but does not deploy them or generate deployment configuration. Consumers must provide the appropriate Wrangler configuration, including the selected fallback service binding (ASSETS by default) when applicable.
#14928 f05a0de Thanks @dario-piotrowicz! - Improve asset directory error messages in Pages Functions builds
Previously, when an imported asset directory was invalid, a single error message was shown: '<path>' does not exist or is not a directory. This has been split into two distinct, actionable messages:
'<path>' does not exist. Please create the directory or check the path and try again.'<path>' is not a directory. Please provide a path to a valid directory.b21eac2 Thanks @jamesopstad! - Move build output utils to new @cloudflare/build-output-utils packageb21eac2]:
Updated dependencies [`42af66d`, `a0a091b`, `f03b108`, `4815711`, `2b390d7`, `a6c214f`, `34430b3`]:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →