Node.js 25.9 : L'API stream/iter Arrive Enfin en Expérimental

Node.js 25.9 : L'API stream/iter Arrive Enfin en Expérimental

lschvn5 min de lecture

Node.js 25.9.0 est sorti le 1er avril avec un ensemble d'ajouts qualité-de-vie, plusieurs en préparation depuis plus d'un an. Les fonctionnalités principales sont le nouveau module expérimental stream/iter et le flag CLI --max-heap-size, mais il y a plus à connaître.

stream/iter : Itération Asynchrone pour les Streams

Le nouveau module experimental/streams/iter (à promouvoir en stable dans une future version) ajoute deux fonctions :

  • stream.iter(readable), retourne un itérateur asynchrone qui produit des chunks depuis un Readable stream
  • stream.consume(readable), crée un writable stream qui draine un readable, utile pour les motifs de piping

L'effet pratique est que vous pouvez maintenant utiliser for await...of directement sur tout Readable stream Node.js :

import { iter } from 'node:experimental/streams/iter';
import { createReadStream } from 'node:fs';

for await (const chunk of iter(createReadStream('file.txt'))) {
  process(chunk);
}

Cela remplace le contournement Readable.from() que beaucoup de développeurs utilisaient pour faire le pont entre streams et itérables asynchrones. Readable.from() était conçu pour créer un stream depuis un itérable, l'utiliser comme consommateur de stream était toujours un bidouillage. La nouvelle API rend l'intention explicite et évite le double buffering de l'ancien pattern.

La fonction consume() est orientée vers la transformation de streams :

import { consume } from 'node:experimental/streams/iter';
import { createReadStream, createWriteStream } from 'node:fs';

const writable = createWriteStream('output.txt');
await consume(createReadStream('input.txt')).pipe(writable);

James M Snell, qui a implémenté la fonctionnalité, a aussi ajouté des benchmarks dans le même PR, l'API est conçue pour avoir un overhead minimal comparé à la consommation manuelle de streams.

--max-heap-size : Limites Mémoire Dures

Les processus Node.js ont toujours été soumis aux limites du tas V8, mais les fixer nécessitait des variables d'environnement (--max-old-space-size) ou des API programmatiques. --max-heap-size est un flag CLI simple :

node --max-heap-size=512 server.js

Contrairement à --max-old-space-size, qui ne contrôle que l'ancienne génération, --max-heap-size s'applique au tas total de V8 incluant la génération de code et la nouvelle génération. Cela le rend plus prévisible pour les workloads conteneurisés où vous voulez un plafond mémoire dur sur lequel l'orchestrateur peut s'appuyer.

Le flag a été proposé par tannal après plusieurs années de discussion avant d'atterrir.

AsyncLocalStorage Gagne les Using Scopes

AsyncLocalStorage est un pilier pour le contexte scoped par requête dans les frameworks web depuis Node.js 16. Le nouvel ajout est le support des using scopes, basé sur le proposal ECMAScript Explicit Resource Management stage 3 (le pattern Symbol.dispose).

Le mot-clé using appelle une méthode Symbol.dispose à la sortie d'un bloc, que ce soit normalement ou via une erreur. Avec la nouvelle API, vous pouvez lier une instance AsyncLocalStorage à un scope :

import { AsyncLocalStorage } from 'node:async_hooks';

const storage = new AsyncLocalStorage();

{
  using scope = storage.enable();
  storage.run({ requestId: 'abc123' }, () => {
    // storage.get() returns { requestId: 'abc123' }
  });
}
// storage is automatically cleared when scope exits

Cela élimine le besoin de nettoyage try/finally explicite dans de nombreux patterns. Dans les serveurs à haut débit qui créent de nombreuses instances de stockage éphémères, les using scopes préviennent la croissance illimitée du store AsyncLocalStorage.

Crypto : TurboSHAKE et KangarooTwelve

Le module crypto gagne deux nouvelles fonctions de hachage via l'intégration WebCrypto :

  • TurboSHAKE: sortie à longueur variable, adapté au hachage en streaming et aux applications de tree hashing
  • KangarooTwelve: hash 128 bits rapide, dérivé de SHA-3 conçu comme alternative plus rapide à SHA-256 pour les usages quotidiens

Ces fonctions sont disponibles via l'interface standard SubtleCrypto.digest() sous leurs noms d'algorithme respectifs.

Autres Changements Notables

  • Refonte du mocking du test runner : MockModuleOptions.defaultExport et MockModuleOptions.namedExports fusionnés en MockModuleOptions.exports unique, avec un codemod automatisé disponible
  • npm mis à jour en 11.12.1 : inclut les dernières fonctionnalités et correctifs de sécurité npm
  • SEA code cache pour ESM : les Applications Single Executable supportent maintenant le code caching pour les points d'entrée ESM, améliorant le temps de démarrage des applications Node.js packagées
  • module.register() deprecated : l'API legacy de registration de module est maintenant formellement dépréciée (DEP0205)

Node.js 25 est la ligne de version instable actuelle ; Node.js 24 deviendra le prochain candidat LTS plus tard cette année. La plupart de ces fonctionnalités seront backportées vers les lignes LTS à mesure qu'elles se stabilisent.

Questions fréquentes

Articles connexes

Plus de couverture avec des sujets et tags en commun.

