You have reached the beginning of time!

Node.js 24 Is Here: What You Need to Know

We want to express our appreciation to the many contributors to this release including NodeSource team members @RafaelGSS, @juanarbol. Thank you for all your efforts to keep moving Node.js forward!

Node.js 24 has officially landed! This release brings some exciting improvements to JavaScript developers, making Node.js faster, more capable, and more aligned with the latest JavaScript standards.

Here’s a breakdown of the most relevant updates, why they matter, and what you should know—especially if you’re building web apps, working with async code, or just like staying current.

Looking for expert support or performance observability and diagnostics tooling for Node.js? NodeSource has helped software engineering and DevOps teams keep Node.js applications running smoothly and securely for over a decade. Also, we provide trusted, enterprise-grade Node.js binary distributions for major Linux distributions. Download them here.

V8 Engine Upgrade to 13.6

The V8 JavaScript engine (the same engine used in Chrome) powers your Node.js code. With the new upgrade, Node.js 24 unlocks several cutting-edge JavaScript features:

  • RegExp.escape Escaping regular expressions just got easier and safer—no more hand-rolling escape functions!

  • Float16Array A new typed array for handling 16-bit floats, great for performance-sensitive code like graphics or ML.

  • Atomics.pause Adds a way to pause threads in Atomics, helpful for low-level concurrency tasks in Workers.

  • WebAssembly Memory64 WebAssembly gets 64-bit memory support—more power for high-performance and native-like workloads.

  • [Explicit Resource Management await using](https://tc39.es/proposal-explicit-resource-management/ It ensures that resources (like files, sockets) are automatically cleaned up.

  • Error.isError A new utility to easily check if something is an actual Error object—small but helpful for safer error handling.

📌 Why this matters: These features bring Node.js even closer to what modern JavaScript looks like in browsers and spec proposals. That means better DX, less boilerplate, and more powerful capabilities.

Experimental Permission Model Evolves

The experimental Permission Model, first introduced in Node.js 20, is evolving. The CLI flag has changed from --experimental-permission to --permission, signaling it's more stable and ready for wider use.

Do you know what the Node.js permission model is? If you want to find out more, check the documentation and watch this talk “The Journey of the Node.js Permission Model” by Rafael Gonzaga.

📌 Why this matters: It’s getting closer to stable. You can limit what your Node.js app can access (like filesystem or network)—a big win for security-conscious devs.

URLPattern is Now a Global

The URL Pattern API defines a syntax that is used to create URL pattern matchers. These patterns can be matched against URLs or individual URL components. The URL Pattern API is used by the URLPattern interface.

You can now use URLPattern without importing it—just like URL.

const pattern = new URLPattern({ pathname: '/users/:id' });

📌 Why this matters: It’s great for routing, URL matching, or building tools. It’s powerful and more ergonomic than regex.

Better Built-in Test Runner

The built-in test runner now automatically waits for subtests—no more needing to manually await them.

Before Node.js 24

You had to manually await subtests to ensure they completed:

import test from 'node:test';
import assert from 'node:assert';

test('top level test', async (t) => {
  await t.test('subtest 1', (t) => {
    assert.strictEqual(1, 1);
  });

  await t.test('subtest 2', (t) => {
    assert.strictEqual(2, 2);
  });
});

If you forgot to await, the test runner might exit before subtests finished, leading to confusing or flaky results.

After Node.js 24

Subtests are now automatically awaited, even if you don’t explicitly use await:

import test from 'node:test';
import assert from 'node:assert';

test('top level test', async (t) => {
  t.test('subtest 1', (t) => {
    assert.strictEqual(1, 1);
  });

  t.test('subtest 2', (t) => {
    assert.strictEqual(2, 2);
  });
});

Even without the await keyword, both subtests will run and complete before the test runner exits.

📌 Why this matters: Writing tests becomes simpler and less error-prone. Especially helpful if you're migrating to the built-in runner from other frameworks.

HTTP Client Upgrade: Undici 7.0.0

Node 24 includes Undici 7.0.0, an upgraded version of its modern HTTP client. It brings updated HTTP standards support, and a smoother experience for those using fetch() or building HTTP-heavy services. Check out some Undici breaking changes affecting node.js here.

📌 Why this matters: Faster HTTP, better standards compliance, and smoother dev experience if you're using fetch or building HTTP-heavy apps.

npm v11

Node 24 comes with npm v11, which brings:

  • Faster installs
  • Improved security checks Better compatibility with modern package ecosystems
  • npm now supports node ^20.17.0 || >=22.9.0
  • npm init now has a type prompt, and sorts the entries the created packages differently
  • The npm hook command has been removed
  • --ignore-scripts now applies to all lifecycle scripts, include prepare
  • npm will no longer fall back to the old audit endpoint if the bulk advisory request fails.

📌 Why this matters: A smoother npm install means happier devs and CI pipelines. This is mostly under-the-hood, but you’ll feel it.

Deprecations & Cleanups

Some legacy features are being deprecated or removed:

  • url.parse() → Use the WHATWG URL API.
  • SlowBuffer, tls.createSecurePair, and others are deprecated.
  • Old-style fs constants like fs.F_OK are on their way out.

📌 Why this matters: If you're maintaining older codebases, keep an eye out and plan updates.

🎯 TL;DR – What to Try First?

  • Test out RegExp.escape and using/await using—they can really clean up your code.
  • Use URLPattern for cleaner route matching.
  • Check your dependencies for deprecated APIs (url.parse, SlowBuffer, etc.).
  • Try the built-in test runner if you haven’t—it’s getting better every release.
  • Experiment with the Permission Model if you're building CLI tools or sandboxed apps.

What This Means for You

Node.js 24 is not just another update—it’s a significant step forward in performance, security, and developer experience. Semver-major PRs are not expected to contain a lot of features, but breaking changes to Node.js. Whether you're a backend engineer, full-stack dev, or just Node-curious, this release brings practical tools that can simplify your day-to-day workflow.

And remember: Node.js 24 will become LTS (Long-Term Support) in October, so now’s a great time to start testing and migrating.

✨ Contributors to this release include @RafaelGSS, @juanarbol, @mcollina, and many more from the Node.js community. Major props to all who made this possible!

The NodeSource platform offers a high-definition view of the performance, security and behavior of Node.js applications and functions.

Start for Free