Bring Rust and WebAssembly into the web app you already have.
Documentation · Getting started · 中文指南 · Examples & experiments
Vooya connects Rust components and stores to existing web applications. Write
ordinary .rs files, reuse browser-compatible crates, and import the result
through a framework adapter. Your application keeps its router, page tree,
and surrounding UI. Rust owns a focused component or stateful capability.
Vooya handles the work between them: compilation, WASM loading, typed bindings, props and events, reactive snapshots, lifecycle, and cleanup. Use it for a parser, visualization, simulation, editor surface, or another bounded workload.
- Your framework owns the application. Vooya's adapters follow its lifecycle and reactive model; a Component owns its mounted subtree, while a Store exposes snapshots, actions, and subscriptions.
- Your bundler owns the build integration. Vooya plugins connect source imports, generated modules, assets, rebuilds, and diagnostics to Vite, Rspack, or Webpack.
- The language provider owns compilation. Rust is implemented today.
@vooya/build-corecurrently forwards to@vooya/provider-rust; a public multi-language provider protocol is still being designed. - Toolchains run at build time. Use system Rust tools or the optional alpha
@vooya/preset, which prepares pinned native tools. The browser runs the generated JS and WASM; the preset is not a browser-hosted compiler.
The diagram shows the current Rust path and future extension points. Asterisks mark experimental integrations; dashed outlines and ellipses indicate planned or additional integrations. See the compatibility matrix below for supported combinations. Read the architecture rationale and provider research for the design and its open questions.
// Greeting.rs
use wasm_bindgen::JsValue;
use vooya as voo;
#[voo::props]
#[derive(voo::FromJs)]
pub struct GreetingProps {
pub name: String,
}
#[voo::component]
pub fn Greeting(
view: &voo::View,
props: GreetingProps,
) -> Result<voo::ViewElement, JsValue> {
let label = format!("Hello, {}.", props.name);
voo::rsx!(view, <p>{label}</p>)
}<script setup lang="ts">
import Greeting from "./Greeting.rs";
</script>
<template>
<Greeting name="Vooya" />
</template>Vooya generates the wrapper and TypeScript declarations. Rust Stores use the same authoring model and expose framework-native state through generated hooks. Follow the Vue or React quickstart for installation, toolchain prerequisites, and project configuration.
Vooya is a prerelease project. The default quickstart uses the beta channel; the 0.2 alpha is an explicit opt-in. Package versions differ: use the documented installation path rather than assigning one version to every package.
| Area | Current boundary |
|---|---|
| Authoring | Rust .rs Components and Stores; other language providers are research |
| Frameworks | Vue and React supported; Solid and Svelte experimental |
| Bundlers | Vite 7/8 is the primary path; Rspack and Webpack support Rust .rs Components and Stores in the 0.2 alpha graph, with Vue/React coverage |
| Toolchains | System Rust tools; optional managed @vooya/preset in alpha, with native SDK/linker prerequisites |
| Development | Rust rebuilds reload the page; Rust state is not preserved |
| Distribution | Authors organize and publish ordinary JS/WASM packages; Vooya has no dedicated component-package format |
Rspack and Webpack are supported first-party integrations for Vue and React.
The supported contract covers Rust .rs Components and Stores, production
WASM/CSS, declarations, props/events, lifecycle, and development rebuild/recovery.
Use the 0.2 alpha package graph; integration support does not change the npm
prerelease channel. Solid/Svelte on these bundlers, SSR, Module Federation and
state-preserving Rust HMR remain outside this contract.
See the compatibility matrix, project status, and alpha installation guide for exact versions and verified combinations. The current development line has removed the custom source format and its tooling; see the migration guide.
- Rust authoring — Components, Stores, props, events, and styles.
- Component ownership — what the host and Rust each own.
- Tooling and dependencies — Cargo dependencies, preset, and diagnostics.
- Examples — explore real workloads and local demos.
- Design records — architecture proposals and decisions.
Questions, focused bug reports, and contributions are welcome. Start with Contributing, browse the good first issues, or discuss a proposal in Issues.
Vooya Lab exercises browser and integration boundaries. Vooya FS is a separate native Node.js batch-filesystem project; it uses Node-API, with its own runtime and support scope.
Dual-licensed under MIT or Apache-2.0.