<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
    <title>BeWellUp - Blog</title>
    <subtitle>BeWellUp: Neuigkeiten, Updates und Informationen zu BWU Designer.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://bewellup.com/de/blog/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://bewellup.com/de/blog/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-18T00:00:00+00:00</updated>
    <id>https://bewellup.com/de/blog/atom.xml</id>
    <entry xml:lang="de">
        <title>Vorstellung von bwu_redux_devtools: Eine Redux-DevTools-GUI für Rust</title>
        <published>2026-07-18T00:00:00+00:00</published>
        <updated>2026-07-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bewellup.com/de/blog/introducing-bwu-redux-devtools/"/>
        <id>https://bewellup.com/de/blog/introducing-bwu-redux-devtools/</id>
        
        <content type="html" xml:base="https://bewellup.com/de/blog/introducing-bwu-redux-devtools/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;bwu-redux-devtools-diff-coloring.gif&quot; alt=&quot;Tree-Ansicht mit Farbcodierung für hinzugefügten, entfernten und geänderten Zustand zwischen Aktionen&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nach &lt;a href=&quot;&#x2F;de&#x2F;blog&#x2F;introducing-bwu-redux&#x2F;&quot;&gt;bwu_redux&lt;&#x2F;a&gt; haben wir jetzt auch
