pmndrs / pmndrs/react-three-examples

OffscreenCanvas worker rendering: no verified fiber v10/WebGPU story yet (blocks webgl_worker_offscreencanvas port)

Open
#2 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
TypeScript
Stars
2
Forks
1
PR merge metrics
No merged PRs in 30d

Description

What

webgl_worker_offscreencanvas (the official example that transfers an OffscreenCanvas
to a Web Worker and renders entirely off the main thread) is unported. Not because the
technique is unsupported in principle, but because nobody has verified the userland glue
end to end against this stack (@react-three/fiber@10.0.0-alpha.4, /webgpu entry).

Investigated 2026-09-07 (UPSTREAM.md brief B54, draft ready to paste at
docs/upstream-issues/B54-fiber-offscreencanvas.md):

  • fiber's createRoot() is already typed for OffscreenCanvas and has a genuine runtime
    branch (computeInitialSize() reads .width/.height directly when there's no DOM
    element to measure) — tracing back to already-merged PRs (#2770, #2495, #2493). The
    low-level primitive is more capable than documented.
  • What's actually missing is (1) no documented worker entry point / no confirmation
    WebGPURenderer construction succeeds against a transferred canvas inside a dedicated
    Worker, and (2) no event/resize forwarding story across the postMessage boundary.
  • A pre-existing sibling package, @react-three/offscreen, already implements the
    higher-level pieces (worker creation, canvas transfer, event forwarding) but is
    unverified against fiber v10's /webgpu entry — its peer range doesn't even cap below
    v10, and it was last published 2025-01-30.
  • The actual r185 original is simpler than the general problem: it's a one-shot canvas
    transfer + init payload with no live event forwarding, so a faithful port of THIS
    specific demo only needs the "documented entry point" half, not the event-bridge half.
Why it matters

Dennis, 2026-09-07: wanted, not skipped — an OffscreenCanvas story is something the
gallery should eventually offer. Blast radius is one demo category today (this is the only
OffscreenCanvas example in the r185 corpus), but the capability gap is real and worth
tracking rather than re-discovering later.

Recommendation already on file

Stays blocked until fiber (or @react-three/offscreen) has a documented/verified v10
WebGPU worker story. docs/upstream-issues/B54-fiber-offscreencanvas.md has a full
issue draft ready to paste upstream (framed as a feature-request/audit ask, cheapest path
first: a short fiber docs page pointing at @react-three/offscreen with an explicit
verified-or-not statement for v10/WebGPU).

Pointer

docs/REVIEW-QUEUE.md §1b (Phase 2 — three things an agent cannot decide), the
OffscreenCanvas bullet. The other two bullets in that entry (WebXR, @react-three/rapier)
are already decided and recorded in the Resolved table — this issue covers only the
OffscreenCanvas part, which is what remains open.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with docs/REVIEW-QUEUE.md §1b and the prepared docs/upstream-issues/B54-fiber-offscreencanvas.md. Then inspect @react-three/offscreen and fiber's createRoot() and /webgpu entry for a transferred canvas in a dedicated Worker. Done means a v10 WebGPU worker story is verified and documented, or its unresolved status is recorded clearly.

Written by the indexing model from the issue text.

Assessment

Tech stack
react, three.js, typescript
Domain
computer-graphics, frontend, web-dev
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.