FluxFlow.Components.State 3.0.0

There is a newer version of this package available.
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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FluxFlow.Components.State" Version="3.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FluxFlow.Components.State" Version="3.0.0" />
                    
Directory.Packages.props
<PackageReference Include="FluxFlow.Components.State" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FluxFlow.Components.State --version 3.0.0
                    
#r "nuget: FluxFlow.Components.State, 3.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FluxFlow.Components.State@3.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FluxFlow.Components.State&version=3.0.0
                    
Install as a Cake Addin
#tool nuget:?package=FluxFlow.Components.State&version=3.0.0
                    
Install as a Cake Tool

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 request InitialState or node InitialState.
  • Clear: remove the state for the key and emit a result with NewState null.

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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).