Skip to content

Platforms and browsers ​

Renderer backends ​

The renderer uses wgpu with one set of shaders on both backends:

  • WebGPU is tried first (navigator.gpu).
  • WebGL2 is used when WebGPU is not available, or when you ask for it: Viewport.create(el, engine, { backends: ['webgl2'] }).

Every attempt and its error are reported in viewport.attempts; there is no silent Canvas2D fallback. If no backend works, the React editor shows an explanation and keeps the panels (properties, objects, files) working without a canvas.

Tested configurations ​

The product targets the current and previous major versions of desktop Chrome, Edge, Firefox and Safari. On 2026-10-02 these are Chrome 154/153, Edge 154/153, Firefox 157/156 and Safari 27/26. Two kinds of evidence are kept apart:

  • Released browsers (the builds users run), driven through their own WebDriver servers by tests/e2e/webdriver/smoke.mjs: drawing with each backend selected explicitly (lines, a circle, Turkish text), PNG export and the React playground. Chrome, Edge and Firefox are downloaded from the vendors by tests/e2e/webdriver/install.mjs; the six Linux jobs and the two Safari jobs run in compat.yml on every pull request and on main.
  • Engine families (Playwright's Chromium, Firefox and WebKit builds) run the full browser suite: tools, files, recovery, accessibility, device loss and pixel tests.

A backend a browser does not offer is reported as not available with the reason, never as passed.

Released browsers ​

BrowserOS, GPUWebGPUWebGL2Evidence
Chrome 154.0.8037.58 (installed)Windows 11, GTX 1060verifiedverifiedWebDriver smoke (results); reference benchmarks (performance)
Chrome 153.0.8010.52 (Chrome for Testing)Windows 11, GTX 1060verifiedverifiedWebDriver smoke
Edge 154.0.4258.48 (installed)Windows 11, GTX 1060verifiedverifiedWebDriver smoke; reference benchmarks
Chrome 154.0.8037.92 and 153.0.8010.52Linux CI, SwiftShaderverifiedverifiedcompat real-browser jobs (results)
Edge 154.0.4258.53Linux CI, SwiftShaderverifiedverifiedcompat real-browser job
Edge 153.0.4234.48Linux CI, SwiftShadernot available: the software device was lost, the viewport moved onverifiedcompat real-browser job
Firefox 157.0 and 156.0.1Linux CI, Mesa (Xvfb)not exposed on Linuxverifiedcompat real-browser jobs
Safari 26.6.1 (previous major)macOS 15 CI runnernot exposed on the runner (navigator.gpu undefined)verifiedcompat Safari job
Safari 27.0 (current major)macOS 27 CI runner (xcode-27, virtual machine)not available on the runner: navigator.gpu exists, no adapterverified; drawn pixels checked with WebGL readPixels — PNG export not verifiable there, since no canvas (not even a plain 2D one) can be read back in that VMcompat Safari job
Firefox 157/156 on Windows or macOS, Edge 153 on Windows, Safari WebGPU and Safari 27 PNG export on Mac hardware—not verifiednot verifiedno such device or install available here (issue #13)

Engine families (full suite) ​

BuildWebGPUWebGL2Evidence
Chromium 153 (Playwright), Windows, GTX 1060verifiedverifiedlocal suite
Chromium 153 (Playwright), Linux CI, SwiftShadernot available: a plain WebGPU device is destroyed right after creation in this buildverifiedci browser suite
Firefox 155 (Playwright build), Windowsverified in a window (benchmarks); headless builds return no WebGPU canvas contextverifiedlocal suite and benchmarks
Firefox 155 (Playwright build), Linux CInot exposedverified (software WebGL, window under Xvfb)ci browser suite
WebKit 26.6 (Playwright build), Linux and macOS CInot availableverifiedci and compat browser suites
WebKit 26.6 (Playwright build), Windowsnot availableverified, except resized canvases, which this build does not display (reproduced with plain WebGL)local suite

Native rendering (PNG export, GPU pixel tests) is verified on Vulkan (NVIDIA locally, Mesa lavapipe on Linux CI), Direct3D 12 (WARP on Windows CI) and Metal (macOS CI). Visual baselines belong to lavapipe; see CONTRIBUTING.md.

Engine and SDK ​

EnvironmentStatus
Rust (headless engine, CLI)Windows, Linux, macOS (CI); minimum Rust 1.89 (checked in CI)
Node.js 24@dotloomjs/sdk/node (in-thread engine), tested in CI; other versions not verified
Browsersmodule Web Workers, WebAssembly, ES2022
SSR / build toolsimporting the packages has no side effects; create engines only in the browser

Results are bit-identical natively (Windows, Linux, macOS) and in WebAssembly: the engine uses its own elementary functions instead of the platform math library, and parity tests compare digests of commits, documents, scenes and exports.

Device and context loss ​

WebGPU device loss and WebGL context loss are detected (also when nothing is being drawn), the renderer is recreated on a fresh canvas and the full scene is requested again from the engine. A backend whose device is lost within 5 s of creation (some software adapters) is tried last, so the viewport moves on to the next backend instead of retrying it. Repeated losses (three within 30 s) stop rendering with an error event instead of looping. viewport.whenStable() resolves once rendering has run on one backend without a loss for a moment (useful before screenshots).

MIT OR Apache-2.0