Node.js 25.9: Die stream/iter-API Landet Endlich als Experimentell

Node.js 25.9: Die stream/iter-API Landet Endlich als Experimentell

lschvn5 Min. Lesezeit

Node.js 25.9.0 erschien am 1. April mit einer Reihe von Quality-of-Life-Ergänzungen, von denen mehrere seit über einem Jahr in Arbeit waren. Die Hauptfunktionen sind das neue experimentelle stream/iter-Modul und das --max-heap-size-CLI-Flag, aber es gibt noch mehr zu wissen.

stream/iter: Asynchrone Iteration für Streams

Das neue Modul experimental/streams/iter (in einer zukünftigen Version zu stabil zu befördern) fügt zwei Funktionen hinzu:

  • stream.iter(readable), gibt einen asynchronen Iterator zurück, der Chunks von einem Readable Stream liefert
  • stream.consume(readable), erstellt einen Writable Stream, der einen Readable drained, nützlich für Pipe-Patterns

Der praktische Effekt ist, dass Sie jetzt for await...of direkt über jeden Node.js Readable Stream verwenden können:

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

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

Dies ersetzt den Readable.from()-Workaround, den viele Entwickler verwendeten, um Streams und async Iterables zu überbrücken. Readable.from() war zum Erstellen eines Streams aus einem Iterablen gedacht, es als Stream-Konsument zu verwenden, war immer ein Hack. Die neue API macht die Absicht explizit und vermeidet den Double-Buffering-Overhead des alten Patterns.

Die consume()-Funktion ist auf Stream-Transformationen ausgerichtet:

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, der die Funktionalität implementierte, fügte auch Benchmarks in derselben PR hinzu, die API ist darauf ausgelegt, minimalen Overhead im Vergleich zu manuellem Stream-Konsum zu haben.

--max-heap-size: Harte Speichergrenzen

Node.js-Prozesse waren schon immer an V8s Heap-Limits gebunden, aber diese zu setzen erforderte entweder Umgebungsvariablen (--max-old-space-size) oder programmatische APIs. --max-heap-size ist ein unkompliziertes CLI-Flag:

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

Anders als --max-old-space-size, das nur die alte Generation kontrolliert, gilt --max-heap-size für V8s gesamten Heap inklusive Code-Generierung und neuer Generation. Dies macht es vorhersehbarer für containerisierte Workloads, bei denen Sie eine harte Speicherobergrenze wollen, auf die sich der Orchestrator verlassen kann.

Das Flag wurde von tannal beigesteuert und hatte mehrere Jahre in der Diskussion, bevor es landete.

AsyncLocalStorage Bekommt Using Scopes

AsyncLocalStorage ist seit Node.js 16 ein Grundpfeiler für request-scoped Context in Web-Frameworks. Die neue Ergänzung ist die Unterstützung von using Scopes, basierend auf dem ECMAScript Explicit Resource Management Stage-3-Vorschlag (dem Symbol.dispose-Pattern).

Das using-Schlüsselwort ruft eine [Symbol.dispose]()-Methode beim Austritt aus einem Block auf, ob normal oder via Fehler. Mit der neuen API können Sie eine AsyncLocalStorage-Instanz an einen Scope binden:

import { AsyncLocalStorage } from 'node:async_hooks';

const storage = new AsyncLocalStorage();

{
  using scope = storage.enable();
  storage.run({ requestId: 'abc123' }, () => {
    // storage.get() gibt { requestId: 'abc123' } zurück
  });
}
// Speicher wird automatisch bereinigt, wenn Scope endet

Dies eliminiert das Bedürfnis nach explizitem try/finally-Cleanup in vielen Patterns. In Hochdurchsatz-Servern, die viele kurzlebige Storage-Instanzen erstellen, verhindern Using Scopes das unbegrenzte Wachsen des AsyncLocalStorage-Stores.

Crypto: TurboSHAKE und KangarooTwelve

Das crypto-Modul erhält zwei neue Hash-Funktionen über die WebCrypto-Integration:

  • TurboSHAKE: variable Länge, geeignet für Streaming und Tree-Hashing-Anwendungen
  • KangarooTwelve: schneller 128-Bit-Hash, ein SHA-3-Abkömmling als schnellere Alternative zu SHA-256 für alltägliche Anwendungsfälle

Diese sind über die Standard-WebCrypto-SubtleCrypto.digest()-Schnittstelle unter ihren jeweiligen Algorithmen-Namen verfügbar.

Weitere Bemerkenswerte Änderungen

  • Test-Runner-Mocking konsolidiert: MockModuleOptions.defaultExport und MockModuleOptions.namedExports zu MockModuleOptions.exports zusammengeführt, mit automatischem Codemod verfügbar
  • npm auf 11.12.1 aktualisiert: enthält die neuesten npm-Funktionen und Sicherheitsfixes
  • SEA Code Cache für ESM: Single Executable Applications unterstützen jetzt Code-Caching für ESM-Entry-Points, was die Startzeit von gebündelten Node.js-Anwendungen verbessert
  • module.register() deprecated: die Legacy-Registrierungs-API ist jetzt formell deprecated (DEP0205)

Node.js 25 ist die aktuelle instabile Versionslinie; Node.js 24 wird später dieses Jahr der nächste LTS-Kandidat. Die meisten dieser Funktionen werden auf LTS-Linien zurückportiert, sobald sie sich stabilisieren.

Häufig gestellte Fragen

Verwandte Artikel

Weitere Berichterstattung zu ähnlichen Themen und Tags.

Node.js 26.4.0 'Current' bringt das node:vfs-Subsystem (Matteo Collina), ESM-Loader-Package-Maps (Maël Nison), TLS-Zertifikatkompression, TCP_KEEPINTVL/TCP_KEEPCNT und argon2 als stabil
security

