Changelog

nodejs/node · · 24 commits

SQLite virtual tables land; streams and watch mode sharpen

A new SQLite virtual table API headlines a day of major stream internals, test runner fixes, watch-mode cleanup, and VFS safety hardening.

SQLite adds virtual table modules via createModule() (TrevorBurnhamdd9f4da)

Node’s SQLite binding now exposes database.createModule(name, options), wrapping sqlite3_create_module_v2() so JavaScript can back read-only virtual tables with custom row generators. The new API supports eponymous tables, CREATE VIRTUAL TABLE, hidden parameters, and module options like directOnly and useBigIntArguments.

Stream async-iterator internals get cancellation, protocol, and perf fixes (jasnell6fb199a, jasnelle2acffa, jasnell3407386, jasnelld72fb59, jasnell85bd860, jasnell2693529, jasnell665791f, mcollinac0ed28f)

A substantial stream refactor tightens async-iterator normalization and broadcast/share behavior, including cancellation-aware nested iterators, safer protocol access, and cleanup of factory listeners and waiters. Separately, web streams were optimized to cut per-pipe/tee overhead and avoid extra promise/microtask work in BYOB reads, which should improve hot-path performance.

Test runner now reuses only free worker IDs (vserpokryle898f5c)

The test runner stops handing out worker IDs round-robin and instead tracks which IDs are currently in use, avoiding collisions with still-running test files. That makes concurrent isolation more accurate and closes a class of flaky scheduling bugs.

Watch mode strips --watch flags from child NODE_OPTIONS (marcopiraccini1eacebb)

Child processes spawned by watch mode no longer inherit watch-related flags from NODE_OPTIONS, preventing recursive watch loops. The change also preserves other options more carefully by re-parsing and re-quoting the environment string before relaunch.

util.inspect() now shows SuppressedError details (agape1225ed9ad59)

inspect() and console.log() now surface the non-enumerable error and suppressed fields on SuppressedError, matching the treatment of Error.cause and AggregateError.errors. That makes disposal failures much easier to debug.

VFS ZIP provider rejects entries under file parents (trivikrdd5cf4c)

The ZIP-backed virtual filesystem now validates parent directories before open, mkdir, and rename, so it rejects paths that try to create children beneath a file. This fixes a correctness hole in both async and sync APIs and prevents malformed archive state.

Filesystem streams handle fd 0 correctly (greenheadHQ36dd044)

Closing file streams now works for file descriptor 0, which previously could be mishandled as a falsy value. That prevents leaks and incorrect stream teardown when stdin-like descriptors are involved.

Other misc changes

  • Release-note and API doc updates for the 26.10.0 cutover.
  • Typings refinements for internal bindings and mksnapshot.
  • WPT syncs and test flake suppressions/deflakes.
  • Nixpkgs update and benchmark cleanup.