Store the facts. Keep their consequences in sync.
Flower is a replicated database of source records and reactive derived values. Isolated Rust application logic defines how state changes; the database maintains the dependencies, indexes, and live query results that follow.
One coherent state
A mutation publishes source changes and their required derived values and indexes atomically. A query reads a single snapshot. A watch keeps a query’s returned value up to date as its dependencies change.
Application logic in Rust
Clients call named application methods. Rust callbacks run in isolated WebAssembly guests, while the native engine owns storage, dependency tracking, authorization, and recovery. Shared interfaces give guests and native clients typed contracts.
Work beyond the transaction
Durable timers and queues connect application state to native Rust workers. Workers handle external systems; explicit identities and fencing govern retries and the acceptance of results.
Replicated consequences
Raft replicates accepted changes and results. Followers apply those consequences without rerunning application callbacks. The engine validates tracked reads and writes before accepting a mutation.