Skip to content

The publication for web craftspeople Thursday, 17 September 2026

Back-end

Node.js 26.9.0 ships node:bench and enables FFI by default

Node.js 26.9.0, released on 16 September 2026, adds the built-in benchmarking module node:bench and switches the FFI on by default. The release also strengthens crypto with a generic MAC API and algorithm discovery through OpenSSL providers.

Node.js 26.9.0, published on 16 September 2026 by Antoine du Hamel, extends the Current line with several long-awaited modules. Two additions stand out: a built-in performance-measurement module, node:bench, and the switch of the FFI to on-by-default. Together they pull into the core of the platform tooling that used to live in third-party dependencies.

node:bench, measuring without an external dependency

Comparing two implementations of a function used to mean pulling a package from npm or hand-rolling a script around performance.now(). Version 26.9.0 exposes a native module, node:bench, whose shape follows the community project bench-node it grew from: a Suite, some add() calls, then run().

const { Suite } = require('node:bench');

const suite = new Suite();

suite.add('Array.includes', () => {
  [1, 2, 3, 4, 5].includes(4);
});

suite.add('Set.has', () => {
  new Set([1, 2, 3, 4, 5]).has(4);
});

suite.run();

The point is not to replace a full benchmarking harness but to make measurement available with no install, including in a continuous-integration environment where every added dependency inflates the cache. It connects to the topic of cache settings in GitHub Actions: fewer packages to restore, more predictable pipelines.

The FFI turned on by default

The FFI (foreign function interface), which lets you call native libraries without writing a C++ addon, was available behind a flag. It is now on by default. The barrier to wiring system code into a JavaScript application drops accordingly, with no native module to compile.

Two jobs historically handed to the npm ecosystem — measuring and calling native code — enter the standard library.

Crypto: generic MAC API and OpenSSL discovery

The crypto module gains a generic MAC API and the ability to discover ciphers and hash functions directly from OpenSSL providers. In practice, algorithms supplied by a third-party provider become visible without a hard-coded enumeration. This follows on from the recent refresh of Node.js’s TLS chain.

DTLS, virtual file system and Web Workers

The release also adds an experimental DTLS API, integration of the virtual file system with the CommonJS and ESM module loaders, and support for Web Workers. On top of that come CBOR export and import for performance-hook histograms, and the ability for embedders to supply a builtin code cache without a snapshot.

AdditionAreaMaturity
node:benchPerformance measurementNew module
FFI interfaceNative interopOn by default
Generic MAC APICryptographyNew API
Discovery via OpenSSL providersCryptographyNew capability
DTLS APINetworkingExperimental
Web WorkersConcurrencySupported

How to adopt the release

Node.js 26 belongs to the Current line, the one that gets new features before it moves to long-term support. Installation follows the usual channel:

nvm install 26.9.0
node --version   # v26.9.0
node --run bench

The Current line is not meant for an immediate production rollout on stability-sensitive projects: APIs marked experimental, such as DTLS, may change signature. For a production service it remains prudent to wait for long-term support or to fence experimental APIs behind an abstraction layer.

What to remember

Version 26.9.0 is an enrichment release rather than a breaking one. It shrinks a project’s dependency surface by internalising performance measurement and native calls, and lays groundwork on the crypto and networking side. Teams already on Node.js 26 can adopt it without a heavy migration; others gain one more reason to prepare the move, keeping the experimental status of some APIs in mind.

On two projects I swapped a small benchmarking dependency for a draft around node:bench as soon as the preview shipped: the win isn’t speed, it’s having a reproducible number without installing anything, right in the CI. In the same vein, FFI-by-default is the kind of quiet change that saves you an afternoon the day you need to bind a system library without starting a native addon. The rest, DTLS first, can wait for it to settle. — Simon Janvier

Further reading: the official Node.js 26.9.0 release notes on GitHub, with the full list of changes.

Read next