Silkenweb
A library for building reactive single page web apps.
Features
- Fine grained reactivity using signals to minimize DOM API calls
- No VDOM. Calls to the DOM API and your rendering code are minimized using signals.
- Uses plain Rust syntax rather than a macro DSL
- Downcasts Js objects for you where the type is known at compile time. For example:
input().dom_element()
returns aweb_sys::HtmlInputElement
button().on_click(...)
passes your event handler aweb_sys::HtmlInputElement
and aweb_sys::MouseEvent
.
Example: A Simple Counter
use silkenweb::{
elements::{button, div, p},
mount,
signal::Signal,
};
fn main() {
let count = Signal::new(0);
let set_count = count.write();
let inc = move |_, _| set_count.replace(|&i| i + 1);
let count_text = count.read().map(|i| format!("{}", i));
let app = div()
.child(button().on_click(inc).text("+"))
.child(p().text(count_text));
mount("app", app);
}
Quick Start
rustup target add wasm32-unknown-unknown
cargo install trunk wasm-pack
cargo install wasm-bindgen-cli --version 0.2.73
cd examples/counter
trunk serve --open
Learning
- Learning Silkenweb With Entirely Too Many Counters
- Check out the examples folder