FluxFlow.Composition 6.0.0

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

FluxFlow.Composition

Canonical application definitions, explicit component registration, addressing, validation, link compilation, and code-first runtime ownership. The package is Engine-independent.

Application Shape

{
  "Resources": {},
  "Workflows": {
    "Orders": {
      "Receive": { "Type": "source" },
      "Handle": {
        "Type": "handler",
        "Input": "Receive.Output"
      }
    }
  }
}

Resources, workflows, and components are named by object keys. Components are flat; there are no maintained Composition, Nodes, or root Links wrappers. Addresses are ordinal and case-sensitive. Links support fan-in, fan-out, conditions, cross-workflow addresses, and explicit bounded signal feedback. Ordinary data-processing cycles are rejected.

Code-First Authoring

The canonical builders support either direct handle capture or chain-first capture without introducing another model:

var application = new ApplicationDefinitionBuilder()
    .AddResourceGroup("Messaging", out var messaging)
    .AddWorkflow("Orders", out var orders);

messaging.AddResource<object>("Client", "host.external", out var client);

orders
    .AddComponent("Source", "orders.source", out var source)
    .AddComponent("Sink", "orders.sink", out var sink)
    .Connect(
        source.Output<int>("Output"),
        sink.Input<int>("Input"));

var definition = application.Build();

Each fluent add delegates to the corresponding handle-returning method, captures the committed typed handle, and returns the same parent builder. Handles remain ordinary definition references. Component order does not imply topology: links stay explicit, workflow links stay local, resource groups stay resource-only, and Build() returns and freezes the same immutable ApplicationDefinition used by JSON configuration.

ApplicationLinkCompiler owns parsing, address resolution, validation, normalization, and deterministic ordering. Its result exposes executable Links plus resolved Declarations for persistence. Serialize edited ApplicationLinkDeclarationProjection values with ApplicationLinkCompiler.SerializeDeclarations(...) so hosts and Designer use the same exact Port / Condition grammar. Composition grants no production friend access to Designer or Engine.

ComponentDescriptor declares one canonical type, typed FlowMessage<T> ports, link cardinality, processing capabilities, and an activation delegate. Author runtime-only descriptors through the flat AddRuntimeComponent(...) callback. DI builds one immutable ComponentCatalog; application validation, link compilation, Engine activation, and Designer metadata all consume that catalog. Errors travel on normal outputs. Application revisions own component and link lifecycle but do not own external resources supplied by the host.

services.AddFluxFlowComponents().AddRuntimeComponent(
    "orders.handle",
    component =>
    {
        component.UseFactory(CreateHandlerAsync);
        component.AddInput<Order>("Input");
        component.AddOutput<OrderResult>("Output");
    });

Composition adapters that materialize application resources implement IApplicationResourceRegistrar. Its context exposes the complete definition, revision identity, host services, and revision-owned IServiceCollection. Canonical keyed DI helpers live in FluxFlow.Composition.DependencyInjection; Engine consumes these low-level contracts without making adapters depend on a hosting package.

Canonical workflow JSON selects an optional semantic Processing profile. Composition maps that profile centrally to capacity, parallelism, and ordering. Direct C# callers may still provide the technical options explicitly; those compatibility settings are not primary workflow or Designer concepts.

ApplicationRuntime waits for all upstreams before completing a shared input, faults fan-in once on the first upstream fault, and attempts all cleanup before aggregating teardown failures.

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

Showing the top 5 NuGet packages that depend on FluxFlow.Composition:

Package Downloads
FluxFlow.Engine

Canonical FluxFlow application runtime assembler with transactional revisions, stable addressable ports, conditional routing, system events, and diagnostics.

FluxFlow.Components.Designer

Reusable component metadata and canonical application editing contracts for FluxFlow.

FluxFlow.Composition.Hosting

Optional hosting bridge for FluxFlow.Composition that builds standalone compositions from DI/configuration, starts them with host lifecycle, and resolves adapter-owned keyed resources.

FluxFlow.Fluent

Type-safe, code-first fluent DSL for composing FluxFlow standalone nodes into a runnable graph — Flow.From(source).Then(node).To(sink) with compile-time-checked wiring, branching, and fan-in. Reuses the FluxFlow.Composition runtime.

FluxFlow.Components.Mqtt.Composition

Canonical FluxFlow Composition resources and nodes for provider-neutral MQTT client control, publication, subscriptions, and client events.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
7.0.0-rc.1 295 8/9/2026
6.0.0 890 8/3/2026
1.2.0 204 7/3/2026
1.1.0 546 7/3/2026
1.0.9 626 7/2/2026

Requires canonical definitions and exact identities; adds canonical link declaration projections and serialization; removes production friend access.