&lt;strong&gt;bwu_redux_devtools&lt;&#x2F;strong&gt; als Open Source veröffentlicht — die Redux-DevTools-GUI und
den gRPC-Server, die wir gebaut haben, um &lt;code&gt;bwu_redux&lt;&#x2F;code&gt;-Stores zu inspizieren,
veröffentlicht auf &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BeWellUp&#x2F;bwu_redux_devtools&quot;&gt;GitHub&lt;&#x2F;a&gt; unter
einer dualen MIT&#x2F;Apache-2.0-Lizenz.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;was-es-macht&quot;&gt;Was es macht&lt;&#x2F;h2&gt;
&lt;p&gt;Verbundene Apps streamen jede ausgelöste Aktion und den resultierenden Zustand an den
DevTools-Server. Die GUI zeigt die Aktionshistorie pro App und lässt Sie jeden
aufgezeichneten Zustand als aufklappbaren Baum, JSON oder RON inspizieren. Die
Baumansicht — oben abgebildet — färbt ein, was sich seit der vorherigen Aktion
geändert hat (hinzugefügt, entfernt, geändert), mit einem Umschalter, um alles
auszublenden, was unverändert blieb, damit ein großer Zustand nicht das eine Feld
verschluckt, das Sie tatsächlich interessiert.&lt;&#x2F;p&gt;
&lt;p&gt;Es ist mit &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dioxuslabs.com&#x2F;&quot;&gt;Dioxus&lt;&#x2F;a&gt; gebaut, demselben GUI-Framework wie BWU
Designer, und läuft sowohl als Desktop-App als auch als Web-GUI.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;noch-nicht-auf-crates-io&quot;&gt;Noch nicht auf crates.io&lt;&#x2F;h2&gt;
&lt;p&gt;Anders als &lt;code&gt;bwu_redux&lt;&#x2F;code&gt; selbst ist dieses Crate nicht auf crates.io veröffentlicht: Es
hängt von den offiziellen Dioxus-Komponenten ab, deren &lt;code&gt;dioxus-primitives&lt;&#x2F;code&gt;-Crate
derzeit nur als Git-Abhängigkeit verfügbar ist, nicht als veröffentlichtes Release.
Sobald das upstream landet, veröffentlichen wir auch hier. Bis dahin installieren Sie
direkt von GitHub:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #24292E; background-color: #FFFFFF;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Desktop-GUI (bettet den DevTools-gRPC-Server ein)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #005CC5;&quot;&gt; --git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; https:&#x2F;&#x2F;github.com&#x2F;BeWellUp&#x2F;bwu_redux_devtools&lt;&#x2F;span&gt;&lt;span style=&quot;color: #005CC5;&quot;&gt; --bin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; bwu_redux_devtools&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Nur der Headless-gRPC-Server (z. B. um die Web-GUI zu bedienen)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #005CC5;&quot;&gt; --git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; https:&#x2F;&#x2F;github.com&#x2F;BeWellUp&#x2F;bwu_redux_devtools&lt;&#x2F;span&gt;&lt;span style=&quot;color: #005CC5;&quot;&gt; --bin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; bwu_redux_devtools_server&lt;&#x2F;span&gt;&lt;span style=&quot;color: #005CC5;&quot;&gt; --features&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; standalone-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;eine-app-verbinden&quot;&gt;Eine App verbinden&lt;&#x2F;h2&gt;
&lt;p&gt;Aktivieren Sie DevTools in der Store-Konfiguration der App, die Sie inspizieren
möchten — das braucht das &lt;code&gt;redux_devtools&lt;&#x2F;code&gt;-Feature von &lt;code&gt;bwu_redux&lt;&#x2F;code&gt;, das standardmäßig
aktiviert ist:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #24292E; background-color: #FFFFFF;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; StoreConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(initial_state, reducer)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;with_devtools&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #005CC5;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;with_app_name&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt;&amp;quot;my-app&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Starten Sie die DevTools-GUI, dann Ihre App; sie erscheint in der Seitenleiste und
ihre Aktionshistorie füllt sich live.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;eine-mcp-schnittstelle-gratis-dazu&quot;&gt;Eine MCP-Schnittstelle, gratis dazu&lt;&#x2F;h2&gt;
&lt;p&gt;Mit aktiviertem &lt;code&gt;mcp&lt;&#x2F;code&gt;-Feature stellt derselbe Server neben seinem üblichen
gRPC-Endpunkt auch einen &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;modelcontextprotocol.io&#x2F;&quot;&gt;MCP&lt;&#x2F;a&gt;-Endpunkt bereit —
keine separate Binary oder Prozess nötig. Das bedeutet, ein KI-Agent — etwa Claude
Code — kann den live Redux-Zustand einer verbundenen App direkt inspizieren:
verbundene Apps auflisten, die Aktions-&#x2F;Zustandshistorie einer App abrufen, ihren
aktuellen Zustand lesen oder das Weiterleiten störender Aktionen pausieren. Für uns
hat sich das als wirklich nützlicher Weg erwiesen, um einen Agenten Zustandsprobleme
in BWU Designer debuggen zu lassen, ohne uns gegenseitig Screenshots hin- und
herzuschicken.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ausprobieren&quot;&gt;Ausprobieren&lt;&#x2F;h2&gt;
&lt;p&gt;Issues und Pull Requests sind auf
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BeWellUp&#x2F;bwu_redux_devtools&quot;&gt;GitHub&lt;&#x2F;a&gt; willkommen. Wenn Sie
&lt;code&gt;bwu_redux&lt;&#x2F;code&gt; bereits nutzen, ist das die andere Hälfte des Bildes — probieren Sie es
aus.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="de">
        <title>Vorstellung von bwu_redux: Redux-Style State Management für Rust, jetzt Open Source</title>
        <published>2026-07-17T00:00:00+00:00</published>
        <updated>2026-07-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bewellup.com/de/blog/introducing-bwu-redux/"/>
        <id>https://bewellup.com/de/blog/introducing-bwu-redux/</id>
        
        <content type="html" xml:base="https://bewellup.com/de/blog/introducing-bwu-redux/">&lt;img src=&quot;&#x2F;images&#x2F;rustacean-flat-gesture.svg&quot; alt=&quot;Ferris, die Rust-Maskottchen-Krabbe, winkt mit einer Schere&quot; class=&quot;w-40 mx-auto not-prose&quot;&gt;
&lt;p&gt;In unserem &lt;a href=&quot;&#x2F;de&#x2F;blog&#x2F;redux-and-rust-for-frontend-development&#x2F;&quot;&gt;letzten Beitrag&lt;&#x2F;a&gt; 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. &lt;strong&gt;bwu_redux&lt;&#x2F;strong&gt; ist jetzt Open Source, veröffentlicht auf
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;bwu_redux&quot;&gt;crates.io&lt;&#x2F;a&gt; und
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BeWellUp&#x2F;bwu_redux&quot;&gt;GitHub&lt;&#x2F;a&gt; unter einer dualen
MIT&#x2F;Apache-2.0-Lizenz.&lt;&#x2F;p&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;was-es-macht&quot;&gt;Was es macht&lt;&#x2F;h2&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;p&gt;Ein paar Dinge sind besonders erwähnenswert:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Undo gibt&#x27;s gratis dazu.&lt;&#x2F;strong&gt; Mit aktiviertem &lt;code&gt;history&lt;&#x2F;code&gt;-Feature (standardmäßig an)
behält der Store automatisch die letzten N Zustände. Undo ist kein separates,
aufgesetztes System — es ergibt sich aus demselben Append-only-Zustandsprotokoll,
das den Store von vornherein vorhersehbar macht.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Time-Travel-Debugging.&lt;&#x2F;strong&gt; Das &lt;code&gt;redux_devtools&lt;&#x2F;code&gt;-Feature streamt jede
Zustandsänderung zu einem DevTools-gRPC-Server zur Live-Inspektion, mit demselben
Wire-Format, egal ob Ihre App nativ läuft oder im Browser.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Eine Codebasis, zwei Laufzeitumgebungen.&lt;&#x2F;strong&gt; Genau derselbe Store, dieselben
Aktionen und dieselbe Reducer-Logik laufen unverändert auf nativen Zielen und in
WASM über &lt;code&gt;wasm-bindgen&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;gloo&lt;&#x2F;code&gt; — einschließlich der DevTools-Verbindung, die im
Browser einfach zu gRPC-web wechselt.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;erste-schritte&quot;&gt;Erste Schritte&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #24292E; background-color: #FFFFFF;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;sync&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;Arc&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; bwu_redux&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;StoreConfig&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; StoreWrapper&lt;&#x2F;span&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[tokio&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;main]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;async fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; StoreConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt;&amp;quot;initial&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span&gt;state&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt;, action&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; action&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;is_empty&lt;&#x2F;span&gt;&lt;span&gt;() { state }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; { action&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    });&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; store&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt; Arc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;StoreWrapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(config));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    store&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    store&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;dispatch&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt;&amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt;&amp;quot;store is running&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    store&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;close&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.await.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt;&amp;quot;close failed&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;    assert_eq!&lt;&#x2F;span&gt;&lt;span&gt;(store&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;select&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt;s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D73A49;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;()),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; &amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Zustands- und Aktionstypen brauchen nur &lt;code&gt;Clone + Debug + PartialEq + Send + Sync&lt;&#x2F;code&gt; —
fügen Sie &lt;code&gt;serde::Serialize&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;Deserialize&lt;&#x2F;code&gt; hinzu, wenn Sie das &lt;code&gt;redux_devtools&lt;&#x2F;code&gt;-Feature
nutzen möchten. Das &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BeWellUp&#x2F;bwu_redux&quot;&gt;README&lt;&#x2F;a&gt; enthält ein
vollständigeres Beispiel mit eingerichtetem Tracing sowie die vollständige
Feature-Flag-Referenz.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ausprobieren-und-uns-sagen-was-kaputtgeht&quot;&gt;Ausprobieren und uns sagen, was kaputtgeht&lt;&#x2F;h2&gt;
&lt;p&gt;Dies ist ein &lt;code&gt;0.1.0&lt;&#x2F;code&gt;-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 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BeWellUp&#x2F;bwu_redux&quot;&gt;GitHub&lt;&#x2F;a&gt;
willkommen.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #24292E; background-color: #FFFFFF;&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6F42C1;&quot;&gt;dependencies&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bwu_redux =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #032F62;&quot;&gt; &amp;quot;0.1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="de">
        <title>Das Argument für Redux und Rust in der Frontend-Entwicklung</title>
        <published>2026-07-17T00:00:00+00:00</published>
        <updated>2026-07-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bewellup.com/de/blog/redux-and-rust-for-frontend-development/"/>
        <id>https://bewellup.com/de/blog/redux-and-rust-for-frontend-development/</id>
        
        <content type="html" xml:base="https://bewellup.com/de/blog/redux-and-rust-for-frontend-development/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;redux-and-rust-cover.jpg&quot; alt=&quot;Blick über einen Bergkamm in den Alpen&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Frontend-Zustand neigt dazu, schnell auszuufern. Daten werden an einer Stelle geladen,
