![]() |
VOOZH | about |
dotnet add package ExperimentFramework.Dashboard --version 0.23.4
NuGet\Install-Package ExperimentFramework.Dashboard -Version 0.23.4
<PackageReference Include="ExperimentFramework.Dashboard" Version="0.23.4" />
<PackageVersion Include="ExperimentFramework.Dashboard" Version="0.23.4" />Directory.Packages.props
<PackageReference Include="ExperimentFramework.Dashboard" />Project file
paket add ExperimentFramework.Dashboard --version 0.23.4
#r "nuget: ExperimentFramework.Dashboard, 0.23.4"
#:package ExperimentFramework.Dashboard@0.23.4
#addin nuget:?package=ExperimentFramework.Dashboard&version=0.23.4Install as a Cake Addin
#tool nuget:?package=ExperimentFramework.Dashboard&version=0.23.4Install as a Cake Tool
Enterprise-grade, embeddable web dashboard for managing A/B tests, feature flags, and experiments in .NET applications.
ITenantResolverdotnet add package ExperimentFramework.Dashboard
using ExperimentFramework.Dashboard;
var builder = WebApplication.CreateBuilder(args);
// Configure dashboard
builder.Services.AddExperimentDashboard(options =>
{
options.PathBase = "/dashboard";
options.Title = "My Experiments";
options.EnableAnalytics = true;
options.EnableGovernanceUI = true;
});
var app = builder.Build();
// Map dashboard at /dashboard
app.MapExperimentDashboard("/dashboard");
app.Run();
Navigate to https://localhost:5001/dashboard to access the dashboard.
builder.Services.AddExperimentDashboard(options =>
{
// Basic settings
options.PathBase = "/dashboard";
options.Title = "Experiment Dashboard";
options.ItemsPerPage = 25;
// Features
options.EnableAnalytics = true;
options.EnableGovernanceUI = true;
// Authorization
options.RequireAuthorization = true;
options.AuthorizationPolicy = "DashboardAccess";
// Multi-tenancy
options.TenantResolver = new HttpHeaderTenantResolver("X-Tenant-Id");
});
Configure tenant resolution using built-in or custom resolvers:
// HTTP Header
options.TenantResolver = new HttpHeaderTenantResolver("X-Tenant-Id");
// Subdomain
options.TenantResolver = new SubdomainTenantResolver();
// Claims
options.TenantResolver = new ClaimTenantResolver("tenant_id");
// Composite (try multiple strategies)
options.TenantResolver = new CompositeTenantResolver(
new ClaimTenantResolver("tenant_id"),
new HttpHeaderTenantResolver("X-Tenant-Id")
);
The dashboard delegates authorization to your existing ASP.NET Core setup:
// Configure authorization
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("DashboardAccess", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireRole("Admin", "Experimenter");
});
});
// Enable in dashboard
builder.Services.AddExperimentDashboard(options =>
{
options.RequireAuthorization = true;
options.AuthorizationPolicy = "DashboardAccess";
});
// Use authentication middleware
app.UseAuthentication();
app.UseAuthorization();
public class CustomTenantResolver : ITenantResolver
{
public Task<TenantContext?> ResolveAsync(HttpContext context)
{
// Your custom logic
var tenantId = /* ... */;
return Task.FromResult(new TenantContext
{
TenantId = tenantId,
DisplayName = "My Tenant",
Environment = "Production"
});
}
}
public class CustomDataProvider : IDashboardDataProvider
{
public Task<IEnumerable<ExperimentInfo>> GetExperimentsAsync(
string? tenantId,
CancellationToken ct = default)
{
// Your custom data access logic
}
}
// Register
builder.Services.AddSingleton<IDashboardDataProvider, CustomDataProvider>();
The dashboard exposes REST APIs at /dashboard/api:
GET /api/experiments - List all experimentsGET /api/experiments/{name} - Get experiment detailsPOST /api/experiments/{name}/toggle - Toggle experiment active stateGET /api/configuration/yaml - Export configuration as YAMLGET /api/governance/{name}/state - Get governance stateGET /api/analytics/{name}/statistics - Get statistical analysisGET /api/rollout/{name}/stages - Get rollout stagesGET /api/targeting/{name}/rules - Get targeting rulesMIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.