Fermi ⚛

Atom-based global state management solution for Dioxus

Crates.io version Download docs.rs docs CI status

Fermi is a global state management solution for Dioxus that's as easy as use_state.

Inspired by atom-based state management solutions, all state in Fermi starts as an atom:

rust, ignore static NAME: Atom<&str> = Atom(|_| "Dioxus");

From anywhere in our app, we can read the value of our atom:

rust, ignore fn NameCard(cx: Scope) -> Element { let name = use_read(cx, &NAME); cx.render(rsx!{ h1 { "Hello, {name}"} }) }

We can also set the value of our atom, also from anywhere in our app:

rust, ignore fn NameCard(cx: Scope) -> Element { let set_name = use_set(cx, &NAME); cx.render(rsx!{ button { onclick: move |_| set_name("Fermi"), "Set name to fermi" } }) }

If needed, we can update the atom's value, based on itself:

```rust, ignore static COUNT: Atom = Atom(|_| 0);

fn Counter(cx: Scope) -> Element { let mut count = useatomstate(cx, &COUNT);

cx.render(rsx!{
    p {
      "{count}"
    }
    button {
        onclick: move |_| count += 1,
        "Increment counter"
    }
})

} ```

It's that simple!

Installation

Fermi is currently under construction, so you have to use the master branch to get started.

toml [dependencies] fermi = { git = "https://github.com/dioxuslabs/dioxus" }

Running examples

The examples here use Dioxus Desktop to showcase their functionality. To run an example, use

sh $ cargo run --example fermi

Features

Broadly our feature set required to be released includes: