@vooya/vue
Vooya
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.
How it fits together
- 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.
A Rust component, used from Vue
// 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.
Current scope
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 integrations remain experimental: they have working
implementations with a limited acceptance matrix. Rust .rs authoring requires
the 0.2 alpha package set; the older non-Vite beta packages do not implement
that path. Production browser tests cover Vue and React; Rust watch recovery
is verified for Vue. Other framework/watch combinations are not yet verified.
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.
Learn more
- 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.
Community
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.
License
Dual-licensed under MIT or Apache-2.0.
Version History
Pre-releases (16)
| Version | Released | Vue | License |
|---|---|---|---|
| 0.2.0-alpha.0 | >=3.5.2 | MIT OR Apache-2.0 | |
| 0.1.0-beta.1 | >=3.5.2 | MIT OR Apache-2.0 | |
| 0.1.0-beta.0 | >=3.5.2 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.12 | >=3.5.2 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.11 | >=3.5.2 <4 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.10 | >=3.5.2 <4 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.9 | >=3.5.2 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.8 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.7 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.6 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.5 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.4 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.3 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.2 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.1 | ^3.5.0 | MIT OR Apache-2.0 | |
| 0.1.0-alpha.0 | ^3.5.0 |