The UpgradeJS Blog

Why and How to Upgrade to Node.js from v18.x to v20.x

Node.js opens a new window has always been an essential part of the tech stack for many companies and developers. And here at OmbuLabs opens a new window and UpgradeJS opens a new window we use it too, due to its efficiency, scalability, and the robust ecosystem it provides.

Recently, the Node.js team released version 20 opens a new window , bringing with it a host of new features and improvements. In this post, we’ll highlight some notable changes opens a new window and explain why and how to upgrade to Node.js 20.x.

Why upgrade?

The latest version introduces several new features and enhancements opens a new window that make Node.js more secure, efficient, and improve the overall development experience. Below is the list of the notable introduced features.

Permission model

The Node.js Permission Model is an experimental feature that provides developers with more control over file system access by allowing them to restrict access to specific resources. This enables more secure and granular control over access to resources such as the file system, child processes, worker threads, and native addons.

V8 11.3

The update to V8 engine version 11.3 brings performance improvements and new language features. Also included are new methods on Array.prototype and TypedArray.prototype to enable changes on the array by returning a new copy of it with the change, and more.

Stable test runner

The test_runner module in Node.js version 20 has been marked as stable, providing a solid foundation for authoring and running tests.


Node.js 20 includes performance improvements to fundamental runtime elements like URL, fetch(), and EventTarget. These improvements can lead to a better user experience and lower resource usage. The Performance team is also actively seeking contributors, offering opportunities for developers to directly influence and improve Node.js’ performance.

Single Executable Apps (SEA)

Support for Single Executable Applications (SEA) has been added to Node.js. This feature, still experimental, allows for the creation of standalone applications, which can simplify distribution and execution, potentially expanding the use cases for Node.js applications.

Web Crypto API

Node.js 20 improves interoperability with other JavaScript environments by aligning the coercion and validation of Web Crypto API functions’ arguments with their WebIDL definitions. This can facilitate the integration of Node.js applications with other systems and standards, potentially leading to more flexible and versatile applications.

Official support for ARM64 Windows

Node.js now officially supports ARM64 Windows, providing native execution on this platform. This can extend the reach of Node.js applications by allowing them to run on a wider range of platforms and architectures.

How to upgrade

The upgrade of the Node.js version is different for every application, the process can’t look like a one-size-fits-all solution. However, there are some general steps that you can follow to make the upgrade process as smooth as possible. In our The Basics Of The Node.js Version Upgrade Process opens a new window blog post we have explained the general steps that you can follow to upgrade your Node.js version. We recommend that you read it before you start the upgrade process.

To make the process less complicated we have collected all the changes that were made after the release of Node.js 18.16.1. Read the next section - Changes to address - to learn more about them. With this knowledge in hand, you will be able to upgrade your Node.js version with more confidence.

Changes to address

Assert Module

Asynchronous context tracking


  • Buffer.alloc(), Buffer.allocUnsafe(), Buffer.allocUnsafeSlow(): Now throws opens a new window ERR_OUT_OF_RANGE instead of ERR_INVALID_ARG_VALUE for invalid input arguments.

Command-line API


ECMAScript modules

File system

Global objects





  • socket.connect(): The default value for the autoSelectFamily option is now opens a new window true, also the default value for autoSelectFamily option can be changed at runtime using setDefaultAutoSelectFamily or via the command line option --network-family-autoselection.
  • net.createServer(): The highWaterMark option is supported now opens a new window .


Performance measurement APIs



Test runner





WebAssembly System Interface (WASI)

Web Crypto API

Worker threads


Upgrading to Node.js 20 provides the chance to take advantage of numerous innovative features and improvements. However, like any significant upgrade, it requires thoughtful preparation, a tactical strategy, and appropriate tools.

Note that the cornerstone of a triumphant upgrade is in detailed readiness, rigorous testing, and a measured, systematic rollout.

If you’re seeking help upgrading to Node 18 or 20, we’re here to assist! We offer consulting services aimed at addressing technical debt and modernizing outdated Node.js applications opens a new window !