Node.js 26 Upgrade Checker
Paste your package.json and code to see what breaks on Node 26 LTS — removed APIs, deprecations, engines and native addons
Was the Node.js 26 Upgrade Checker helpful?
About this tool
The Node.js 26 Upgrade Checker scans your package.json and source code for what breaks when you move to Node 26, which becomes the Active LTS on 28 October 2026. Node 26 removes the legacy node:_stream_* modules (DEP0193) and response.writeHeader() (DEP0063), drops the --experimental-transform-types flag, turns module.register() (DEP0205), CryptoKey-in-node:crypto (DEP0203/DEP0204) and Duplex.toWeb's type option (DEP0201) into runtime warnings, enables Temporal by default and moves compiled addons to NODE_MODULE_VERSION 147. Because many teams jump from Node 20 or 22 straight to 26, the checker also covers everything removed in Node 23, 24 and 25 — util.isString() and friends, util.log(), SlowBuffer, fs.F_OK, fs.rmdir(…, { recursive: true }), tls.createSecurePair(), assert.CallTracker and more — each with its DEP code and the replacement. In package.json it checks engines.node, scripts that use removed flags, packages that no longer work (node-sass, fibers) and native addons that need a rebuild. It's a pattern-based scanner, not a full parser, so findings are places to look. Everything runs in your browser.
When to use it
- →Planning an upgrade from Node 20, 22 or 24 to the Node 26 LTS
- →Explaining an error after upgrading, like "Cannot find module '_stream_readable'" or "res.writeHeader is not a function"
- →Checking whether engines in package.json blocks installs on Node 26
- →Finding native dependencies that need a clean reinstall in CI and Docker images
- →Auditing old code for APIs that were deprecated for years and are now gone
Tips
- ◆Delete node_modules and run npm ci on the new version — compiled addons from an older install fail with "was compiled against a different Node.js version".
- ◆Run your test suite once with node --throw-deprecation: every runtime deprecation becomes an error with a stack trace that names the file.
- ◆Upgrade @types/node to ^26 along with the runtime so the compiler flags removed APIs too.
- ◆If the error comes from a dependency, the stack trace names the package — update it rather than patching node_modules.
Frequently asked questions
When does Node 26 become LTS?
Node 26 enters Active LTS on 28 October 2026. Node 25, 23 and 21 are end-of-life; Node 22 and 24 remain supported LTS lines for now, so you can plan the move rather than rush it.
Will my TypeScript still run with node file.ts?
Yes, if it only uses erasable syntax — type stripping is on by default. What's gone is --experimental-transform-types, which also transformed enums, namespaces and parameter properties. Check a file with the Node.js Type-Stripping Checker, or keep using tsx or tsc for those features.
Does Temporal being on by default break anything?
Rarely. Code that defines its own global named Temporal, or tests that assume it's absent, can behave differently. On the plus side, server code no longer needs the Temporal polyfill.