Complete capability atlas / 16 labs

Every feature.
Something you can touch.

A test bench for each primitive and preserved browser behavior in the experimental HTML-in-Canvas proposal. Native paths activate when the API exists; every lab includes a runnable compatibility path.

Detecting runtime…
Native APIs
0 / 5
Runnable labs
16 / 16
Fallbacks
Always on
01Rendering5 labs
02Layout + sync3 labs
03Browser behavior8 labs
Complete16 / 16 mapped
Runnable test bench

Capability coverage

R.01Rendering
Checking…

Canvas 2D · drawElementImage()

Paint a direct DOM child into Canvas 2D and keep its input interactive.

58%
58%
DOM compatibility pathlayoutsubtree → paint → transform
View native path
canvas.onpaint = () => {
  ctx.reset();
  const matrix = ctx.drawElementImage(form, 32, 24);
  form.style.transform = matrix.toString();
};
R.02Rendering
Checking…

WebGL texture upload

Map HTML to a GPU texture and animate it on a perspective surface.

HTML TEXTURE WEB / GL Live DOM source
View native path
gl.texElementImage2D(
  gl.TEXTURE_2D, gl.RGBA, htmlElement, {}
);
R.03Rendering
Checking…

WebGPU texture copy

Copy a semantic DOM panel into a GPU texture with a Canvas 2D fallback.

GPU QUEUE DOM → GPU copyElementImageToTexture
View native path
device.queue.copyElementImageToTexture(
  { source: panel },
  { destination: { texture }, width, height }
);
R.04Rendering
Checking…

ElementImage · OffscreenCanvas worker

Transfer a captured DOM snapshot to a worker. The compatibility path runs the same live chart fully off the main thread.

WORKER ACTIVE 0 frames
View native path
const image = canvas.captureElementImage(source);
worker.postMessage({ elementImage: image }, [image]);
R.05Rendering
Checking…

Paint invalidation

Change a child, inspect changedElements, then request another paint.

0paint events
Waiting for interaction
L.01Layout + sync
Interactive

Transform synchronization

Move the surface, then prove its nested hit target still lands correctly.

DOMMatrix
L.02Layout + sync
ResizeObserver

High-DPI responsive grid

Resize the CSS surface while its backing store tracks physical pixels.

Measuring…
L.03Layout + sync
Progressive

Graceful fallback

Force both enhancement tiers without changing the semantic source.

B.01Browser behavior
DOM layout

Text layout, formatting, and direction

Switch one semantic message between multiline Latin, Arabic RTL, and vertical Japanese layout.

LAYOUT ENGINE / EN

Interfaces keep their language, rhythm, and meaning.

B.02Browser behavior
Native controls

Forms + validation

Use browser-native input, validation, select, focus, and output behavior.

Awaiting manifest
B.03Browser behavior
Selectable

Select, copy, paste, context

Drag across the phrase, copy it, paste below, or open the native context menu.

Pixels are temporary. Meaning survives.
0 context menus
Ready
B.04Browser behavior
Accessibility tree

Accessible name + live state

Operate by keyboard and inspect the same labels a screen reader receives.

B.05Browser behavior
Find-in-page

Browser find

Copy the beacon, press Ctrl/Cmd+F, and find real DOM text inside the experience.

SEARCH BEACON NEON-ORBIT-742 Then use browser Find
B.06Browser behavior
Semantic

Indexability + agent interface

Extract the heading, description, link, and structured-data type exactly as a crawler can.

Waiting to inspect DOM…
B.07Browser behavior
Mutation-aware

Extension-style mutation

Simulate a text-replacement extension and watch the DOM-driven surface update.

LOCALIZED BY DOMHello, interface.
0 mutations observed
B.08Browser behavior
Inspectable

DevTools style inspection

Change a CSS custom property, then inspect #devtoolsTarget. Computed styles and semantic source remain ordinary DOM.

INSPECT ME CSS stays live.

Change --inspect-accent in DevTools.

--inspect-accent: #c8ff3d
Coverage proof

Every claim has a test surface.

CapabilityNative primitiveRunnable proofFallback
Canvas 2DdrawElementImageInteractive controlSemantic form
WebGLtexElementImage2DAnimated textureGenerated GPU texture
WebGPUcopyElementImageToTextureTexture copyCanvas 2D renderer
Worker renderingcaptureElementImageOffscreen chartWorker-generated pixels
Paint lifecyclepaint / requestPaintInvalidation counterSimulated event log
Layout + hit testinggetElementTransformTransform targetDOMMatrix CSS
Physical sizingResizeObserverDPR readoutScaled backing grid
Browser integrationsSemantic DOMEight browser labsNative DOM
Keep experimenting

The atlas is a test bench,
not a compatibility claim.

The proposal is still moving. Use these labs to test a browser build, inspect fallbacks, and report findings against the living explainer.

Open the WICG explainer ↗