NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1882 most downloaded on npm
`unenv` is a framework-agnostic system that allows converting JavaScript code to be platform agnostic and work in any environment including Browsers, Workers, Node.js, or JavaScript runtime.
Last release 11 months ago
29 Oct 2025
Release timing varies
gaps range from 8 days to 6 months
Some releases are documented
notes for 31 of 58 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
83 releases · first in 2021
One column per quarter.
debug: Basic namespace filtering
compare changes 📦 Build Reduce external dependencies ( #530 ) 🏡 Chore Update lockfile
compare changes 🩹 Fixes node:cluster: Minor fixes ( #521 ) 💅 Refactors Rewrite debug npm shim ( #525 ) ❤️ Contributors Pooya Parsa ( @pi0 ) Victor Ber
debug npm shim (#525)node:events: Call to Array.prototype.slice with context
Array.prototype.slice with context (#518)node:tty Use default export for ReadStream
ReadStream (#513)Polyfill to enable node sourcemaps ( #511 , 4d8a6b7 )
getSourceMapsSupport (4d8a6b7)Add missing whatwg-url/webidl2js-wrapper npm shim ( #505 ) ( @crwnd )
compare changes 📦 Build Export entry types
node: Add process.version and process.versions.node
Timeout polyfill (b6934a5)Agent.options property (#502)Timeout polyfill (b6934a5)Agent.options property (#502)Avoid circular dependency between process and node:events
process and node:events (#489)node:process: Return undefined for getBuiltinModule calls
getBuiltinModule (#485)readline: Fixed import of readline/promise
readline/promise (#482)globalThis.performance before reexporting it (#483)defineEnv: Resolve preset layers individually
node:perf_hooks: Avoid referencing to global
node: Add getOwnPropertyDescriptor for process.env (#475, 3abdebc, d2219ed)
getOwnPropertyDescriptor for process.env (#475)Add opt-in polyfills for timers and buffer
Resolve built-in modules as node:
defineEnv: Support disabling polyfill and external with ! prefix
polyfill and external with ! prefix (#467)node:*/promises for promises export (#468)exsolve to resolve paths (#472)defineEnv (#464)polyfill and external with ! prefix (#467)node:*/promises for promises export (#468)exsolve to resolve paths (#472)defineEnv (#464)Resolve tree-shaking issues with node/util
node:process for polyfill (#453)node/util (#458)performance.now() (#463)nextTick to a separate file (#454)process internals as side-effect free (#455)node:util tree-shaking (#456)ResolvedEnvironment (#451)node:process for polyfill (#453)node/util (#458)performance.now() (#463)process internals as side-effect free (#455)node:util tree-shaking (#456)console: Rename _time to _times
_time to _times (#443)types from node:util/types (#447)false (#448)npmShims (#444)process as class (#450).ts files as is (5d18c2b)npmShims (#444)process as class (#450)Import node types as nodeSomeModule
node:repl and node:inspector/promises to the nodeless preset (#431)defineEnv and docs (#434)node:repl and node:inspector/promises to the nodeless preset (#431)defineEnv and docs (#434)mock-cjs (ce0ca9a)Fix coverage and add node:repl + node:inspector/promises
import.meta.url (890c145)node:repl + node:inspector/promises (#424)defineEnv from main (#421)builtinModules from runtime (041d4f6)notImplemented calls as side-effect free (#422)satisfies T when possible (#423)inject and polyfill for nodeCompat (#427)> This is first public release candidate for unenv@2.
[!NOTE] This is first public release candidate for
unenv@2.
If directly using unenv/rumtime imports, you need to update unenv/runtime/node/{module}/index to unenv/runtime/{module}
If you have encountered any issues regarding ESM-only dist, please reach out.
node@22.13.1 types (#414)AsyncHook class (#415)randomBytes returning zero values (#420)AsyncHook class (#415)randomBytes returning zero values (#420)node:net (#405)runtime/node structure (#392)cloudflare: Add node:net and node:timers
node:net and node:timers (#396)node:net/promises does not exist (#400)Nothing published for this version
compare changes ### 🚀 Enhancements - Implement node:os
compare changes ### 🚀 Enhancements - Experimental deno preset (#155) - Experimental cloudflare preset (#156) - Experimental vercel preset (#157) - den
Add polyfill for node:https with named exports
node:module (#148)node:https with named exports (5917a50)consola/utils subpath (#149)destroySoon and autoSelectFamilyAttemptedAddresses (311c72b)node:fs: Named exports for /promises subpath
/promises subpath (b035e09)Add AbortController export from node-fetch
AbortController export from node-fetch (230385c)Thanks to @dario-piotrowicz for reporting this issue!
node:fs: Default export for node:fs/promises
node:fs/promises (37fd173)Illegal invocation error (#134)openAsBlob (16f6150)asyncDispose for readable (f8f8f46)node:stream: Allow tree-shaking Duplex
Expose __unenv__ flag for unenv classes and functions
__unenv__ flag for unenv classes and functions (#125)AsyncHook, AsyncLocalStorage and AsyncResource with globalThis (#126)Buffer with globalThis (1337f98)EventEmitter with globalThis (5ba2d03)Duplex, Readable, Transform and Writable with globalThis (e06358d)node:string_decoder with global polyfill (002467a)__unenv__ flag for unenv classes and functions (#125)AsyncHook, AsyncLocalStorage and AsyncResource with globalThis (#126)Buffer with globalThis (1337f98)EventEmitter with globalThis (5ba2d03)Duplex, Readable, Transform and Writable with globalThis (e06358d)node:string_decoder with global polyfill (002467a)Add async_hooks to nodeless preset
async_hooks to nodeless preset (dee2ddd)AsyncLocalStorage and AsyncResource (388f529)node: Type EventEmitter in dist
node: Export full node crypto exports
setHeader (#119)compose to stream classes (5687712)EventEmitter from local path (ecd741a)setHeader (#119)compose to stream classes (5687712)EventEmitter from local path (ecd741a)node/utils: Add missing types named export
Keep consola/core subpath as is
Implement basic node:async_hooks
node:async_hooks (#98)consola/core instead of mocking consola (#93)IncomingMessage.headersDistinct and IncomingMessage.trailersDistinct (08e36cc)randomBytes (#100)ServerResponse.appendHeader (c492d45)snapshot stub (1eec581)node:process: Avoid recursive access
node:process: Allow accessing process.env from dynamic sources
node: Add webcrypto export for node:crypto
npm: Add named consola export for consola v3 compat
node/process: Support process.env shims
node/stream: Stop writing data when writableEnded is set
node/stream: Support writing multipe chunks
MIMEType and MIMEParams (#76)fetch: Only pass context key from main context
context key from main context (2e9b9fb)call: Preserve fetch context in req.__unenv__
req.__unenv__ (#72)buffer/index.js (660df39)Add extend method to debug mock
Switch to changelogen for release
Nothing published for this version
createCall: normalize context headers (65fe2b1), closes nuxt/framework#5718
BodyInit (7030004)Nothing published for this version
Nothing published for this version
createCall: return res._data as is
res._data as isnode:fs import (524bc21)node-fetch-native for polyfill (7944681)path (resolves #35) (bd473c5)fs polyfill (#9) (5ee4115)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
pkg: emit cjs for entry to avoid breaking change
node-fetch and cross-fetch with platform natives (resolves #29)node: protocol aliases (d3e42f7)FormData, Blob and AbortController (c0b83a7), closes #23node-fetch and cross-fetch with platform natives (resolves #29) (276d44d)fs/promises to NodeBuiltinModules (resolves #34) (35f31a4)stream exports (resolves #11) (a51e893)mime/lite as well (e733440)mock/proxy-cjs (6ac4279)Your coding agent can read these notes before it upgrades. Set up the MCP server →