NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3617 most downloaded on npm
Tomorrow's ECMAScript modules today!
Last release 7 years ago
no release in 18 months
Ships unpredictably
gaps range from 8 days to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
140 releases · first in 2015
Fixed V8 code cache usage regression
Ensured TDZ instrumentation works in new expressions
Ensured line continuations work in the REPL
esm compiled into NodeOne column per quarter.
Added more esm option validation checks
esm option validation checksoptions.mainFields (#473)Avoided using the proxy as the receiver in get traps
Added detection of cycles when resolving exported names
fs module in the REPL (#470)Added support for parsing BigInt and numeric separator syntax
BigInt and numeric separator syntaxoptions.cjs.interop is disabled in .mjs files (#456)Ensured util.types.isModuleNamespaceObject() doesn’t error on non-object values
console.Console exists (#450)util.types.isModuleNamespaceObject() doesn’t error on non-object valuesEnsured support for star exports of multiple forwarded exports
Ensured the @babel/register cache is cleared in more cases
@babel/register cache is cleared in more casesutil module in the REPLFixed inspect() regression hiding internal proxies
inspect() regression hiding internal proxiesEnsured console and inspecting enhancements work in Node < 10
console and inspecting enhancements work in Node < 10Ensured mutable namespaces aren’t inadvertently finalized while merging entries
Continued max call stack error fixes from 3.0.29
default exported function declarations (#434, #441)Improved formatting of proxies in util.inspect()
util.inspect()Fixed support for inspecting uninitialized namespace objects
Added support for inspecting nested objects containing builtin modules and namespace objects
util.formatWithOptions() across Node versions.esmrc is found without a package.json (#438)default namespace property (#435)preload() is called in the parse pass regardless of module type (#432)Fixed regression in exporting bindings of other modules
Added support for --preserve-symlinks-main Node flag Added support for mutable namespace objects with options.cjs.mutableNamespace (#266) Avoided synt
Added support for --preserve-symlinks-main Node flag
Added support for mutable namespace objects with options.cjs.mutableNamespace (#266)
Avoided syntax errors caused by TDZ instrumentation (#410)
Fixed default export regression (#409, #411)
Ensured primitives instanceof proxied modules don’t error
instanceof proxied modules don’t error (#408)Enable named exports of builtin modules for .mjs files
.mjs filesinstanceof works for original and proxied modules (#397)nyc runs on a cleaned cache (#402)Ensured getters on CJS exports update live bindings
module module is not memoized (#392)Added support for util.types.isModuleNamespaceObject()
util.types.isModuleNamespaceObject()instanceof builtin modules works as expected (#391)Ensured builtin modules are not augmented
Ensured modules with unresolvable specifiers can be mocked
Added support for parsing class fields syntax
Added support for --expose-internals Node flag
--expose-internals Node flagmock-require and require-inject work with ESM (#379)Ensured .mjs files cannot be loaded with require in more conditions
.mjs files cannot be loaded with require in more conditionsEnsured APM packages can instrument ES modules
* Fixed Module._cache regression
Module._cache regression (#377)Ensured esm works in Node 6.0.0 even though latest LTS is 6.14.1
esm works in Node 6.0.0 even though latest LTS is 6.14.1Ensured live bindings of CJS exports respond to defining/deleting module.exports properties
module.exports propertiesmodule.exports property values are used to update CJS bindingsEnsured .js ESM files cannot be loaded with require() in "strict" mode
.js ESM files cannot be loaded with require() in "strict" modeEnsured .mjs files cannot be loaded with require()
.mjs files cannot be loaded with require() (#373)Avoided throwing errors on proxies created by other esm instances
esm instances (#370)Improved esm related error messages
esm related error messagesesm range restrictions in the module hook (#366, #368, #369)Ensured modules aren’t cached in Module._cache before Module._load is called
Module._cache before Module._load is called (#362)Ensured class invocations work when checking for TDZ violations
@babel/register cache cleanup (#363)Detect temporal dead zone violations more accurately
Ensured import.meta is translated in if and while statement expressions
import.meta is translated in if and while statement expressions (#356)Ensured state is shared when esm is recursively entered
esm is recursively entered (#337)Ensured Module._nodeModulePaths and Module._resolveFilename resolve Electron requests
Module._nodeModulePaths and Module._resolveFilename resolve Electron requestsEnsured dynamic import() can load .json files in the REPL
import() can load .json files in the REPLEnsured native module methods don’t throw in ESM
Ensured Module references don’t persist across loader instances
Module references don’t persist across loader instances (#331)Ensured .mjs modules cannot load non .mjs ES modules
.mjs modules cannot load non .mjs ES modulesEnsure non-strict reserved words are enforced consistently in the REPL
--check hook for eventually supporting --check with file pathsEnsured non-deprecated Buffer usage
esm works with --eval and --print flags when compiled into NodeModule#_compile works when module.filename is not defined (#326)Buffer usageEnsured Babel plugin errors are aren’t swallowed
module.exports are frozen.mjs filesEnsured builtin modules are loadable from the require() hook
require() hookrequire() is gettable from esmEnsured util.inspect() represents namespace objects with live values
util.inspect() represents namespace objects with live valuesEnsured util.inspect() represents namespace objects with populated values
util.inspect() represents namespace objects with populated valuesAvoided falling back to the next-to root directory if no config is found
esm easier to compile into NodeAdded a symbol to the esm export for easier detection by AVA
esm export for easier detection by AVAEnsured esm throws errors for invalid options
esm throws errors for invalid options (#315)Applied zero config defaults to enable CJS interoperability
.mjs files down to basic functionality without support for esm options@std/esm to esm"js" mode to "auto""mjs" mode to "strict""cjs" mode shorthandNothing 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 →