# API support

<!-- Generated from reports/manifest.json by `node ./scripts/api-docs.ts`.
     Do not edit this file. Run `pnpm run docs` to rebuild it.
     Node v26.7.0, commit 975a25d, 2026-08-27T21:51:46.116Z. -->

# API support

This report covers 62 modules, measured in 3 of the 3 places they can run.

> [!NOTE]
> This section is generated automatically.

## Summary

| Measure | Result |
| ------- | ------ |
| Modules | 62 |
| Behavior matches Node.js | 26 |
| API surface only | 21 |
| Imports but not tested | 15 |
| Does not import | 0 |
| Exports available | 1459 of 1468 (99.39%) |
| Modules with every export | 59 |

## Where these modules run

| Where it runs | Modules measured | ✅ Works | ⚠️ Some support | ❔ Not tested | ❌ Unavailable | Average export coverage | Node test suite |
| ------------- | ---------------- | -------- | --------------- | ------------- | ------------- | ----------------------- | --------------- |
| **nstd** | 47 of 62 | 13 | 34 | 0 | 0 | – | 51.75% <sub>(46 modules)</sub> |
| **Browser** | 62 of 62 | 0 | 4 | 57 | 1 | 98.1% | – |
| **Node.js (host)** | 62 of 62 | 26 | 21 | 15 | 0 | 99.51% | 93.33% <sub>(3 modules)</sub> |

> **Average export coverage** counts how many of Node's export names answer, and is
> blank where a runtime is measured by behaviour without enumerating a surface.
> **Node test suite** is the pass rate of Node's own tests there, over the modules a
> suite reached - a different measurement, never folded into the one beside it.
> Both are subject to the caveats under *Sources* below.

> **nstd:** The standalone runtime this repository builds: QuickJS-NG and a Zig host.

> **Browser:** This is an estimate. It still uses V8 and `file:` URLs. It has no DOM. A failure here will also fail in a real browser.

> **Node.js (host):** The modules running under Node.js itself, which is also the oracle every other row is compared against. It measures this library under Node, not Node.

## Support by module

The percentage shows how many Node.js exports are available.

