FluxFlow.Components.State
3.0.0
See the version list below for details.
dotnet add package FluxFlow.Components.State --version 3.0.0
NuGet\Install-Package FluxFlow.Components.State -Version 3.0.0
<PackageReference Include="FluxFlow.Components.State" Version="3.0.0" />
<PackageVersion Include="FluxFlow.Components.State" Version="3.0.0" />
<PackageReference Include="FluxFlow.Components.State" />
paket add FluxFlow.Components.State --version 3.0.0
#r "nuget: FluxFlow.Components.State, 3.0.0"
#:package FluxFlow.Components.State@3.0.0
#addin nuget:?package=FluxFlow.Components.State&version=3.0.0
#tool nuget:?package=FluxFlow.Components.State&version=3.0.0
FluxFlow.Components.State
A standalone keyed state-reducer node for FluxFlow. It depends only on
FluxFlow.Nodes and FluxFlow.Mapping — no engine, registry, or runtime. You
new the node and LinkTo the next one.
Node
| Node | Shape | Purpose |
|---|---|---|
StateReducerNode |
Input → Output, Errors, Events |
Keeps per-key state and updates it with a reducer expression. |
Every message travels as a FlowMessage<T> envelope. The updated state snapshot
is broadcast on Output as FlowMessage<StateReducerResult> carrying the same
correlation id as the input. State updates are serial, so each key observes
deterministic, ordered changes.
await using var node = new StateReducerNode(
new StateReducerOptions
{
KeyExpression = "topic",
InitialState = new { count = 0 },
Reducer = "update-topic-state",
BoundedCapacity = 128,
MaxKeys = 1024
},
myExpressionEngine);
node.Output.LinkTo(resultSink, new DataflowLinkOptions { PropagateCompletion = false });
await node.Input.SendAsync(FlowMessage.Create(new StateReducerInput { Key = "a", Input = payload }));
The reducer (and optional key) expression is compiled once at construction via
IFlowExpressionEngine.Compile<T>(...), so parsing happens there rather than per
message. StateReducerNode consumes StateReducerInput and emits
StateReducerResult. The reducer expression receives variables for key,
input, value, state, previousState, initialState, version,
operation, and any per-message Variables.
If KeyExpression is set, it resolves the state key from the same expression
context. Otherwise the node uses StateReducerInput.Key.
Operations
StateReducerInput.Operation defaults to Reduce.
Reduce: evaluate the reducer and store the new state.Reset: store the requestInitialStateor nodeInitialState.Clear: remove the state for the key and emit a result withNewStatenull.
Behavior
Reducer, key-evaluation, and key-limit failures emit a FlowError on Errors
(carrying the input's correlation id and a Code from StateErrorCodes) and the
node keeps processing later messages. Per-operation notes
(state.reducer.updated/reset/cleared), reducer failures, and key-limit
warnings flow on the Events port (also carrying the correlation id where one is
available).
Runtime timing
StateReducerResult.UpdatedAt uses the node's clock (default
TimeProvider.System). Provide a deterministic clock for tests:
new StateReducerNode(options, myExpressionEngine, clock: new FakeTimeProvider(timestamp));
Composition Guidance
Use this package as one part of a host-composed graph. See Component Composition for recommended host boundaries, package boundaries, and extraction timing.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FluxFlow.Mapping (>= 1.0.0)
- FluxFlow.Nodes (>= 1.0.0)
-
net8.0
- FluxFlow.Mapping (>= 1.0.0)
- FluxFlow.Nodes (>= 1.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on FluxFlow.Components.State:
| Package | Downloads |
|---|---|
|
FluxFlow.Components.State.Composition
Typed JSON state-reducer registration and Designer metadata over host-owned expression and clock resources. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 7.0.0-rc.1 | 123 | 9/5/2026 |
| 6.0.0 | 194 | 8/3/2026 |
| 3.0.5 | 141 | 7/3/2026 |
| 3.0.4 | 185 | 7/2/2026 |
| 3.0.0 | 132 | 6/19/2026 |
| 2.0.0 | 150 | 6/18/2026 |
| 1.2.0 | 447 | 6/12/2026 |
| 1.1.0 | 137 | 6/5/2026 |
| 1.0.0 | 138 | 6/4/2026 |
| 0.3.0-alpha.1 | 256 | 6/2/2026 |
| 0.2.0-alpha.1 | 85 | 6/2/2026 |
| 0.1.1-alpha.1 | 88 | 6/2/2026 |
| 0.1.0-alpha.1 | 115 | 6/1/2026 |
Rebuilt as a single standalone state.reducer node over the FluxFlow.Nodes kit: a StateReducerInput in, a StateReducerResult broadcast out, reducer/key failures on the error port — all carrying the message correlation id, with per-operation notes and key-limit warnings on the events port. The reducer (and optional key) expression is compiled once at construction. The engine factory, module, registration extensions, design-metadata provider, definition-options reader, component type/port constants, and the expression-engine registry wrapper are removed; the node takes its options, an IFlowExpressionEngine, and a TimeProvider directly and depends only on FluxFlow.Nodes and FluxFlow.Mapping (runs without the engine).