Software 44540 Published by

Node.js v26.5.0 landed today, bringing streaming UTF-8 support for Blobs, experimental text file imports, and direct reporting of negotiated TLS groups including quantum-resistant variants. The release also tightens performance around TextEncoder.encode and WHATWG streams while quietly announcing that macOS x64 tier 2 support is winding down. Geoffrey Booth pushed to keep the new import flag experimental until browser compatibility and npm packages stabilize, matching the cautious TC39 precedent. All five minor additions remain backward compatible, though you should plan your migration before the Current stream wraps up around January 2027.



Node.js v26.5.0 Lands Today With Streaming Blobs, Post-Quantum TLS, and a Heated Debate Over Text Imports

Node.js v26.5.0 dropped today, July 8, 2026. Richard Lau maintained the release as part of the Current stream, which means it will hit end of life around January 2027. The v26.x branch actually kicked off on May 5, leaving you roughly two months of active development before it wraps up.

The headline feature here is --experimental-import-text. It lets you import .txt files directly as ES modules. Bun has supported it unflagged since April 2024, and Deno offers it via --unstable-raw-imports. Node.js keeps it behind an experimental flag, which is honestly the right call. Geoffrey Booth argued strongly during the pull request review that browser compatibility and npm package stabilization still need time to mature. You will need to pass the flag at runtime if you want to try it.

New APIs and Spec Alignment

Blob.prototype.textStream() joins the API to return a ReadableStream of UTF-8 decoded strings. It matches the W3C FileAPI specification word for word:

"A blob's text() method when called must return a new ReadableStream that allows the content of a Blob to be read as a stream of strings, each one decoded into a UTF-8 string."

You will likely use it for streaming large file uploads or downloads without tanking your memory footprint. The implementation is basically equivalent to piping blob.stream() through a TextDecoderStream, but it finally aligns with the standard.

Post-quantum crypto gets proper reporting now. When OpenSSL handles ML-KEM or hybrid ML-KEM groups during a TLS handshake, getEphemeralKeyInfo() falls back to returning { type: 'TLSGroup', name: '<group>' } if it cannot access the peer temporary key. Security-conscious teams have been waiting for this. Developers can actually verify which key exchange algorithms were negotiated during a handshake. That includes quantum-resistant variants.

ReadableStreamTee() also lands as a top-level function. The WHATWG Streams standard has a pending proposal to add tee({ clone: true }) options, but browsers have shown zero interest over five years of discussion. The naming leans heavily into verbosity to match the spec, which you will probably appreciate after wrestling with WHATWG Streams before. A follow-up pull request to undici already leverages this for proper stream cloning.

The event loop metrics API finally gets an upgrade. monitorEventLoopDelay() now supports an opt-in samplePerIteration option that hooks directly into libuv. The old method approximated delay from timer dispatch jitter and forced wasteful wake-ups even when idle. Drop the new option in your config and you get actual measurements.

Performance and Platform Shifts

The performance work this cycle targets memory and startup. TextEncoder.encode no longer copies the source string. WHATWG streams cut per-chunk overhead. The REPL lazily loads the acorn parser. The Zlib layer gained a new rejectGarbageAfterEnd option to reject trailing gzip members in web streams, which tightens security for anyone parsing untrusted input.

Keep in mind that macOS x64 tier 2 support is winding down. The project announced it during this release cycle. If you are still shipping to older Intel Macs, you have a bit of runway left. v27 will introduce an annual major release cadence with an extra six-month Alpha phase before LTS kicks in. The current branch will wrap up around January 2027.

Community reaction has been steady. The pull request for --experimental-import-text pulled in a lot of attention, with runtime compatibility and stabilization timelines taking center stage. ReadableStreamTee() generated its own share of debate over naming conventions, though the spec-matching approach seems to have won out. All five minor additions remain backward compatible and additive.

Official binaries cover Windows x64 and ARM64, macOS Intel and Apple Silicon, Linux x64, ARM64, PPC LE, and s390x, plus AIX ppc64 and source code. You can grab them from the announcement below.

Node.js — Node.js 26.5.0 (Current)

Node.js:registered: is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.

Node.js — Node.js 26.5.0 (Current)