Incursa.Platform.Modularity 2026.3.6.320

dotnet add package Incursa.Platform.Modularity --version 2026.3.6.320
                    
NuGet\Install-Package Incursa.Platform.Modularity -Version 2026.3.6.320
                    
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="Incursa.Platform.Modularity" Version="2026.3.6.320" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Incursa.Platform.Modularity" Version="2026.3.6.320" />
                    
Directory.Packages.props
<PackageReference Include="Incursa.Platform.Modularity" />
                    
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 Incursa.Platform.Modularity --version 2026.3.6.320
                    
#r "nuget: Incursa.Platform.Modularity, 2026.3.6.320"
                    
#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 Incursa.Platform.Modularity@2026.3.6.320
                    
#: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=Incursa.Platform.Modularity&version=2026.3.6.320
                    
Install as a Cake Addin
#tool nuget:?package=Incursa.Platform.Modularity&version=2026.3.6.320
                    
Install as a Cake Tool

Incursa.Platform.Modularity

Engine-first module infrastructure for transport-agnostic UI, webhook, and background workflows.

Install

dotnet add package Incursa.Platform.Modularity

Usage

ModuleRegistry.RegisterModule<MyModule>();

builder.Services.AddModuleServices(builder.Configuration);

builder.Services.AddSingleton<UiEngineAdapter>();
builder.Services.AddIncursaWebhooks();
builder.Services.AddModuleWebhookProviders(options =>
{
    // Add one or more authenticators; all must succeed.
    options.AddModuleWebhookAuthenticator(ctx => new SignatureAuthenticator());
    options.AddModuleWebhookAuthenticator(ctx => new ActiveCustomerAuthenticator(ctx.Services));
});

builder.Services.AddSingleton<IRequiredServiceValidator, MyRequiredServiceValidator>();

Examples

Module with UI engine

public sealed class MyModule : IModuleDefinition
{
    public string Key => "my-module";
    public string DisplayName => "My Module";

    public IEnumerable<string> GetRequiredConfigurationKeys() => Array.Empty<string>();
    public IEnumerable<string> GetOptionalConfigurationKeys() => Array.Empty<string>();

    public void LoadConfiguration(IReadOnlyDictionary<string, string> required, IReadOnlyDictionary<string, string> optional)
    {
    }

    public void AddModuleServices(IServiceCollection services)
    {
        services.AddSingleton<MyUiEngine>();
    }

    public void RegisterHealthChecks(ModuleHealthCheckBuilder builder)
    {
        builder.AddCheck("my-module", () => HealthCheckResult.Healthy());
    }

    public IEnumerable<IModuleEngineDescriptor> DescribeEngines()
    {
        yield return new ModuleEngineDescriptor<IUiEngine<MyCommand, MyViewModel>>(
            Key,
            new ModuleEngineManifest(
                "ui.example",
                "1.0",
                "Example UI engine",
                EngineKind.Ui,
                Inputs: new[] { new ModuleEngineSchema("command", typeof(MyCommand)) },
                Outputs: new[] { new ModuleEngineSchema("viewModel", typeof(MyViewModel)) }),
            sp => sp.GetRequiredService<MyUiEngine>());
    }
}

Background-only module

public sealed class WorkerModule : IModuleDefinition
{
    public string Key => "worker";
    public string DisplayName => "Worker";

    public IEnumerable<string> GetRequiredConfigurationKeys() => Array.Empty<string>();
    public IEnumerable<string> GetOptionalConfigurationKeys() => Array.Empty<string>();

    public void LoadConfiguration(IReadOnlyDictionary<string, string> required, IReadOnlyDictionary<string, string> optional)
    {
    }

    public void AddModuleServices(IServiceCollection services)
    {
        services.AddHostedService<WorkerService>();
    }

    public void RegisterHealthChecks(ModuleHealthCheckBuilder builder)
    {
        builder.AddCheck("worker", () => HealthCheckResult.Healthy());
    }

    public IEnumerable<IModuleEngineDescriptor> DescribeEngines()
        => Array.Empty<IModuleEngineDescriptor>();
}

Typed UI endpoint handler

app.MapPost("/modules/{moduleKey}/ui/{engineId}", async (
    string moduleKey,
    string engineId,
    MyCommand command,
    UiEngineAdapter adapter,
    CancellationToken cancellationToken) =>
{
    var response = await adapter.ExecuteAsync<MyCommand, MyViewModel>(
        moduleKey,
        engineId,
        command,
        cancellationToken);

    return Results.Ok(response.ViewModel);
});

Documentation

Product Compatible and additional computed target framework versions.
.NET 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 (2)

Showing the top 2 NuGet packages that depend on Incursa.Platform.Modularity:

Package Downloads
Incursa.Platform.Modularity.Razor

Razor Pages integration for Incursa Platform modular UI engines.

Incursa.Platform.Modularity.AspNetCore

ASP.NET Core endpoint integrations for Incursa Platform Modularity engines.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2026.3.6.320 34 3/6/2026
2026.3.4.1093 73 3/4/2026
2026.3.1.31 98 3/1/2026
2026.2.25.334 96 2/25/2026
2026.2.24.205 96 2/24/2026
2026.2.21.28 100 2/21/2026
2026.2.21.6 97 2/21/2026
2026.2.20.1418 99 2/20/2026
2026.2.20.1356 93 2/20/2026
2026.2.20.1343 101 2/20/2026
2026.2.20.908 92 2/20/2026
2026.2.20.310 99 2/20/2026
2026.2.20.132 97 2/20/2026
2026.2.20.82 100 2/20/2026
2026.2.19.224 94 2/19/2026
2026.2.19.203 98 2/19/2026
2026.2.19.92 102 2/19/2026