Crate fermi

source ·
Expand description

Fermi ⚛

Atom-based global state management solution for Dioxus

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:

static NAME: Atom<&str> = |_| "Dioxus";

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

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:

fn NameCard(cx: Scope) -> Element {
    let set_name = use_set(cx, NAME);
        button {
            onclick: move |_| set_name("Fermi"),
            "Set name to fermi"

It’s that simple!


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

fermi = { git = "" }

Running examples

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

$ cargo run --example fermi


Broadly our feature set to required to be released includes:

  • Support for Atoms
  • Support for AtomRef (for values that aren’t clone)
  • Support for Atom Families
  • Support for memoized Selectors
  • Support for memoized SelectorFamilies
  • Support for UseFermiCallback for access to fermi from async


pub use hooks::*;




All Atoms are Readable - they support reading their value.
All Atoms are Writable - they support writing their value.

Type Definitions