Node.js 26.9 Ships a Standards-Compliant Global Web Worker, Enables Experimental FFI Module by Default
Node.js 26.9.0 adds a global Worker class implementing the WHATWG Web Worker API and enables the experimental node:ffi module by default.
Overview
Node.js 26.9.0 shipped on September 16, 2026, adding a global Worker class that implements the Web Worker API as defined by the WHATWG HTML Standard, according to the pull request that added the feature. The same release enables the experimental node:ffi foreign-function-interface module by default in builds that support it, according to Node.js’s official 26.9.0 release notes.
What We Know
- Node.js 26.9.0 landed on the project’s Current release line, marked “(Current)” in the release header, rather than the Long Term Support line, according to the official release notes.
- The Web Workers change was authored by Aviv Keller and merged as pull request #64894, titled “worker: add support for Web Workers.” The PR description states it “Adds support for the Web Worker API as defined by the HTML Standard,” linking to the WHATWG specification, according to the pull request.
- Node.js has offered thread-based parallelism for years through the
node:worker_threadsmodule, whose ownWorkerclass must be explicitly imported and, per its documentation, “enables the use of threads that execute JavaScript in parallel.” The new addition in 26.9.0 is different: a globalWorker, built on the standard Node.js global object withDedicatedWorkerGlobalScopeadded to its prototype chain, matching how the API behaves in a browser rather than requiring a Node-specific import, according to the pull request. - The new implementation carries documented gaps against the browser specification:
SharedWorkeris not implemented, since Node.js has no origin or browsing-context model; worker scripts load synchronously from the local filesystem rather than being fetched over a network; and onlyfile:,data:, andblob:URLs are accepted as worker script sources, according to the pull request. Callingclose()on a worker also terminates it immediately rather than following the specification’s asynchronous “closing flag” behavior, per the same source. - During review, Node.js core collaborator James M Snell wrote that “the web platform tests in this PR really ought to be separated out into a separate commit to make reviewing this easier,” noting the change touched “1300+ files changes with 54k+ lines changed,” while Matteo Collina called the PR “gargantuan,” asking the author to “add a review guide and/or split into chunks,” according to the pull request discussion.
- Separately, 26.9.0 enables
node:ffiby default. The change, authored by Matteo Collina in pull request #65475, states: “Enablenode:ffiby default in builds with FFI support. Keep--experimental-ffias a compatibility no-op and--no-experimental-ffias an opt-out. The module remains experimental and continues to emit a warning when first loaded,” according to the pull request. - Node’s own API documentation still lists
node:ffiat “Stability: 1 - Experimental” and describes it as providing “an experimental foreign function interface for loading dynamic libraries and calling native symbols from JavaScript,” while warning that the API “is unsafe” because “passing invalid pointers, using an incorrect symbol signature, or accessing memory after it has been freed can crash the process or corrupt memory,” according to Node.js’snode:ffidocumentation. - The same 26.9.0 release adds several other semver-minor changes: an experimental DTLS API, a new
node:benchbenchmarking module, a HistogrammeanCIAPI with CBOR export/import inperf_hooks, integration of Node’s virtual file system (VFS) with the CommonJS and ESM module loaders, and a generic MAC API plus OpenSSL-provider cipher and hash discovery innode:crypto, according to the official release notes.
What We Don’t Know
- The release notes and pull request do not give a timeline for whether
SharedWorkersupport or network-based worker script fetching will be added to close the remaining gaps with the browser specification. - Neither source published performance figures comparing the new global
Workeragainst the existingnode:worker_threadsmodule.
Analysis
The change follows Node.js 26’s arrival in April as previously reported, when the project began moving away from its long-running odd/even release cadence. Shipping a spec-compliant global Worker — rather than requiring the Node-specific node:worker_threads import — narrows a long-standing gap between code written for the browser and code written for the server, letting the same worker-spawning syntax run in both environments. The simultaneous default-enablement of the still-experimental FFI module, meanwhile, extends what native, C-level functionality is reachable directly from JavaScript without a compiled native-addon build step, though Node’s own documentation continues to flag the interface as unsafe if misused.