Bravellian.Platform.Modularity 2026.2.3.1131

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

Bravellian.Platform.Modularity

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

Install

dotnet add package Bravellian.Platform.Modularity

Usage

ModuleRegistry.RegisterModule<MyModule>();

builder.Services.AddModuleServices(builder.Configuration);

builder.Services.AddSingleton<UiEngineAdapter>();
builder.Services.AddBravellianWebhooks();
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 Bravellian.Platform.Modularity:

Package Downloads
Bravellian.Platform.Modularity.AspNetCore

ASP.NET Core endpoint helpers for modular engines.

Bravellian.Platform.Modularity.Razor

Razor Pages adapter for modular UI engines.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2026.2.3.1131 106 2/3/2026
2026.2.3.387 104 2/3/2026
2026.2.3.215 98 2/3/2026
2026.2.3.196 110 2/3/2026
2026.2.2.1402 103 2/2/2026
2026.2.2.1040 103 2/2/2026
2026.2.1.1354 103 2/1/2026
2026.2.1.1297 105 2/1/2026
2026.2.1.1217 104 2/1/2026
2026.2.1.333 103 2/1/2026
2026.2.1.326 103 2/1/2026
2026.2.1.159 98 2/1/2026
2026.1.31.455 106 1/31/2026
2026.1.30.391 101 1/30/2026
2026.1.29.1054 105 1/29/2026
2026.1.28.1297 108 1/28/2026
2026.1.28.293 107 1/28/2026
2026.1.27.1127 103 1/27/2026
2026.1.27.106 103 1/27/2026
2026.1.26.1292 103 1/26/2026
Loading failed