Store

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

use_store

#[derive(Clone, Serialize, Deserialize)]
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() });

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.

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

Store vs Signal

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