Chidori

Node.js compatibility report

Generated by the node-compat harness (crates/chidori/src/node_compat.rs) against a curated subset of the Node.js core test suite (nodejs/node@v22.12.0 test/parallel, vendored by scripts/vendor-node-compat-tests.sh). Regenerate with:

NODE_COMPAT_UPDATE=1 cargo test -p chidori --lib -- node_compat

140/144 passing (1 failing, 3 skipped). A test passes only if every assertion in the vendored Node test holds under chidori's engine and builtin shims; skips are tests needing facilities the harness does not provide (child processes, the WPT runner, 64-bit-sized Buffer allocations — common/fixtures and common/tmpdir are emulated over the VFS).

ModulePassFailSkipRate
assert81088%
async_hooks200100%
buffer2801100%
diagnostics_channel400100%
events2000100%
module100100%
net300100%
path1100100%
process200100%
punycode100100%
querystring400100%
stream1600100%
string_decoder200100%
timers500100%
url1702100%
util600100%
zlib1000100%

Failing tests

  • test-assert.js — JavaScript exception: AssertionError: Expected values to be strictly deep-equal:

Skipped tests

  • test-buffer-tostring-range.js — requires 64-bit-sized Buffer allocations (chidori kMaxLength is the 32-bit bound)
  • test-url-parse-invalid-input.js — requires Node test-suite facility 'spawnPromisified' (child processes)
  • test-whatwg-url-custom-searchparams-sort.js — requires Node test-suite facility '../common/wpt'

Known root causes

  • test-assert.js fails at the assert.ok generated-message checks ('The expression evaluated to a falsy value:\n\n strict.ok(...)'). Node builds that message by eagerly capturing V8 CallSite objects for the caller and re-reading the call expression out of the source file. The chidori-js engine only materializes stack frames on the throw-unwind path (record_unwind_frame), so no caller position exists at message-construction time; eager capture would have to thread a shadow call stack through all three interpreter tiers' call dispatch. Everything before those checks — including the full createErrDiff Myers-diff message format — passes. (Bun's runtime does not implement this either — its vendored copy of test-assert.js comments the generated-message checks out; chidori keeps the test unmodified and tracks the gap here.)