Deterministic QuickJS-in-Wasm evaluator monorepo (Nx + pnpm), tracking a hardened QuickJS fork and SDK/tooling to run it.
- Submodule at
vendor/quickjs(origingit@blue.github.com:mjwebblue/quickjs.git). - Fresh checkout:
git submodule update --init --recursive. - Update the pin after landing changes in the fork:
cd vendor/quickjs && git fetch origin && git checkout <new-ref>thencd .. && git add vendor/quickjs && git commit -m "chore: bump quickjs submodule". - Do QuickJS edits in the fork repository and only commit the pinned SHA here.
- Install deps:
pnpm install. - Visualize projects:
pnpm nx graph. - Run tests across projects:
pnpm nx run-many -t test. - Apply lint fixes:
pnpm lint --fix.
- Emscripten is pinned to
3.1.56; install viatools/scripts/setup-emsdk.sh, thensource tools/emsdk/emsdk_env.sh. Seedocs/toolchain.mdfor details and CI cache notes.
- Baselines (start here):
- Baseline #1 — Deterministic execution + canonical gas:
docs/baseline-1.md - Baseline #2 — Host ABI (manifest-locked) + DV wire format:
docs/baseline-2.md
- Baseline #1 — Deterministic execution + canonical gas:
- Determinism profile:
docs/determinism-profile.md - Gas schedule:
docs/gas-schedule.md - DV wire format:
docs/dv-wire-format.md - ABI manifest:
docs/abi-manifest.md - Host call ABI:
docs/host-call-abi.md - Release policy:
docs/release-policy.md - Release checklist:
docs/release-checklist.md
- Same
(P, I, G)yields identical result bytes, gas used/remaining, and host-call tape hashes across Node and browser. - Deterministic capability profile: time/random/async/IO/typed arrays/WebAssembly disabled; use
Host.v1for IO (docs/determinism-profile.md). - Canonical gas: opcode/builtin/allocation/GC charges plus two-phase host-call gas (
docs/gas-schedule.md). - DV and manifest: canonical DV encoding, safe numeric range, sorted keys, size caps, manifest hash pinning (
docs/dv-wire-format.md,docs/abi-manifest.md). - Host ABI:
host_callenvelope, deterministic error mapping, and reentrancy rules (docs/host-call-abi.md).