FluxFlow.Components.Projections 3.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package FluxFlow.Components.Projections --version 3.0.2
                    
NuGet\Install-Package FluxFlow.Components.Projections -Version 3.0.2
                    
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.Projections" Version="3.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FluxFlow.Components.Projections" Version="3.0.2" />
                    
Directory.Packages.props
<PackageReference Include="FluxFlow.Components.Projections" />
                    
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.Projections --version 3.0.2
                    
#r "nuget: FluxFlow.Components.Projections, 3.0.2"
                    
#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.Projections@3.0.2
                    
#: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.Projections&version=3.0.2
                    
Install as a Cake Addin
#tool nuget:?package=FluxFlow.Components.Projections&version=3.0.2
                    
Install as a Cake Tool

FluxFlow.Components.Projections

A standalone event-projection node for FluxFlow, built on the FluxFlow.Nodes kit. No engine required: new the node, post events, link the output.

Node

Node Shape Purpose
EventProjectionNode InputOutput, Errors, Events Folds matching events into count, latest-event, and rolling-rate snapshots.

EventProjectionNode is a FlowNode<ProjectionEvent, EventProjectionSnapshot>. Post a FlowMessage<ProjectionEvent> to Input; the node broadcasts a FlowMessage<EventProjectionSnapshot> on Output carrying the triggering event's correlation id. Errors surface on Errors (FlowError) and diagnostics on Events (FlowEvent).

Example

var node = new EventProjectionNode(new EventProjectionOptions
{
    Name = "failed-operations",
    RateWindowSeconds = 60,
    MaxPreviewChars = 256,
    Filter = new EventFilter
    {
        TypePrefix = "operation.",
        Status = "failed",
        SubjectPrefix = "orders/",
        Attributes = new Dictionary<string, string> { ["tenant"] = "north" }
    }
});

var snapshots = new BufferBlock<FlowMessage<EventProjectionSnapshot>>();
node.Output.LinkTo(snapshots, new DataflowLinkOptions { PropagateCompletion = true });

await node.Input.SendAsync(FlowMessage.Create(new ProjectionEvent
{
    Timestamp = DateTimeOffset.UtcNow,
    Type = "operation.completed",
    Source = "orders",
    Subject = "orders/42",
    Status = "failed",
    Attributes = new Dictionary<string, string> { ["tenant"] = "north" }
}));

The snapshot includes:

  • observed event count
  • matched event count
  • rolling current rate
  • first and last matched timestamps
  • latest matching event summary
  • latest payload preview with a configured length limit

EventProjectionOptions validates at construction: non-positive RateWindowSeconds or BoundedCapacity fails fast as an argument exception.

Filters

EventFilter supports:

  • event type or type prefix
  • subject prefix
  • channel prefix
  • excluded subject prefix
  • excluded channel prefix
  • status
  • source
  • source node id
  • component id through an event attribute named componentId
  • attribute key/value pairs
  • event timestamp range

Filters use ordinal string comparison.

Timing

Pass a TimeProvider to the constructor for deterministic snapshot timestamps in tests or hosts:

var node = new EventProjectionNode(options, timeProvider);

Event rate uses matching event timestamps. Snapshot timestamps use the supplied TimeProvider (defaults to TimeProvider.System).

Final snapshot

With EmitFinalSnapshot = true (and typically EmitEveryMatch = false) the node emits a single closing snapshot when the stream ends. Drain and close it via await node.CompleteWithFinalSnapshotAsync() instead of Complete(); the flush rides the ordered input pump so it lands after every event already posted.

When the node is hosted through FluxFlow.Composition, v1 runtime stop uses normal node completion. Use the direct node API when a closing final snapshot is required until composition grows an explicit final-flush lifecycle hook.

Composition

Building a workflow, reading config, creating nodes, and linking them is a separate concern from the node. This package is just the standalone node.

Use FluxFlow.Components.Projections.Composition when a FluxFlow.Composition host should register the optional event.projection factory:

services
    .AddFluxFlowComposition(configuration)
    .RegisterNodes(registry => registry.RegisterEventProjection());

The composition adapter binds EventProjectionOptions from node configuration and can resolve an optional host-owned keyed TimeProvider resource named clock. Filtering, rolling rate calculation, and final snapshot behavior remain normal node behavior controlled by EventProjectionOptions.

The optional composition package also exposes ProjectionsComponentDesignMetadataProvider for neutral Designer metadata over the event.projection composition node type. The standalone Projections package remains free of Designer, Composition, and Engine dependencies.

Boundaries

This package has no UI dependency and no concrete resource ownership. It depends only on FluxFlow.Nodes. Hosts decide how snapshots are displayed, stored, tested, or forwarded.

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 (3)

Showing the top 3 NuGet packages that depend on FluxFlow.Components.Projections:

Package Downloads
FluxFlow.Components.Expectations

Standalone projection-event expectations with typed outcomes and diagnostics.

FluxFlow.Components.Projections.Composition

Canonical event-projection result registration and Designer metadata over host-owned clocks.

FluxFlow.Components.Expectations.Composition

Canonical projection-event expectation registration and Designer metadata over exact host-owned clock addresses.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.0.0-rc.1 90 9/5/2026
7.0.0 247 8/3/2026
3.0.2 150 7/3/2026
3.0.1 240 7/2/2026
3.0.0 132 6/19/2026
2.0.0 158 6/18/2026
1.1.0 170 6/12/2026
1.0.0 140 6/4/2026
0.1.0-alpha.1 79 6/3/2026

Adds the shared FluxFlow package icon. No source, API, or dependency changes.