Build reactive web appswith Rust.

fusor.build · 2026-09-27 · by Long Nguyen ·generic
Build reactive web apps with Rust. Write your UI in HTML files and keep state and frontend logic in Rust, with no markup inside Rust macros.

Build reactive web appswith Rust.

Build reactive web apps

with Rust.

Write your UI in HTML files. Keep state and frontend logic in Rust. No markup inside Rust macros.

Get started → Read the introduction ↗

Each example is a component: an HTML template and a Rust module.

Read the guide ↗

Counter Live search Keyed lists Async data

Running in your browser

Component <> rs

Page <> rs

↗

These are complete source files. The component files define ``; the page files place that tag inside `<App>`, which starts the app. Four things connect HTML and Rust:

`rust:component`Names the Rust struct. Its fields and methods are available as state.

``Shows a Rust value as text or an attribute, and updates when the signals it reads change.

`on:click` · `bind:value`Runs Rust when an event fires, or keeps an input and a signal in sync.

`template!(…)`Connects the module to its HTML, so the compiler checks both together.

`fusor new` creates `Cargo.toml`, `build.rs`, and `src/lib.rs`; declare the additional component modules in `src/lib.rs`. The App boundary →

How it works

What you write, and what fusor does with it.

Markup in HTML files

Templates are `.html` files with the elements, classes, labels, and forms you would write anyway. Style them with CSS. Rust goes in double-brace bindings and attributes such as `on:click`.

HTML and Rust →

Logic in Rust modules

State is a Rust struct and behavior is its methods, with ordinary imports and types. The compiler checks every expression in your templates against that code.

Reusable components →

Fine-grained updates

Your Rust compiles to WebAssembly and runs in the browser. Each binding tracks the signals it reads. When a signal changes, the bindings that read it run again; the rest of the component does not re-render.

Signals and derived state →

Owned cleanup and async

Listeners, effects, and requests belong to the component that started them and stop when it is removed. `<Async>` can keep the previous view until related data is ready.

Owners and cleanup →

Try fusor

Install the CLI and create an app. The starter includes a component to edit in HTML and Rust.

1. ### 01Install the CLI macOS / Linux Windows `` 2. ### 02Create your app ``` fusor new my-app cd my-app fusor dev ``` Open the local URL printed in your terminal.

fusor.build · 1 images · 13 links

Comments (0)

No comments yet