an einer anderen verändert und an einer dritten gelesen. Sechs Monate nach Projektstart
drehen sich die hartnäckigsten Bugs selten um &lt;em&gt;was&lt;&#x2F;em&gt; der Zustand enthält — sondern um
&lt;em&gt;wann&lt;&#x2F;em&gt; und &lt;em&gt;wie&lt;&#x2F;em&gt; er dorthin gelangt ist. Irgendetwas hat den Zustand verändert, unter
einer Komponente hinweg, die glaubte ihn zu besitzen, oder zwei Code-Stellen haben in
leicht unterschiedlicher Reihenfolge um denselben Wert gewetteifert. Nichts davon zeigt
sich in einer Typsignatur. Es zeigt sich erst um 2 Uhr nachts.&lt;&#x2F;p&gt;
&lt;p&gt;Das Redux-Pattern war eine direkte Antwort auf dieses Problem, und es hält sich auch
mehr als ein Jahrzehnt später noch gut.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;was-einem-das-pattern-bringt&quot;&gt;Was einem das Pattern bringt&lt;&#x2F;h2&gt;
&lt;p&gt;Die Kernidee von Redux ist fast schon langweilig einfach: Es gibt genau eine
Quelle der Wahrheit für den Zustand einer Anwendung, und der einzige Weg, ihn zu
ändern, ist eine typisierte Aktion durch eine reine Reducer-Funktion zu schicken.
Keine Komponente greift direkt ein und verändert den Zustand; kein Seiteneffekt schreibt
im Stillen etwas um, worauf sich ein anderer Teil der UI verlässt. Jeder
Zustandsübergang ist &lt;code&gt;(alter_zustand, aktion) -&amp;gt; neuer_zustand&lt;&#x2F;code&gt;, Punkt.&lt;&#x2F;p&gt;
&lt;p&gt;Diese Disziplin klingt einschränkend, zahlt sich aber fast sofort aus. Weil Reducer
reine Funktionen sind, ist jeder Zustandsübergang inspizierbar, wiederholbar und
isoliert testbar — kein Mocken eines DOM, kein Simulieren eines Komponenten-Lebenszyklus.
Und sobald Zustandsänderungen nur noch ein Protokoll aus &lt;code&gt;(aktion, resultierender_zustand)&lt;&#x2F;code&gt;-Paaren
sind, hören Time-Travel-Debugging und Undo&#x2F;Redo auf, schwierige Features zu sein.
Sie werden eher zu einem Nebeneffekt der Architektur als zu einem eigenen Projekt.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;unabhangigkeit-vom-framework&quot;&gt;Unabhängigkeit vom Framework&lt;&#x2F;h2&gt;
&lt;p&gt;Das ist der Teil, der zu wenig gewürdigt wird. Weil die Geschäftslogik — Aktionen,
Reducer, Selektoren — überhaupt keine Abhängigkeit von der Render-Schicht hat, wird
das GUI-Framework zu einem dünnen, austauschbaren Konsumenten des Zustands, statt zu
dem Ding, um das herum alles andere gebaut ist. Ihren Reducern ist es egal, ob sie
von React, einem nativen Toolkit oder gar nichts gerendert werden. Das bedeutet, Sie können das Render-Framework später austauschen, eine zweite
Oberfläche neben der ersten betreiben — eine CLI, eine mobile Hülle, ein
Server-seitiges Rendering — oder die Framework-Version aktualisieren, ohne einen
einzigen Reducer anzufassen, weil es nie eine Abhängigkeit dorthin gab.&lt;&#x2F;p&gt;
&lt;p&gt;Das ist eine strukturelle Eigenschaft von Redux selbst, unabhängig von der Sprache.
Es stellt sich aber heraus, dass Rust ein besonders guter Ort ist, um darauf
aufzubauen.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;warum-rust-das-pattern-weiter-scharft&quot;&gt;Warum Rust das Pattern weiter schärft&lt;&#x2F;h2&gt;
&lt;p&gt;Ein paar Dinge verstärken sich gegenseitig auf schöne Weise:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aktionen als Enums.&lt;&#x2F;strong&gt; Wenn jede Aktion eine Variante eines Enums ist, matchen
Reducer erschöpfend über sie. Fügt man eine neue Aktion hinzu und vergisst,
sie irgendwo zu behandeln, stoppt einen der Compiler — kein stiller No-Op, den
ein Nutzer erst drei Releases später entdeckt.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ownership-Regeln eliminieren eine ganze Bug-Klasse.&lt;&#x2F;strong&gt; Der klassische
Redux-Fallstrick in dynamisch typisierten Sprachen ist, dass etwas außerhalb
des Reducer-Pfads in geteilten Zustand eingreift und ihn verändert. Rusts Borrow
Checker macht das strukturell unmöglich, statt es der Teamdisziplin und
Code-Reviews zu überlassen.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Typen fangen ungültige Zustände zur Kompilierzeit ab.&lt;&#x2F;strong&gt; Statt einer
Laufzeitwarnung über eine unerwartete Prop-Form kompiliert ein ungültiger
Zustandsübergang einfach nicht. Die Feedback-Schleife verschiebt sich von
&quot;jemand bemerkt es in Produktion&quot; zu &quot;der Build schlägt fehl&quot;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;der-ubliche-einwand&quot;&gt;Der übliche Einwand&lt;&#x2F;h2&gt;
&lt;p&gt;Die Standardbeschwerde über Redux ist Boilerplate — Action Creators, Typkonstanten,
über Dateien verstreute Switch-Statements. Diese Beschwerde ist größtenteils ein
Artefakt davon, Redux in einer Sprache ohne echtes Typsystem zum Anlehnen zu bauen.
Enums, Derive-Makros und Pattern Matching reduzieren das meiste dieser Zeremonie
automatisch, und der Compiler erledigt Validierungsarbeit, die ein dynamisch
typisiertes Redux-Setup von Hand erledigen muss, Aktion für Aktion.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wo-es-sich-tatsachlich-lohnt&quot;&gt;Wo es sich tatsächlich lohnt&lt;&#x2F;h2&gt;
&lt;p&gt;Diese Kombination ist nicht das richtige Werkzeug für eine statische Marketing-Seite.
Sie zahlt sich in Anwendungen mit wirklich langlebigem, komplexem Zustand aus —
Undo-Historie, mehrere Ansichten, die synchron bleiben müssen, Sitzungen, die über
viel Nutzerinteraktion hinweg bestehen. Genau dort hört auch der
Framework-Unabhängigkeits-Punkt von vorhin auf, theoretisch zu sein: dieselbe
Reducer- und Aktionslogik kann mehrere &lt;em&gt;Laufzeitumgebungen&lt;&#x2F;em&gt; ansprechen, nicht nur
mehrere UI-Frameworks, da nichts davon von einer JS-Laufzeit, einem DOM oder einer
bestimmten Plattform abhängt. Framework-Unabhängigkeit und
Laufzeitumgebungs-Unabhängigkeit erweisen sich als zwei Seiten derselben Medaille —
Logik, die wirklich nichts über die Render-Schicht weiß, läuft überall dort, wo
irgendwann eine Render-Schicht gebraucht werden könnte.&lt;&#x2F;p&gt;
&lt;p&gt;Wir haben diese Kombination als wirklich nützlich erlebt und werden weiterhin
darüber schreiben, was wir dabei lernen.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="de">
        <title>Hallo Welt!</title>
        <published>2026-07-14T00:00:00+00:00</published>
        <updated>2026-07-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bewellup.com/de/blog/hello-world/"/>
        <id>https://bewellup.com/de/blog/hello-world/</id>
        
        <content type="html" xml:base="https://bewellup.com/de/blog/hello-world/">&lt;p&gt;Dies ist der erste Beitrag im BeWellUp-Blog. Weitere Updates zu &lt;strong&gt;BWU Designer&lt;&#x2F;strong&gt; folgen