Node.js 26.4.0 'Current' bringt das node:vfs-Subsystem (Matteo Collina), ESM-Loader-Package-Maps (Maël Nison), TLS-Zertifikatkompression, TCP_KEEPINTVL/TCP_KEEPCNT und argon2 als stabil

Node.js 26.4.0 (Current), veröffentlicht am 2026-06-24 von @aduh95, liefert acht SEMVER-MINOR-Änderungen: ein minimales node:vfs-Subsystem, das vom Anwendungscode bereitgestellte virtuelle Dateisysteme einhängt (PR #63115, Matteo Collina) sowie ein Folgepatch, das node:fs/promises an eingehängte VFS-Instanzen weiterleitet (PR #63537), Package-Maps für ESM-Loader-Hooks, die Bare-Spezifier durch die Loader-Hooks routen (PR #62239, Maël Nison), TLS certificateCompression, das die zlib- und zstd-Kompression aus RFC 8879 durch die OpenSSL-Build-Konfiguration verkabelt (PR #62217, Tim Perry), TCP_KEEPINTVL- und TCP_KEEPCNT-Unterstützung in net.Socket.setKeepAlive (PR #63825, Guy Bedford), vom Aufrufer bereitgestellte Buffer in fs.readFile / fs.readFileSync (PR #63634, Matteo Collina), closeIdleConnections, das nun auch Pre-Request-Sockets schließt (PR #63470, semimikoh), net.BlockList auf Release-Candidate-Stabilität vorgerückt (PR #63050), und crypto.argon2 + KEM encap/decap als stabil markiert (PR #63924, Filip Skokan). Die Release ergänzt außerdem WebCrypto-cSHAKE (PR #63988), QUIC listEndpoints (PR #63536) und X509Certificate-Handles (PR #63191), dgram connectSync / bindSync (PRs #63838 + #63932, Guy Bedford), net.BoundSocket für frühes TCP-Binding (PR #63951), einen experimentellen schnellen FFI-Aufrufpfad für AArch64 und x86_64 (PRs #63068 + #63941, Paolo Insogna), npm 11.17.0 (PR #63857), sqlite 3.53.2 und libffi 3.6.0.
Node.js Juni 2026 Sicherheitsrelease: 12 CVEs über v22.23.0, v24.17.0 und v26.3.1, mit zwei High-Severity TLS- und Crypto-Fixes
security

Node.js Juni 2026 Sicherheitsrelease: 12 CVEs über v22.23.0, v24.17.0 und v26.3.1, mit zwei High-Severity TLS- und Crypto-Fixes

Am 18. Juni 2026 hat das Node.js-Projekt koordinierte Sicherheitsreleases für die v22 „Jod“ LTS, die v24 „Krypton“ LTS und die v26 Current-Linie veröffentlicht. Der Drop schließt 12 CVEs, darunter zwei mit High-Bewertung: CVE-2026-48618 (TLS-Hostname-Normalisierung für Server-Identity-Checks) und CVE-2026-48933 (WebCrypto-Cipher-Output-Längen-Guard). Außerdem an Bord: OpenSSL 3.5.7, undici 8.5.0 auf v26, llhttp 9.4.2 und nghttp2 1.69.0 (semver-major) auf v22 und v24.
Claude Code Bug #74066: Nutzer Melden Cross-Workspace-Kontext-Leaks auf Sonnet 5, Anthropic Hat Noch Nicht Antwortet
security

Claude Code Bug #74066: Nutzer Melden Cross-Workspace-Kontext-Leaks auf Sonnet 5, Anthropic Hat Noch Nicht Antwortet

Ein offener Bug, der am 2026-07-04 gegen Claude Code von einem [Enterprise-ZDR](https://docs.anthropic.com/en/docs/build-with-claude/zero-data-retention)-Nutzer eingereicht wurde, beschreibt eine Arbeitssitzung auf Sonnet 5, die plötzlich auf einen unrelated Minecraft-Tempelbau referenziert und dann im Recap bei der falschen Aufgabe bleibt. Der Reporter (GitHub: [@milesrichardson-edb](https://github.com/milesrichardson-edb), Issue [anthropics/claude-code#74066](https://github.com/anthropics/claude-code/issues/74066)) ist auf Enterprise Zero Data Retention, dem Tier, das Anthropic speziell als sitzungsisoliert vermarktet. Ein Triage auf der lokalen Sitzungs-JSONL des Reporters unter `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` zeigt, dass der geleakte Text nicht im Transkript enthalten ist, was einen lokalen Kontext-Leak durch Datei-Überlappung ausschließt. Vier andere Nutzer in den Kommentaren (mit Arbeitsgeschichten, die bis ins letzte Jahr zurückreichen) beschreiben nahezu identisches Verhalten über Claude Code, Claude Mobile und Claude Deep Research hinweg. Der plausibelste architektonische Fit ist geteilter KV-Cache-Zustand in der Inferenz ([laut @yv3nne in den Kommentaren](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880448776)), aber kein Anthropic-Ingenieur hat die Issue in den 22 Stunden seit der Einreichung kommentiert, und die Issue erreichte am 2026-07-04 die Spitze von [Hacker News](https://news.ycombinator.com/item?id=42481789). Der Ton im Thread ist gespalten: Die Hälfte vermutet echte Plattform-Cache-Wiederverwendung, die andere Hälfte vermutet eine [sonnet-5-spezifische Halluzination, ausgelöst durch einen Pygments-Lexer](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880334711). Beide Lesarten sind glaubwürdig.

Kommentare

Anmelden Melden Sie sich an, um an der Diskussion teilzunehmen.

Noch keine Kommentare. Seien Sie der Erste, der seine Gedanken teilt.