Node.js 26.4.0 'Current' livre le sous-système node:vfs (Matteo Collina), les package maps pour les hooks de loader ESM (Maël Nison), la compression de certificat TLS, TCP_KEEPINTVL/TCP_KEEPCNT, et argon2 stable
security

Node.js 26.4.0 'Current' livre le sous-système node:vfs (Matteo Collina), les package maps pour les hooks de loader ESM (Maël Nison), la compression de certificat TLS, TCP_KEEPINTVL/TCP_KEEPCNT, et argon2 stable

Node.js 26.4.0 (Current), publié le 2026-06-24 par @aduh95, apporte huit changements SEMVER-MINOR : un sous-système node:vfs minimal qui permet de monter des systèmes de fichiers virtuels fournis par l'application (PR #63115, Matteo Collina) ainsi qu'un suivi qui redirige node:fs/promises vers les instances VFS montées (PR #63537), les package maps pour les hooks de loader ESM qui routent les spécificateurs bruts à travers les hooks de loader (PR #62239, Maël Nison), certificateCompression TLS qui câble la compression zlib et zstd de la RFC 8879 à travers la configuration de build OpenSSL (PR #62217, Tim Perry), le support de TCP_KEEPINTVL et TCP_KEEPCNT dans net.Socket.setKeepAlive (PR #63825, Guy Bedford), des buffers fournis par l'appelant dans fs.readFile / fs.readFileSync (PR #63634, Matteo Collina), closeIdleConnections qui ferme désormais aussi les sockets pre-request (PR #63470, semimikoh), net.BlockList promu au statut Release Candidate (PR #63050), et crypto argon2 + KEM encap/decap marqués stable (PR #63924, Filip Skokan). La release ajoute aussi WebCrypto cSHAKE (PR #63988), listEndpoints QUIC (PR #63536) et des handles X509Certificate (PR #63191), dgram connectSync / bindSync (PRs #63838 + #63932, Guy Bedford), net.BoundSocket pour un binding TCP précoce (PR #63951), un chemin expérimental d'appel FFI rapide pour AArch64 et x86_64 (PRs #63068 + #63941, Paolo Insogna), npm 11.17.0 (PR #63857), sqlite 3.53.2 et libffi 3.6.0.
Node.js Juin 2026 : Correctif de Sécurité Couvrant 12 CVE Sur v22.23.0, v24.17.0 et v26.3.1, avec Deux Correctifs High TLS et Crypto
security

Node.js Juin 2026 : Correctif de Sécurité Couvrant 12 CVE Sur v22.23.0, v24.17.0 et v26.3.1, avec Deux Correctifs High TLS et Crypto

Le 18 juin 2026, le projet Node.js a publié des versions de sécurité coordonnées pour la LTS v22 « Jod », la LTS v24 « Krypton » et la ligne Current v26. La mise à jour corrige 12 CVE, dont deux notées High : CVE-2026-48618 (normalisation du hostname TLS pour la vérification d'identité serveur) et CVE-2026-48933 (garde sur la longueur de sortie des chiffrements WebCrypto). La release embarque aussi OpenSSL 3.5.7, undici 8.5.0 sur v26, llhttp 9.4.2, et nghttp2 1.69.0 (semver-major) sur v22 et v24.
Bug Claude Code #74066 : Des Utilisateurs Signalent une Fuite de Contexte Entre Workspaces sur Sonnet 5, Anthropic N'a Pas Encore Répondu
security

Bug Claude Code #74066 : Des Utilisateurs Signalent une Fuite de Contexte Entre Workspaces sur Sonnet 5, Anthropic N'a Pas Encore Répondu

Un bug ouvert déposé contre Claude Code le 2026-07-04 par un utilisateur [Enterprise ZDR](https://docs.anthropic.com/en/docs/build-with-claude/zero-data-retention) décrit une session de travail sur Sonnet 5 qui commence soudainement à faire référence à une construction de temple Minecraft non liée, puis persiste dans la mauvaise tâche dans son récapitulatif. Le rapporteur (GitHub : [@milesrichardson-edb](https://github.com/milesrichardson-edb), issue [anthropics/claude-code#74066](https://github.com/anthropics/claude-code/issues/74066)) est sur Enterprise Zero Data Retention, le niveau qu'Anthropic présente spécifiquement comme isolé par session. Le triage sur le JSONL de session locale du rapporteur à `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` montre que le texte fuité n'est pas dans la transcription, ce qui exclut une fuite de contexte locale par chevauchement de fichier. Quatre autres utilisateurs dans les commentaires (avec des historiques de travail remontant à l'an dernier) décrivent un comportement quasi identique sur Claude Code, Claude Mobile et Claude deep research. Le fit architectural le plus plausible est un état de cache KV partagé dans l'inférence ([selon @yv3nne dans les commentaires](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880448776)), mais aucun ingénieur d'Anthropic n'a commenté l'issue dans les 22 heures depuis son dépôt, et l'issue a atteint le sommet de [Hacker News](https://news.ycombinator.com/item?id=42481789) le 2026-07-04. Le ton dans le fil est partagé : la moitié suspectant une vraie réutilisation de cache plateforme, l'autre moitié suspectant une [hallucination spécifique à Sonnet 5 déclenchée par un lexer Pygments](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880334711). Les deux lectures sont crédibles.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

Pas encore de commentaires. Soyez le premier à partager vos pensées.