The quick path: one component, no engine or registry to assemble.
Declared state is synthesized as zero-values, and both engine and build
failures land in the failure content. Use it for a first integration or
a simple embed; real apps share one engine across screens.
Everything the engine is built from (document, vocabulary, renderers,
context, state) must be stable across renders, because a change rebuilds
the view and a rebuild restarts the document from its initial state. The
callbacks are exempt: they are read through refs, so passing an inline
closure costs nothing.
The quick path: one component, no engine or registry to assemble. Declared state is synthesized as zero-values, and both engine and build failures land in the failure content. Use it for a first integration or a simple embed; real apps share one engine across screens.
Everything the engine is built from (document, vocabulary, renderers, context, state) must be stable across renders, because a change rebuilds the view and a rebuild restarts the document from its initial state. The callbacks are exempt: they are read through refs, so passing an inline closure costs nothing.