hier, während das Produkt Gestalt annimmt.&lt;&#x2F;p&gt;

&lt;div class=&quot;card bg-base-100 shadow-sm my-8&quot; id=&quot;newsletter&quot;&gt;
  &lt;div class=&quot;card-body&quot;&gt;
    &lt;h2 class=&quot;card-title&quot;&gt;Newsletter abonnieren&lt;&#x2F;h2&gt;
    &lt;p&gt;Erhalte Updates zu BWU Designer per E-Mail.&lt;&#x2F;p&gt;
    
    &lt;form
      class=&quot;flex gap-2&quot;
      action=&quot;https:&#x2F;&#x2F;buttondown.com&#x2F;api&#x2F;emails&#x2F;embed-subscribe&#x2F;bewellup&quot;
      method=&quot;post&quot;
      target=&quot;popupwindow&quot;
      onsubmit=&quot;window.open(&#x27;https:&#x2F;&#x2F;buttondown.com&#x2F;bewellup&#x27;, &#x27;popupwindow&#x27;)&quot;
    &gt;
      &lt;input
        type=&quot;email&quot;
        name=&quot;email&quot;
        required
        placeholder=&quot;Deine E-Mail-Adresse&quot;
        class=&quot;input input-bordered flex-1&quot;
      &gt;
      &lt;input type=&quot;hidden&quot; value=&quot;1&quot; name=&quot;embed&quot;&gt;
      &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&gt;Abonnieren&lt;&#x2F;button&gt;
    &lt;&#x2F;form&gt;
    
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

</content>
        
    </entry>
</feed>