| Module | nstd | Browser | Node.js (host) | Exports |
| ------ | ------ | ------ | ------ | ------- |
| [`node:_http_agent`](/api/internal_http_agent) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 2/2 |
| [`node:_http_client`](/api/internal_http_client) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 1/1 |
| [`node:_http_common`](/api/internal_http_common) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 14/14 |
| [`node:_http_incoming`](/api/internal_http_incoming) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 4/4 |
| [`node:_http_outgoing`](/api/internal_http_outgoing) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 6/6 |
| [`node:_http_server`](/api/internal_http_server) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 9/9 |
| [`node:_tls_common`](/api/internal_tls_common) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 3/3 |
| [`node:_tls_wrap`](/api/internal_tls_wrap) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 4/4 |
| [`node:assert`](/api/assert) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 21/21 |
| [`node:assert/strict`](/api/assert-strict) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 21/21 |
| [`node:async_hooks`](/api/async_hooks) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 7/7 |
| [`node:buffer`](/api/buffer) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 13/13 |
| [`node:child_process`](/api/child_process) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 9/9 |
| [`node:cluster`](/api/cluster) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 16/16 |
| [`node:console`](/api/console) | <span title="some support" aria-label="some support">⚠️</span> | <span title="some support" aria-label="some support">⚠️</span> 77% | <span title="not tested" aria-label="not tested">❔</span> 77% | 24/31 |
| [`node:constants`](/api/constants) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 235/235 |
| [`node:crypto`](/api/crypto) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 74/74 |
| [`node:dgram`](/api/dgram) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 2/2 |
| [`node:diagnostics_channel`](/api/diagnostics_channel) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 8/8 |
| [`node:dns`](/api/dns) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 50/50 |
| [`node:dns/promises`](/api/dns-promises) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 46/46 |
| [`node:domain`](/api/domain) | <span title="some support" aria-label="some support">⚠️</span> | <span title="unavailable" aria-label="unavailable">❌</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | 5/5 |
| [`node:events`](/api/events) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 17/17 |
| [`node:fs`](/api/fs) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 104/104 |
| [`node:fs/promises`](/api/fs-promises) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 33/33 |
| [`node:http`](/api/http) | <span title="works" aria-label="works">✅</span> | <span title="some support" aria-label="some support">⚠️</span> 95% | <span title="some support" aria-label="some support">⚠️</span> 95% | 20/21 |
| [`node:http2`](/api/http2) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 11/11 |
| [`node:https`](/api/https) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 6/6 |
| [`node:inspector`](/api/inspector) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 9/9 |
| [`node:inspector/promises`](/api/inspector-promises) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 9/9 |
| [`node:module`](/api/module) | <span title="works" aria-label="works">✅</span> | <span title="some support" aria-label="some support">⚠️</span> 97% | <span title="works" aria-label="works">✅</span> 97% | 32/33 |
| [`node:net`](/api/net) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 18/18 |
| [`node:os`](/api/os) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 23/23 |
| [`node:path`](/api/path) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 17/17 |
| [`node:path/posix`](/api/path-posix) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 17/17 |
| [`node:path/win32`](/api/path-win32) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 17/17 |
| [`node:perf_hooks`](/api/perf_hooks) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 13/13 |
| [`node:process`](/api/process) | <span title="works" aria-label="works">✅</span> | <span title="some support" aria-label="some support">⚠️</span> 14% | <span title="some support" aria-label="some support">⚠️</span> 100% | 86/86 |
| [`node:punycode`](/api/punycode) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 6/6 |
| [`node:querystring`](/api/querystring) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 7/7 |
| [`node:readline`](/api/readline) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 8/8 |
| [`node:readline/promises`](/api/readline-promises) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 3/3 |
| [`node:repl`](/api/repl) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 9/9 |
| [`node:stream`](/api/stream) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 23/23 |
| [`node:stream/consumers`](/api/stream-consumers) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 6/6 |
| [`node:stream/promises`](/api/stream-promises) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 2/2 |
| [`node:stream/web`](/api/stream-web) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 18/18 |
| [`node:string_decoder`](/api/string_decoder) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 1/1 |
| [`node:sys`](/api/sys) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 34/34 |
| [`node:timers`](/api/timers) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 7/7 |
| [`node:timers/promises`](/api/timers-promises) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 4/4 |
| [`node:tls`](/api/tls) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 19/19 |
| [`node:trace_events`](/api/trace_events) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 2/2 |
| [`node:tty`](/api/tty) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 3/3 |
| [`node:url`](/api/url) | <span title="works" aria-label="works">✅</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 14/14 |
| [`node:util`](/api/util) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 34/34 |
| [`node:util/types`](/api/util-types) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="works" aria-label="works">✅</span> 100% | 43/43 |
| [`node:v8`](/api/v8) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 24/24 |
| [`node:vm`](/api/vm) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 10/10 |
| [`node:wasi`](/api/wasi) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="not tested" aria-label="not tested">❔</span> 100% | 1/1 |
| [`node:worker_threads`](/api/worker_threads) | <span title="not measured" aria-label="not measured">–</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 21/21 |
| [`node:zlib`](/api/zlib) | <span title="some support" aria-label="some support">⚠️</span> | <span title="not tested" aria-label="not tested">❔</span> 100% | <span title="some support" aria-label="some support">⚠️</span> 100% | 154/154 |

**Key:** ✅ works · ⚠️ some support · ❔ not tested · ❌ unavailable · – not measured

## Report sources

These reports provide the numbers above. A missing report means that runtime was not measured. It does not mean the module is broken.

| Report | Measures | Created | Notes |
| ------ | -------- | ------- | ----- |
| `browser` | Browser | 2026-08-27T18:53:07.603Z |  |
| `coverage` | Node.js (host) | 2026-08-27T18:52:51.162Z |  |
| `native-differentials` | nstd | 2026-08-27T21:42:08.250Z | **stale** |
| `native-node-suite` | nstd | 2026-08-27T21:43:58.748Z | **stale** |
| `node-suite` | Node.js (host) | 2026-08-27T18:55:33.491Z | **partial:** only tests matching /test-path-/ |
| `smoke` | Node.js (host) | 2026-08-27T19:00:25.979Z |  |
| `vitest` | Node.js (host) | 2026-08-27T18:53:31.157Z |  |

### Warnings

- Native-differentials was produced at 975a25d and this merge ran at 9bcca7e. Re-run it before quoting the figure.
- Native-node-suite was produced at 975a25d and this merge ran at 9bcca7e. Re-run it before quoting the figure.
- Node-suite measured only part of the library: only tests matching /test-path-/. Results for covered modules are valid. Other modules were not measured.
