Documentation

DOC / 19 / OPENSDK

Browser framework conformance

Integrate React, Svelte, and Lit through explicit Custom Element and adapter lifecycles with measurable cleanup.

In this guideBrowser framework conformance
Getting startedProject structureCLI referenceDeveloper loopIncremental buildsRouting and pagesRust viewsEvents and foldsSchemas and snapshotsHyphae verified syncTyped contentBrowser runtimeDOM ownershipNative runtime previewPortable deploymentFull-stack betaOpenSDK previewComponents and languagesBrowser framework conformanceTooling protocolCompatibility and deprecationAdaptive assetsArtifact trustRelease trustPerformance evidenceErrors and diagnosticsVoluntary telemetryBuild and deployCrates and APILicensing and policy

Keep framework runtimes native

React, Svelte, and Lit keep their normal browser packages and APIs. PliegoRS does not reimplement their renderers. Each fixture is exposed through a Custom Element and admitted through adapter API v1, leaving the real integration point visible to developers.

Match the admitted descriptor

Before registration, the exported component tag, adapter API version, lifecycle exports, and capabilities must match the exact admitted manifest descriptor. Reserved or malformed Custom Element names and incoherent lifecycle combinations are rejected.

mount
Create one owned framework root
update
Apply live properties to the admitted generation
HMR
Dispose the old root before importing and mounting a fresh generation
destroy
Retire roots, listeners, timers, channels, and adapter scopes

Run real browser conformance

shell
npm run check:opensdk:browser-frameworks

The headless Chrome gate covers mount, live property update, reduced-motion propagation, HMR replacement, runtime destruction, and listener cleanup for React, Svelte, and Lit.

Measure cleanup under adversarial ownership

A separate adversarial adapter owns a real interval, document listener, abort scope, and MessageChannel. HMR must replace them without duplication; destroy must reduce all four counters to zero, and later events or time may not change the retired counter stream.