Skip to content

Dashboard Web UI

The MassTransit dashboard provides a web UI for inspecting bus topology and runtime state.

The dashboard is transport-aware and only shows features supported by the selected bus and transport:

  • Bus overview, endpoint details, and start/stop controls for Receive endpoints
  • Topics/Exchanges, Subscriptions/Bindings, and Queue topology views
  • Health status for configured buses and endpoints
  • State machine graph visualization
  • Metrics and flow visualizations when explicitly enabled

Limited support for certain transports:

  • Message inspection and requeue operations
  • Job status and recurring job information

Some capabilities depend on transport metadata support. For example, topology and message operations may vary between transports.

To use the dashboard, add the MassTransit.AspNetCore package and configure it in your ASP.NET Core application.

using MassTransit;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMassTransit(x =>
{
x.UsingRabbitMq((context, cfg) =>
{
cfg.ConfigureEndpoints(context);
});
});
builder.Services.AddMassTransitDashboard(options =>
{
options.Metrics.Enabled = true;
options.Flow.Enabled = true;
});
var app = builder.Build();
app.UseMassTransitDashboard();
app.Run();

By default, the dashboard is available at /masstransit.

PropertyDefaultDescription
BasePath”masstransit”URL base path used to host the dashboard UI and API
RequireAuthorizationfalseRequires authenticated users for dashboard access
AuthorizationPolicynullOptional ASP.NET Core authorization policy for dashboard API routes
Telemetry.ChannelCapacity50000In-memory channel capacity for dashboard telemetry events (for metrics and flow)
Metrics.EnabledfalseEnables metrics collection and metrics streaming endpoints
Metrics.WindowSeconds300Sliding window length used for metrics snapshots
Metrics.BucketSeconds5Bucket size used to aggregate metrics data
Metrics.StreamIntervalSeconds5Server-sent event (SSE) publish interval for metrics streams
Metrics.InactiveEvictionSeconds900Idle eviction timeout for metrics state
Metrics.MaxEndpointsPerBus256Maximum endpoints tracked for metrics per bus
Metrics.MaxComponentsPerBus512Maximum components tracked for metrics per bus
Metrics.MaxComponentEndpoints16Maximum endpoints linked to a single component
Flow.EnabledfalseEnables conversation flow graph snapshots and streaming
Flow.InactiveEvictionSeconds900Idle eviction timeout for flow state
Flow.MaxNodesPerBus512Maximum flow graph nodes tracked per bus
Flow.MaxEdgesPerBus2048Maximum flow graph edges tracked per bus
Flow.MaxConversationLinksPerBus10000Maximum conversation links tracked per bus
Flow.MaxEdgeMessageTypes8Maximum message types tracked per flow edge

If the dashboard should not be public, require authentication and optionally apply a policy.

builder.Services.AddAuthorization(options =>
{
options.AddPolicy("DashboardOperators", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireRole("Operations");
});
});
builder.Services.AddMassTransitDashboard(options =>
{
options.BasePath = "/ops/masstransit";
options.RequireAuthorization = true;
options.AuthorizationPolicy = "DashboardOperators";
options.Metrics.Enabled = true;
options.Flow.Enabled = true;
});
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.UseMassTransitDashboard();

When RequireAuthorization is enabled, unauthenticated requests to the dashboard base path return 401 Unauthorized.

Dashboard options can be bound using the ASP.NET Core options pattern.

{
"MassTransit": {
"Dashboard": {
"BasePath": "/masstransit",
"RequireAuthorization": true,
"AuthorizationPolicy": "DashboardOperators",
"Metrics": {
"Enabled": true,
"WindowSeconds": 300
},
"Flow": {
"Enabled": true
}
}
}
}
builder.Services.AddOptions<MassTransitDashboardOptions>()
.BindConfiguration("MassTransit:Dashboard");
builder.Services.AddMassTransitDashboard();