Skip to content

RFC 0010: opt-in in-place component updates ​

Status: implemented alpha contract.

Decision ​

#[voo::component(update = "path::to::handler")] preserves the mounted root when framework props change and invokes:

rust
fn update(root: &voo::ViewElement, props: Props) -> Result<(), JsValue>

The path is resolved by Rust at compile time. The handler receives the complete next props object, not a partial patch. Its work is synchronous and must leave the component in a valid state if it succeeds. Disposal remains owned by the original root cleanup scope.

This opt-in exists for stateful surfaces such as Canvas, editors, and media players whose DOM identity and browser resources must survive a prop update. The default remains replace-root for compatibility. The alpha does not add an async update hook, diff individual Rust fields, or expose arbitrary JS objects.

Vooya is a beta project. Check the compatibility matrix before relying on a path.