Store

Stores wrap structured reactive state — mutations go through update or set, and the whole object serializes as one payload blob.

LIVE

use_store

Theme: dark · Count: 0

use_store

#[data]
struct User {
    name: String,
    email: String,
}

let user = use_store(User {
    name: "Ada".into(),
    email: "ada@example.com".into(),
});

user.update(|u| u.name = "Augusta".into());
user.set(User { name: "New".into(), email: u.email.clone() });

#[derive(Store)]

Generate typed field accessors on Store<T> (1.0+):

#[derive(Store)]
#[data]
struct Cart {
    items: u32,
    total_cents: u64,
}

let cart = use_store(Cart { items: 0, total_cents: 0 });
cart.set_items(2);
cart.update(|c| c.total_cents += 500);

In templates

view! {
    <p>{user.signal()}</p>
    <input value={user.get().name.clone()} />
}

NoSerialize

Mark fields that must not cross the resumability boundary — handles, callbacks, or non-serializable server state.

#[data]
struct AppState {
    pub count: u32,
    #[serde(skip)]
    pub db: NoSerialize<DbPool>,
}

Store vs Signal

Use signal for scalar values. Use use_store when you have structured objects with multiple fields that update together.