doper
Early — not production readyA Web Canvas rendering engine designed from scratch.
A high-performance TSX runtime with native virtual scrolling, a deterministic Rust/WASM core behind a versioned binary ABI, full text rendering and canvas-native editing. Milestones M0–M3 are complete; M4 brings the editing, event, hit-testing and accessibility chain.
Overview
doper is not yet a rendering engine you can drop into a product, and the repository says so plainly. P0/M0 through M3 are done; M4 — the editing, event, hit-testing and accessibility chain — is the next stage. Technical decisions are settled in `docs/design.md`, and delivery order and exit gates in `docs/plan.md`.
What runs today is `apps/platform-probe`: a measurement slice rather than a demo. It records worker rAF frame intervals, main-thread-to-worker latency through SharedArrayBuffer, worker self-drive while the main thread blocks for 200 ms, Canvas2D and scroll-copy throughput, WASM size and load cost, and the Canvas editing input path — EditContext first, with a centralized textarea proxy as fallback — including recorded IME sessions replayed for determinism.
The probe proves the local environment is viable — the dev server sends COOP/COEP headers for cross-origin isolation — not that a production deployment meets those conditions. Real-device performance and real IME behaviour are treated as a separate platform qualification: until a platform is qualified with `pnpm platform:qualify`, the project does not claim its numbers.
What it does
- High-performance TSX runtime with virtual scrolling as a first-class primitive, not a userland add-on.
- Deterministic Rust/WASM core behind a versioned binary ABI.
- Canvas-native text editing: EditContext-first input with a centralized textarea proxy fallback, and deterministic IME record/replay.
- Platform qualification is explicitly separate from milestone completion — unqualified platforms make no performance claims.
Get started
Requirements: Node.js 22.12+, pnpm 10.33.2, Rust 1.96.0 with the wasm32-unknown-unknown target.
Run the platform probe
pnpm install --frozen-lockfile && pnpm m0:check && pnpm probe:dev