EarendilEarendildjsHow djs works
Source

Status in numbers

Where djs stands, in numbers that cannot go stale: every number on this page is generated (D2101). Counts that follow from the repository (test262’s grouping and ratchet, the difftest corpus, the base snapshot, the builtin tags, the engine’s tables) are recomputed whenever the guide is regenerated, which the merge flow does on every merge. Measurements that need a build or a benchmark (the wasm module’s size, the speed against quickjs-wasi, pi’s test suite) are recorded in tests/scores/status.tsv by scripts/status.py, with the commit they were measured at, and shown with it. The repository’s front page shows the same numbers.

Conformance

  • test262 (at dquickts’ pinned commit): djs passes 38,069 of the 38,109 tests in the active group (99.9%; 53,597 tests in all, the rest skipped by design). The 40 known failures are listed with reasons in tests/test262/expected-failures.txt; dquickts’ qjs fails 4 active tests under the same runner.
  • The differential corpus (codemode scripts, console and result formatting, error messages, TypeScript, dquickts’ own tests): 532 of 543 cases match qjs; 6 known failures (tests/corpus/expected-failures.txt) and 5 skipped as non-goals.
  • pi’s codemode test suite on djs: 221 of 226 tests pass (measured at 2026-11-01).

How djs is tested explains the suites and the ratchets.

Speed in wasm

Machine instructions retired by node running each workload once, minus an empty run, for djs-wasm and for quickjs-wasi, pi’s current engine (scripts/perf/wmeasure.py). Instructions repeat to within a fraction of a percent even on a loaded machine, unlike time.

workloaddjs-wasmquickjs-wasiratio
tight loop6.6G15.7G0.42
property access (prop1)2.7G5.5G0.49
strings (split, slice, join, …)3.1G6.0G0.51
arrays10.8G16.8G0.64
JSON round trips1.3G2.2G0.57
JSON with Dates0.9G1.9G0.48
for-of5.8G7.2G0.81
calls3.3G4.0G0.81
push/pop and string methods4.3G3.1G1.40
a pi-like script10.0G7.3G1.38
forEach9.0G6.1G1.49
map/filter/reduce (higher-order)13.9G4.8G2.92

Machine instructions per workload (scripts/perf/w/), measured at d780463b0d, 2026-11-01; lower is better.

Size

djs_wasm.wasm is 1,471 KB (525 KB gzip, 423 KB brotli): 901 KB of code and 566 KB of data, of which 322 KB is the base snapshot (the initialized realm with all builtins). Module sizes measured at d780463b0d, 2026-11-01.

The engine in numbers

count
opcodes (reference)178
cell kinds (reference)24
intrinsics (reference)451
builtins in builtins/*.ts455
of them @native (also compiled to Rust)10
of them @fast (a Rust leaf entry)72
difftest corpus cases543
base snapshot, bytes322,368

Decisions on this page:

  • D2101: Status numbers are generated: counted from the repository or recorded with their commit
  • D016: wasm32 is the primary target for performance and memory design
  • D1023: Ratchet file semantics
  • D1192: Wasm size probe