FluxFlow.Components.Designer
6.0.0-rc.1
See the version list below for details.
dotnet add package FluxFlow.Components.Designer --version 6.0.0-rc.1
NuGet\Install-Package FluxFlow.Components.Designer -Version 6.0.0-rc.1
<PackageReference Include="FluxFlow.Components.Designer" Version="6.0.0-rc.1" />
<PackageVersion Include="FluxFlow.Components.Designer" Version="6.0.0-rc.1" />
<PackageReference Include="FluxFlow.Components.Designer" />
paket add FluxFlow.Components.Designer --version 6.0.0-rc.1
#r "nuget: FluxFlow.Components.Designer, 6.0.0-rc.1"
#:package FluxFlow.Components.Designer@6.0.0-rc.1
#addin nuget:?package=FluxFlow.Components.Designer&version=6.0.0-rc.1&prerelease
#tool nuget:?package=FluxFlow.Components.Designer&version=6.0.0-rc.1&prerelease
FluxFlow.Components.Designer
Reusable component presentation metadata and canonical application-editing
contracts for FluxFlow. The package depends on FluxFlow.Composition, but not
on FluxFlow.Engine or a rendering framework.
Registration
Use AddFluxFlowComponents() when a tool needs component catalogs without
hosting an application. Family extensions target the returned
FluxFlowRegistrationBuilder:
var services = new ServiceCollection();
services
.AddFluxFlowComponents()
.AddSources()
.AddMapping()
.AddTimers();
using var provider = services.BuildServiceProvider();
var runtimeCatalog = provider.GetRequiredService<ComponentCatalog>();
var designCatalog = provider.GetRequiredService<ComponentDesignMetadataCatalog>();
ComponentCatalog remains owned by Composition. Every designed registration
automatically contributes to the immutable ComponentDesignMetadataCatalog;
there is no terminal catalog-registration call and no second component
registry. A chain containing only
Advanced.AddDynamicComponent(...) registers only the runtime catalog.
Complete Designed Contracts
Official packages create complete ComponentContract values through
DesignedComponentContract.Create(...). One flat declaration produces the
exact runtime descriptor, typed authoring handle, and presentation metadata.
Family registration passes that same contract to AddDesignedComponent(...);
metadata inspection never activates the node factory.
public static ComponentContract<TransformHandle> Transform { get; } =
DesignedComponentContract.Create(
"sample.transform",
ConfigureTransform,
static component => new TransformHandle(component));
services.AddFluxFlowComponents()
.AddDesignedComponent(Transform);
Code-first application builders carry the contract's runtime descriptor in the built definition. JSON hosts use the family extension or the explicit designed registration above because JSON contains no executable descriptor.
Low-Level Designed Components
The retained low-level AddComponent(type, callback) path creates the runtime
descriptor and presentation metadata
from one authoritative, flat callback. The type appears once, the callback runs
immediately, and no Build, Commit, nested builder, reflection, or scanning is
involved.
There is no parallel metadata builder or option/resource metadata factory.
Registration authors use this callback; standalone tooling constructs the
immutable metadata records directly and passes them to
ComponentDesignMetadataCatalog.
builder.AddComponent("sample.transform", component =>
{
component.UseProcessing(CompositionProcessingCapabilities.Sequential);
component.WithDisplay(
displayName: "Sample Transform",
category: "Samples",
summary: "Transforms a sample value.",
iconKey: "transform",
preferredNodeName: "transform",
suggestedEditorWidth: 420);
component
.UseFactory(CreateTransform)
.HasInput(
"Input",
static node => node.Input,
displayName: "Input",
group: "Values",
order: 0,
summary: "Value to transform.",
isPrimary: true)
.HasOutput(
"Output",
static node => node.Output,
displayName: "Output",
group: "Results",
order: 0,
summary: "Transformed value.",
isPrimary: true)
.HasEvents(
"Diagnostics",
static node => node.Events,
displayName: "Diagnostics",
group: "Diagnostics",
order: 1);
component.AddOption<string>(
"expression",
kind: OptionValueKind.Expression,
displayName: "Expression",
helperText: "Expression evaluated for each input.",
isRequired: true,
section: "Mapping",
editor: OptionDesignMetadataAttributeValues.Expression);
component.AddOption<string>(
"mode",
kind: OptionValueKind.Enum,
displayName: "Mode",
defaultValue: "strict");
component.AddOptionChoice("mode", "strict", displayName: "Strict");
component.AddOptionChoice("mode", "relaxed", displayName: "Relaxed");
component.AddResource<IExpressionEngine>(
"engine",
displayName: "Engine",
order: 0,
summary: "Host-owned expression engine.",
isRequired: true,
ownership: ResourceDesignMetadataAttributeValues.HostOwned,
pickerKind: ResourceDesignMetadataAttributeValues.ExpressionEngine);
component.SetOptionAttribute("expression", "relatedResource", "engine");
component.SetPortAttribute("Input", PortDirection.Input, "accepts", "json");
component.AddAttribute("shape", "transform");
});
Root-level methods cover display information, ports, options, resources,
choices, and attributes. References to unknown options, ports, or resources
fail during registration. Duplicate names, invalid ranges, missing
factories, duplicate output/event names, and invalid metadata also fail immediately.
Event ports are explicit and may use any valid output name. They select a
FlowEvent source and publish ComponentEvent values; no event metadata is
injected implicitly and Events is not reserved.
Equivalent repeated built-in family registration is idempotent. A semantically different runtime descriptor or design registration for an existing type throws a clear conflict exception; registration never uses last-write-wins behavior.
Runtime-only dynamic components belong to FluxFlow.Composition and use the
distinct Advanced.AddDynamicComponent(...) API, so Composition-only consumers
do not need this package.
Metadata Contracts
ComponentDesignMetadatadescribes display name, category, summary, icon, preferred node name, suggested width, processing capabilities, options, resources, ports, and attributes.OptionDesignMetadatadescribes value kind, default, requiredness, helper text, numeric/duration range, choices, and editor attributes.ResourceDesignMetadatadescribes a host-owned resource slot, order, value type hint, requiredness, summary, and picker attributes.PortDesignMetadatadescribes direction, display name, grouping, order, message/value types, cardinality, primary status, and attributes.ComponentDesignMetadataCatalogis a read-only, ordered snapshot. Its public constructor accepts metadata directly for standalone tooling; normal DI registration builds it automatically from designed components.
ComponentDesignMetadataValidator validates identifiers, null collections,
duplicates, option kinds/defaults/ranges/choices, port directions and primary
ports, resource/port ordering, and attributes. Designed registration adds the
canonical processing hints and traced Events output, validates the complete
metadata, and snapshots nested collections before changing DI. Direct catalog
construction applies the same finalization, so later source mutations cannot
change the catalog.
Option And Resource Hints
Option kinds are text, number, boolean, enum, multiline text, JSON, expression,
duration, and secret. Enum options require choices. Min and Max apply to
number and duration options.
Option attributes describe sections, importance, editor kind, syntax, and related resources. Resource attributes describe ownership, picker kind, key patterns, related options, and conditional requiredness. These are neutral host hints: the host still chooses controls, supplies keyed resources, owns secrets, and controls service lifetimes.
ComponentResourcePickerHints.Create(...) returns an ordered neutral view of
host-owned picker hints. It does not enumerate, resolve, create, validate, or
dispose host resources.
Canonical Application Persistence
DesignerApplicationPersistence loads and saves the same flat
ApplicationDefinition used by Composition. It delegates JSON shape, address
resolution, and link grammar to Composition rather than maintaining a second
schema or parser.
var persistence = new DesignerApplicationPersistence(componentCatalog, metadataCatalog);
var loaded = persistence.Load(json);
var link = DesignerApplicationLink.Create(
ApplicationAddress.WorkflowPort("Orders", "Read", "Output"),
ApplicationAddress.WorkflowPort("Orders", "Validate", "Input"));
var edited = loaded.Document with
{
Links = [.. loaded.Document.Links, link]
};
var savedJson = persistence.Serialize(edited, writeIndented: true);
Loads require exact canonical component and resource identities and return
structured diagnostics for unknown values. Malformed component properties stay
raw and round-trip unchanged. Conditional link validation can use an explicitly
configured ApplicationLinkCompiler; there is no service discovery fallback.
Package Extensions
Component packages expose one normal extension over
FluxFlowRegistrationBuilder and register every designed component with
AddComponent(...):
public static FluxFlowRegistrationBuilder AddSampleTransforms(
this FluxFlowRegistrationBuilder builder)
=> builder.AddComponent("sample.transform", component =>
{
component.WithDisplay(displayName: "Sample Transform", category: "Samples");
component
.UseFactory(CreateTransform)
.HasInput("Input", static node => node.Input, displayName: "Input")
.HasOutput("Output", static node => node.Output, displayName: "Output")
.HasEvents("Events", static node => node.Events, displayName: "Events");
});
Packages remain explicit and Engine-independent. The Designer package does not execute workflows, own resources, render UI, scan assemblies, or provide global registries.
| 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.Composition (>= 7.0.0-rc.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
-
net8.0
- FluxFlow.Composition (>= 7.0.0-rc.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
NuGet packages (20)
Showing the top 5 NuGet packages that depend on FluxFlow.Components.Designer:
| Package | Downloads |
|---|---|
|
FluxFlow.Components.Mqtt.Composition
Canonical FluxFlow Composition resources and nodes for provider-neutral MQTT client control, publication, subscriptions, and client events. |
|
|
FluxFlow.Components.Projections.Composition
Canonical event-projection result registration and Designer metadata over host-owned clocks. |
|
|
FluxFlow.Components.Serialization.Composition
FluxFlow.Composition registration and Designer metadata for explicit FlowContent, JSON, text, and Base64 conversions. |
|
|
FluxFlow.Components.Observability.Composition
Typed observability registration and Designer metadata over host-owned expression, selector, context, and clock resources. |
|
|
FluxFlow.Components.FileSystem.Composition
FluxFlow.Composition registration and Designer metadata for typed file-system transforms and sources over host-owned keyed clocks. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 7.0.0-rc.1 | 231 | 9/5/2026 |
| 6.0.0-rc.1 | 299 | 8/9/2026 |
| 5.0.0 | 669 | 8/3/2026 |
| 2.17.1 | 137 | 7/3/2026 |
| 2.17.0 | 565 | 7/2/2026 |
| 2.16.0 | 623 | 7/2/2026 |
| 1.0.1 | 1,974 | 6/5/2026 |
| 1.0.0 | 273 | 6/4/2026 |
| 0.1.0-alpha.1 | 77 | 6/3/2026 |
Uses one flat designed-component registration path with automatic immutable catalogs and registration-time metadata finalization; removes competing metadata builders, factories, public declaration, mutable catalog, terminal registration, provider, fallback-resolution, and production friend surfaces.