Doe is a Zig-first WebGPU runtime built as an explicit, performance-oriented alternative to Dawn.
If you want to use the published package:
doe-gpu: WebGPU for Node.js, Bun, and Deno, with the Doe runtime and Doe helper API
import { gpu } from 'doe-gpu'; // full (default)
import { gpu } from 'doe-gpu/compute'; // compute-only
import { gpu } from 'doe-gpu/browser'; // browser shimIf you are working on the runtime itself, this repo carries the runtime, package surfaces, browser bring-up, proof artifacts, tracing, and benchmarking.
runtime/zig: the Doe runtime, WGSL pipeline, and native backend execution pathspackages/doe-gpu: the npm package for headless WebGPUbrowser/fawn-browser: browser-owned and Chromium-oriented integration workpipeline/agent: quirk mining and normalizationpipeline/lean: proof artifacts that can remove runtime checks ahead of timepipeline/trace: reproducible trace and replay toolingbench: Dawn-vs-Doe comparison harnesses and artifacts
Doe is built around a simple split: checks that can be resolved ahead of time should move out of the hot path, and the checks that must stay live should stay explicit in the runtime.
That shows up in a few project-wide choices:
- explicit native backend paths instead of opaque bridge layers
- config-first policy and schema-backed behavior
- optional Lean-backed proof elimination at build time, not a runtime proof interpreter
- benchmark claims grounded in replayable artifacts instead of prose summaries
Doe currently targets Vulkan, Metal, and D3D12. It is intentionally focused on modern GPU APIs and modern workloads rather than broad legacy-backend coverage.
Benchmarking and claim discipline are important here, but the repo README is not the right place for artifact-by-artifact inventory. The current ground truth lives in:
One distinction matters up front: package-surface results are not treated as a substitute for backend-native Dawn-vs-Doe evidence. Those lanes are tracked separately.
Pick the README that matches the surface you are touching.
For package consumers:
For runtime contributors:
- start with
runtime/zig/README.md - then read
bench/README.mdif your change affects performance or comparability
Published package:
npm install doe-gpuLocal runtime work:
cd runtime/zig
zig build test
zig build dropinDoe currently requires Zig 0.15.2. See
config/toolchains.json.
If you are working on Dawn-vs-Doe comparisons, use the benchmark tooling in
bench/README.md rather than treating this README as the
operational guide.
The following packages are deprecated and replaced by doe-gpu:
@simulatte/webgpu— usedoe-gpuinstead@simulatte/webgpu-doe— merged intodoe-gpu
docs/architecture.md: system overviewdocs/process.md: stage order, gates, and release policydocs/status.md: current status and tracked follow-upsdocs/thesis.md: project thesis and framingruntime/zig/README.md: runtime development guidebench/README.md: benchmark workflows and evidence lanespackages/doe-gpu/README.md: npm package
See docs/licensing.md.