# Feature catalog — nodejs/node

> Canonical page: https://codevetter.com/unpack/node/feature-catalog

# Feature catalog — nodejs/node

Scanned commit 976a36a5b6ce737c9e695f6cde8e141427f13737 (2026-09-22). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

User-facing surface is the CLI plus the `node:*` builtin module set. The CLI's 'subcommands' are really the run-mode branches in `src/node.cc` — `node inspect`, `node --test`, `node --experimental-bench`, `node --watch`, `node -e`, `node --check`, `node --prof-process`, `node --build-snapshot`, `node --build-sea`, and the default script/REPL/stdin paths. Module features are individually flag-gated and only become requirable when a `setupX()` in `pre_execution.js` calls `BuiltinModule.allowRequireByUsers()`. This tree's notable additions over a stock runtime are `node:vfs`, `node:ffi`, `node:dtls`, `node:bench`, `node:quic`, `node:sqlite` with virtual tables, and `stream/iter`/`zlib/iter`.
- `node:vfs` exposes `create()`, `registerProvider()`, and the classes `VirtualFileSystem`, `VirtualProvider`, `MemoryProvider`, `RealFSProvider`, `ZipProvider`; it is `node:`-scheme-only and requires `--experimental-vfs`. — [lib/vfs.js](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/vfs.js) [lib/internal/process/pre_execution.js#L561-569](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/process/pre_execution.js#L561-L569) [doc/api/vfs.md#L28-30](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/doc/api/vfs.md#L28-L30)
- `--vfs-mount <src>` (repeatable) and `--vfs-load <src>` both append to the same `vfs_mounts` option vector; `--vfs-load` additionally sets the `[vfs_load_set]` implied bool so the entry point can be taken from inside a mount. — [src/node_options.cc#L690-713](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/node_options.cc#L690-L713) [src/node_options.h#L181-218](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/node_options.h#L181-L218)
- `node:ffi` provides `DynamicLibrary` plus typed pointer accessors (`getInt8`…`getFloat64`, `setInt8`…, `exportBytes`, `getRawPointer`, `kFastArguments`) and emits an experimental warning at module load. — [lib/ffi.js#L38-60](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/ffi.js#L38-L60) [doc/api/ffi.md#L44-52](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/doc/api/ffi.md#L44-L52)
- `node:bench` mirrors the test runner's API shape — `bench`, `suite`/`describe`, `before`/`after`/`beforeEach`/`afterEach`, `run`, `runFile`, `createRunner` — and is reached from the CLI by `node --experimental-bench`, which routes to `internal/main/bench_runner`. — [lib/bench.js](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/bench.js) [lib/internal/main/bench_runner.js#L17-31](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/main/bench_runner.js#L17-L31) [src/node.cc#L390-393](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/node.cc#L390-L393)
- `node:dtls` exposes `connect`, `listen`, `createSecureContext`, and `DTLSEndpoint`/`DTLSSecureContext`/`DTLSSession`, backed by `src/dtls/{dtls,dtls_context,dtls_endpoint,dtls_session}.cc`; `DTLSEndpoint` manages a UDP socket and routes datagrams to sessions. — [lib/dtls.js](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/dtls.js) [lib/internal/dtls/dtls.js#L525-540](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/dtls/dtls.js#L525-L540) [src/dtls/dtls_endpoint.cc](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/dtls/dtls_endpoint.cc)
- The permission model (`--permission`) exposes `process.permission.has()` / `.drop()` and nine scopes: fs (with read/write children), child, wasi, worker, inspector, net, addon, ffi, openssl.store. — [src/permission/permission_base.h#L17-51](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/permission/permission_base.h#L17-L51) [lib/internal/process/permission.js#L59-67](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/process/permission.js#L59-L67)
- `--permission-audit` is a distinct mode from `--permission`: `isAuditMode()` reads it separately and `Permission::EnableWarningOnly()` makes denials warn rather than throw. — [lib/internal/process/permission.js#L48-58](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/process/permission.js#L48-L58) [src/permission/permission.cc#L302-313](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/permission/permission.cc#L302-L313) [src/node_options.cc#L762](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/node_options.cc#L762)
- Single-executable applications are configured by a JSON file parsed in `src/node_sea.cc` supporting `useSnapshot`, `useCodeCache`, `assets`, and `disableExperimentalSEAWarning`; assets are serialized into the blob and read back as `string_view` pairs. — [src/node_sea.cc#L440-500](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/node_sea.cc#L440-L500) [src/node_sea.cc#L120-240](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/node_sea.cc#L120-L240)
- SEA assets can be surfaced as a read-only mounted VFS via `initSeaVfs()`, which places the SEA main script at the mount-point root so `__dirname`-relative `require()` calls inside a bundled app resolve to bundled assets. — [lib/internal/vfs/sea.js#L24-50](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/vfs/sea.js#L24-L50) [lib/internal/vfs/providers/sea.js#L19-30](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/vfs/providers/sea.js#L19-L30)
- `node --watch` is implemented as a supervisor process: `internal/main/watch_mode.js` strips watch flags into `argsWithoutWatchOptions`, re-`spawn`s `process.execPath`, and drives restarts from a `FilesWatcher` with a 200 ms debounce in `filter` or `all` mode. — [lib/internal/main/watch_mode.js#L21-126](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/main/watch_mode.js#L21-L126)
- The test runner CLI parses options via `parseCommandLine()`, supports `--test-isolation=none` (which defers user-module loading into `run()`), forces concurrency 1 when the inspector is active, and sets a nonzero exit code from the `test:summary` event. — [lib/internal/main/test_runner.js#L19-40](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/main/test_runner.js#L19-L40)
- `--experimental-stream-iter` unlocks two additional builtins in one shot, `stream/iter` and `zlib/iter`, via the same `allowRequireByUsers` mechanism. — [lib/internal/process/pre_execution.js#L533-542](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/process/pre_execution.js#L533-L542)
- `node:sqlite` is enabled by default (disabled only by `--no-experimental-sqlite`) and now supports user-defined virtual tables: `VirtualTableModule` populates an `sqlite3_module` with `xCreate`/`xConnect`/`xBestIndex`/`xOpen`/`xClose` trampolines. — [lib/internal/process/pre_execution.js#L518-525](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/lib/internal/process/pre_execution.js#L518-L525) [src/node_sqlite.cc#L1029-1060](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/src/node_sqlite.cc#L1029-L1060)
- Documented public API pages exist for every new subsystem — `doc/api/vfs.md`, `ffi.md`, `dtls.md`, `bench.md`, `quic.md`, `stream_iter.md` — so a feature is not considered landed without its doc page. (inferred) — [doc/api/vfs.md](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/doc/api/vfs.md) [doc/api/ffi.md](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/doc/api/ffi.md) [doc/api/bench.md](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/doc/api/bench.md) [doc/api/stream_iter.md](https://github.com/nodejs/node/blob/976a36a5b6ce737c9e695f6cde8e141427f13737/doc/api/stream_iter.md)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
