Concepts
Embeds
Embeds render the live draft — the update model, ETag polling, and the frozen wire schema.
<Workflow id /> renders the workflow's current saved graph, not a
published snapshot. There is no publish step between saving in the editor and
what an embed shows: every save is visible to embeds on their next
revalidation.
The delivery contract
GET /api/v1/workflows/:idis public and unauthenticated; the workflow id is the capability. It serves{ schemaVersion: 1, graph, assets }.- Responses carry an ETag derived from the workflow's
updatedAt, and the endpoint honoursIf-None-Matchwith a bodyless304— so polling an unchanged workflow costs almost nothing. - The embed runtime caches in-flight fetches, retries with jittered backoff,
and revalidates conditionally.
<Workflow revalidate={ms} revalidateOnFocus>turns on polling. - When the graph changes, the renderer hot-swaps the material's color node on the existing WebGPU context — never a teardown, so updates are flicker-free.
The frozen schema
The graph wire shape is frozen as schemaVersion: 1. A breaking change bumps
the version, and clients refuse versions they don't understand
(UNSUPPORTED_SCHEMA) rather than misrender.
Rendering
Shaders execute on the viewer's GPU — WebGPU where available, WebGL2 as a fallback. The server never evaluates a graph and records no embed analytics.