FluxFlow.Nodes
1.0.0
See the version list below for details.
dotnet add package FluxFlow.Nodes --version 1.0.0
NuGet\Install-Package FluxFlow.Nodes -Version 1.0.0
<PackageReference Include="FluxFlow.Nodes" Version="1.0.0" />
<PackageVersion Include="FluxFlow.Nodes" Version="1.0.0" />
<PackageReference Include="FluxFlow.Nodes" />
paket add FluxFlow.Nodes --version 1.0.0
#r "nuget: FluxFlow.Nodes, 1.0.0"
#:package FluxFlow.Nodes@1.0.0
#addin nuget:?package=FluxFlow.Nodes&version=1.0.0
#tool nuget:?package=FluxFlow.Nodes&version=1.0.0
FluxFlow.Nodes
The minimal base every FluxFlow node is built on. A node is a self-contained TPL
Dataflow processor — you new it and link it; no engine, registry, or runtime.
Messages
Every message travels in a FlowMessage<T> envelope: a strongly-typed
CorrelationId + the Payload (plus a per-hop MessageId, Timestamp, and a
Headers bag). It's immutable, so a broadcast can hand the same instance to many
consumers. Transform the payload with With, which keeps the correlation id and
headers — so correlation flows through a graph with no node copying it by hand.
var message = FlowMessage.Create("hello"); // mints a CorrelationId
var next = message.With(message.Payload.Length); // same id, new payload
CorrelationId is a guarded value type (non-empty) and serializes as a bare JSON
string, so envelopes persist cleanly.
FlowNode<TInput, TOutput>
Derive from it and implement ProcessAsync. The base gives you four ports:
| Port | Block | Notes |
|---|---|---|
Input |
BufferBlock<FlowMessage<TInput>> |
bounded intake — SendAsync applies backpressure |
Output |
BroadcastBlock<FlowMessage<TOutput>> |
fan-out: link to as many downstream inputs as you like |
Errors |
BroadcastBlock<FlowError> |
uniform error stream (carries the message's correlation id) |
Events |
BroadcastBlock<FlowEvent> |
uniform observability stream |
public sealed class UppercaseNode : FlowNode<string, string>
{
protected override Task ProcessAsync(FlowMessage<string> message)
{
Emit(message.With(message.Payload.ToUpperInvariant()));
return Task.CompletedTask;
}
}
await using var node = new UppercaseNode();
node.Output.LinkTo(next.Input);
await node.Input.SendAsync(FlowMessage.Create("hello"));
A throw inside ProcessAsync is caught and surfaced on Errors rather than
killing the pump. Complete() drains the input and completes the outputs;
Fault(ex) tears everything down; Completion tracks the lifecycle.
Design notes
- Outputs are broadcast (latest-wins, no backpressure): a consumer that keeps up sees every message; one that falls badly behind may miss some. That is the deliberate trade for simplicity. A graph that genuinely must not drop should bridge that edge through its own bounded buffer (or a dedicated no-loss node).
- Inputs are a bounded buffer, so a node throttles its own intake.
- The kit owns no domain logic and no engine concepts — just the plumbing every node shares.
| 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
- No dependencies.
-
net8.0
- System.Threading.Tasks.Dataflow (>= 9.0.4)
NuGet packages (29)
Showing the top 5 NuGet packages that depend on FluxFlow.Nodes:
| Package | Downloads |
|---|---|
|
FluxFlow.Engine
Canonical FluxFlow application runtime assembler with transactional revisions, stable addressable ports, conditional routing, system events, and diagnostics. |
|
|
FluxFlow.Composition
Canonical FluxFlow application definitions, addressing, link compilation, component registration contracts, and keyed resource registration without depending on FluxFlow.Engine. |
|
|
FluxFlow.Components.Mqtt
Transport-neutral MQTT client orchestration and standalone FluxFlow components for commands, publish, receive, workflow acknowledgement, and client events. No engine or concrete MQTT client required. |
|
|
FluxFlow.Components.Routing
Standalone typed Window, Correlation, and Join nodes for FluxFlow, including explicit JSON specializations. |
|
|
FluxFlow.Components.Storage
Standalone logical-storage nodes with exact FlowContent operations and normal typed results over host-owned stores. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 5.0.0-rc.1 | 503 | 9/5/2026 |
| 4.0.0 | 2,090 | 8/3/2026 |
| 1.2.0 | 1,262 | 7/3/2026 |
| 1.1.2 | 1,684 | 7/2/2026 |
| 1.0.0 | 852 | 6/19/2026 |
Initial shared node kit: FlowNode<TInput, TOutput> base (buffered input, broadcast output/error/event ports) plus the FlowError and FlowEvent records. Nodes built on it run standalone, with no engine.