Vorstellung von bwu_redux: Redux-Style State Management für Rust, jetzt Open Source

2026-07-17

Kategorie: Ankündigungen

Ferris, die Rust-Maskottchen-Krabbe, winkt mit einer Schere

In unserem letzten Beitrag haben wir das Argument für die Kombination von Redux-artigem State Management mit Rust vorgebracht. Heute ist das kein reines Argument mehr — es ist ein Crate, das Sie Ihrem Projekt hinzufügen können. bwu_redux ist jetzt Open Source, veröffentlicht auf crates.io und GitHub unter einer dualen MIT/Apache-2.0-Lizenz.

Es ist dieselbe State-Management-Bibliothek, die hinter dem Frontend von BWU Designer steckt, herausgelöst, damit jeder sie unabhängig von unserer App nutzen kann.

Was es macht

bwu_redux ist ein asynchroner, Redux-artiger Store für Rust: ein einzelner unveränderlicher Zustand, Aktionen, die durch eine Middleware-Kette geschickt werden, und ein reiner Reducer, der den nächsten Zustand erzeugt. Zustandsänderungen werden an Subscriber als asynchrone Streams übertragen, angetrieben von Selektoren, die genau den Teil des Zustands extrahieren, der einen Subscriber tatsächlich interessiert — sodass ein Subscriber nur geweckt wird, wenn sich der ausgewählte Wert tatsächlich ändert, nicht bei jedem Dispatch.

Ein paar Dinge sind besonders erwähnenswert:

Erste Schritte

use std::sync::Arc;
use bwu_redux::{StoreConfig, StoreWrapper};

#[tokio::main]
async fn main() {
    let config = StoreConfig::new(String::from("initial"), |state: String, action: &String| {
        if action.is_empty() { state } else { action.clone() }
    });
    let store = Arc::new(StoreWrapper::new(config));

    store.run();
    store.dispatch(String::from("hello")).expect("store is running");

    store.close(String::new()).await.expect("close failed");
    assert_eq!(store.select(|s| s.clone()), "hello");
}

Zustands- und Aktionstypen brauchen nur Clone + Debug + PartialEq + Send + Sync — fügen Sie serde::Serialize/Deserialize hinzu, wenn Sie das redux_devtools-Feature nutzen möchten. Das README enthält ein vollständigeres Beispiel mit eingerichtetem Tracing sowie die vollständige Feature-Flag-Referenz.

Ausprobieren und uns sagen, was kaputtgeht

Dies ist ein 0.1.0-Release: der Kern-Store, Middleware, Undo-Historie und die DevTools-Integration sind alle im täglichen Einsatz in BWU Designer, aber das Crate ist jung und die API kann sich noch verschieben. Wenn Sie es ausprobieren und auf eine Unebenheit stoßen — oder einfach sehen wollen, wie das DevTools-Protokoll funktioniert — sind Issues und Pull Requests auf GitHub willkommen.

[dependencies]
bwu_redux = "0.1"