Fuaranfuaran

The source for generative UI

One tree, every pipeline

Last reviewed: July 2026.

An AI-emitted interface can be correct in every way a decoder can check and still fail at delivery: a client-only single-page app is a blank page to a search crawler, to a no-JavaScript visitor, and to everyone in the seconds before the bundle executes. The information was in the tree; the delivery threw it away.

Fuaran renders the same typed tree through three pipelines: an interactive client renderer, a server renderer that turns a tree into plain HTML with no client framework in the loop, and isomorphic hydration that attaches the client renderer to the server-rendered DOM without throwing it away – one canonical tree, a fast crawlable first paint, interactivity layered on without a flash. Server rendering is unremarkable in itself; every major framework does it. Two decisions distinguish this one:

  • Parity is an executable contract, not a shared component library. What keeps multiple renderers in agreement is usually "they render the same components." Fuaran's renderers share a pure spine (class vocabulary, accessibility projection, binding resolution, deterministic ids) so the wrapper of every node agrees by construction – and the genuine drift surface, the per-kind body markup, is pinned by a render-parity corpus that runs as a build gate. A class-name change in one renderer is a build failure, not a hydration-mismatch warning in production. It is the same discipline the wire format gets from its conformance corpus (see Canonical bytes), applied to a second axis: one corpus for how a tree serialises, one for how it renders. And the server pipeline is not single-language: TypeScript and Python hosts render the same wire tree to first-paint HTML under the same class-vocabulary locks.
  • Degradation is designed, not accidental. On the server, a button renders inert until hydration – but navigation is a typed link that renders a real, sanitised <a href>, so a crawler indexes destinations and a no-JavaScript reader can follow them. Data bindings resolve server-side where the host supplied data – a metric renders its number, not a placeholder – and where a surface genuinely requires a client library (a chart canvas, a virtualised grid), it renders a deterministic placeholder for hydration to fill, never a blank. Markdown is real HTML. The page is usable, indexable, and accessible before any JavaScript runs.

The consequence for AI-generated UI specifically: an emitted tree is not "a web app" – it is an artefact that projects to a live app, a static crawlable document, or an email-safe digest, from the same bytes, with the projections' agreement under test. When someone says "send me that app," the answer doesn't depend on what runtime the recipient has.