Urgent.News

What's breaking now, across thousands of outlets.

Tech

Node 26: What Breaks When You Upgrade, and When the Jump Is Worth It (LTS Guide)

Node 26 shipped on May 5, 2026 and enters LTS on October 28. It's a calm upgrade — the list of things that actually break is short, and almost all of it has been warned about for years — but it has one property no previous version had: it's the last release of the two-per-year model. Starting with Node 27, the project moves to one release per year, and every release is LTS . The odd/even…

Node 26, upgraded on May 5, 2026 and entering its Long Term Support (LTS) phase on October 28, 2026, marks the final release under the two releases per year model. Starting with Node 27, the project will adopt one release per year, with every release being an LTS version. This upgrade, while seemingly straightforward, does bring some significant changes.

First, those coming from Node 24, the current LTS version, should expect a smooth migration with few incompatible changes. However, moving from Node 22 presents a more challenging scenario, as it encompasses all changes from Node 24 and additional updates in Node 26. Maintenance for Node 22 ended in April 2027, leaving teams with a clear deadline for their upgrade.

Node 26 will be the last LTS release under the previous schedule, while Node 27 will introduce a new model with a single release per year. The change in the release schedule eliminates the odd/even distinction, making this upgrade more than just a version bump. It's the last train on the old schedule, and teams should be aware of what is included before upgrading.

To begin the upgrade process, it's essential to determine your starting point. If your project is currently on Node 24, the migration is likely to be straightforward, focusing on checklist items rather than extensive refactoring. Moving from Node 22 requires additional considerations, as it includes changes from both Node 24 and Node 26. Nodes 22 maintenance ended in April 2027, providing teams with a deadline to complete the upgrade.

In terms of high impact changes, the removal of the internal _stream_* modules is a significant one. These modules, which have been deprecated since Node 12, have been entirely removed from Node 26. Any code that requires one of these modules will now result in a MODULE_NOT_FOUND error. To address this, developers can update the affected packages to use the public API, such as node:stream, or replace the abandoned packages with alternatives.

The readable-stream polyfill can be used to cover most cases where the package is maintained by the user and only requires a mechanical migration.

Another important change in Node 26 is the introduction of Undici 8.0, the implementation of the global fetch. This version brings stricter header validation and changes to redirect handling. If your code builds requests with dynamically generated headers, such as from a database, user input, or another API, the stricter validation in Undici 8.0 can lead to TypeError exceptions.

To resolve this issue, it's crucial to sanitize the values at the edge of your system, ensuring that any values containing newline characters are properly handled before being used in the request.

Native addons also require attention during the upgrade process. The NODE_MODULE_VERSION has changed to 147, necessitating a recompilation of every compiled addon to ensure compatibility with the new ABI. Errors indicating that a module was compiled against a different Node.js version using NODE_MODULE_VERSION 137 will occur during the upgrade.

To address this issue, developers should rebuild their addons locally using npm rebuild or package prebuilt versions for the new ABI in their CI and Docker environments. It's worth noting that the build requirements for native addons have also increased, with a minimum GCC version of 13.2 and Python 3.9 support being dropped from the build toolchain.

Medium impact changes include the deprecation of the module.register() API and the removal of the writeHeader() method from the HTTP server. The module.register() API, used by instrumentation loaders, on-the-fly transpilation, and APM agents, is now runtime-deprecated in Node 26. The recommended replacement is the synchronous module.registerHooks() API.

While this change does not require direct modifications to user code, it necessitates updating third-party dependencies, such as observability agents and tools like tsx, to versions that have already migrated to the new API.

Lastly, the writeHeader() method has been removed from the http.Server.prototype. This method has been available since the initial versions of Node.js, and its removal signals the end of its functionality in Node 26. Developers relying on this method should ensure they have alternative solutions in place for managing HTTP responses.

Overall, upgrading to Node 26 presents a relatively calm experience, with a short list of breaking changes. However, it is essential to carefully evaluate your project's starting point and plan accordingly to minimize potential disruptions. By addressing the outlined changes and preparing for the new release schedule, teams can successfully transition to Node 26 and benefit from its LTS support while enjoying the advantages of the new release model.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

Laravel 13: What Actually Breaks When You Upgrade (and What Doesn't)

Laravel 12 stopped receiving bug fixes on August 13, 2026. Since then only security patches remain, and those run out on February 24, 2027.

  • Laravel 12 stopped receiving bug fixes on August 13, 2026
  • Two high-impact changes: Dependencies in composer.json and CSRF middleware updates
  • PHP 8.3 minimum required for Laravel 13 upgrade

More from Monday 21 September →