DotNetBrightener.Mapper.Dashboard
2026.0.2
See the version list below for details.
dotnet add package DotNetBrightener.Mapper.Dashboard --version 2026.0.2
NuGet\Install-Package DotNetBrightener.Mapper.Dashboard -Version 2026.0.2
<PackageReference Include="DotNetBrightener.Mapper.Dashboard" Version="2026.0.2" />
<PackageVersion Include="DotNetBrightener.Mapper.Dashboard" Version="2026.0.2" />
<PackageReference Include="DotNetBrightener.Mapper.Dashboard" />
paket add DotNetBrightener.Mapper.Dashboard --version 2026.0.2
#r "nuget: DotNetBrightener.Mapper.Dashboard, 2026.0.2"
#:package DotNetBrightener.Mapper.Dashboard@2026.0.2
#addin nuget:?package=DotNetBrightener.Mapper.Dashboard&version=2026.0.2
#tool nuget:?package=DotNetBrightener.Mapper.Dashboard&version=2026.0.2
DotNetBrightener.Mapper.Dashboard
Copyright © 2017 - 2026 Vampire Coder (formerly DotnetBrightener)
Interactive web dashboard that auto-discovers and visualizes every [MappingTarget<T>] usage in your ASP.NET Core app. Think of it as a Swagger UI, but for your compile-time object mappings instead of HTTP endpoints.
Why?
When a project accumulates dozens of source entities mapped to many DTOs, it gets hard to track which properties are included, excluded, renamed, or nested. This dashboard gives you a single page to inspect all of that at a glance — no XML docs or code navigation needed.
Install
dotnet add package DotNetBrightener.Mapper.Dashboard
Get Running in 30 Seconds
// Program.cs
using DotNetBrightener.Mapper.Dashboard;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDotNetBrightenerMapperDashboard();
var app = builder.Build();
app.MapDotNetBrightenerMapperDashboard();
app.Run();
Fire up the app and open https://localhost:5001/dnb-mapper.
What You See
| Section | Details |
|---|---|
| Source type cards | Expandable cards per source entity — click to reveal properties and all targets |
| Source properties | Name, friendly type (int?, List<T>), modifiers (Nullable, Required, Init, Collection) |
| Target cards | Each [MappingTarget] DTO: type kind, feature flags, excluded/included props, member count |
| Feature badges | Green check / red X for Constructor, Projection, ToSource |
| Search bar | Filter by source or target name |
| Dark mode | Follows your OS setting unless overridden |
Tweaking the Defaults
builder.Services.AddDotNetBrightenerMapperDashboard(options =>
{
// Where the dashboard lives (default: "/dnb-mapper")
options.RoutePrefix = "/mapper-inspector";
// Page title shown in the browser tab
options.Title = "Acme Corp — Mapping Inspector";
// Brand color for headings and badges
options.AccentColor = "#0ea5e9"; // sky blue
// Force dark mode on first load (default: follows OS)
options.DefaultDarkMode = true;
// Turn off the JSON API if you only need the HTML view
options.EnableJsonApi = false;
});
Lock It Behind Auth
builder.Services.AddDotNetBrightenerMapperDashboard(options =>
{
options.RequireAuthentication = true;
options.AuthenticationPolicy = "AdminOnly"; // ties into your existing policy
});
Scan Extra Assemblies
The dashboard auto-scans the entry assembly + its references. Point it at more:
builder.Services.AddDotNetBrightenerMapperDashboard(options =>
{
options.AdditionalAssemblies.Add(typeof(ExternalDto).Assembly);
});
Include System Assemblies
Off by default to keep things fast. Flip it on if you map from Microsoft.* / System.* types:
builder.Services.AddDotNetBrightenerMapperDashboard(options =>
{
options.IncludeSystemAssemblies = true;
});
HTTP Endpoints
| URL | What it returns |
|---|---|
GET /dnb-mapper |
Full HTML dashboard |
GET /dnb-mapper/api/dnb-mapping-types |
Machine-readable JSON of every discovered mapping |
JSON API Shape
A quick taste — the real response includes every source member and target member:
[
{
"sourceTypeName": "MyApp.Models.User",
"sourceTypeSimpleName": "User",
"sourceTypeNamespace": "MyApp.Models",
"sourceMembers": [
{ "name": "Id", "typeName": "int", "isNullable": false, "isRequired": false, "isCollection": false }
],
"targets": [
{
"targetTypeName": "MyApp.DTOs.UserDto",
"targetTypeSimpleName": "UserDto",
"typeKind": "record",
"hasConstructor": true,
"hasProjection": true,
"hasToSource": false,
"excludedProperties": ["PasswordHash"],
"members": [
{ "name": "Id", "typeName": "int", "isNullable": false, "isInitOnly": true }
]
}
]
}
]
Real-World Example
// Entity
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public List<Order> Orders { get; set; }
}
// Full DTO minus the hash
[MappingTarget<User>(nameof(User.PasswordHash))]
public partial record UserDto;
// Minimal DTO for dropdowns / lists
[MappingTarget<User>(Include = new[] { nameof(User.Id), nameof(User.Name) })]
public partial record UserSummaryDto;
Open the dashboard and you'll see the User card with both targets: UserDto (4 members, PasswordHash excluded) and UserSummaryDto (2 members, Id + Name only).
Requirements
- .NET 10.0+ with ASP.NET Core
- A project that references
DotNetBrightener.Mapper(the source generator)
Ecosystem
| Package | Purpose |
|---|---|
| DotNetBrightener.Mapper | Roslyn source generator — produces the mapping code at compile time |
| DotNetBrightener.Mapper.Attributes | [MappingTarget<T>], [MapFrom], [GenerateDtos] — the attributes the generator reads |
| DotNetBrightener.Mapper.Mapping | Runtime helpers — .ToTarget(), .SelectTargets(), .ToSource() extension methods |
| DotNetBrightener.Mapper.Mapping.EFCore | EF Core integration — use generated projections in LINQ queries |
| Product | Versions 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. |
-
net10.0
- DotNetBrightener.Mapper.Attributes (>= 2026.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.0.3-preview-777 | 85 | 5/20/2026 |
| 2026.0.3-preview-773 | 95 | 4/24/2026 |
| 2026.0.3-preview-772 | 100 | 4/3/2026 |
| 2026.0.3-preview-770 | 96 | 4/2/2026 |
| 2026.0.3-preview-769 | 97 | 4/2/2026 |
| 2026.0.2 | 106 | 4/2/2026 |
| 2026.0.2-preview-v2026-0-1-755 | 95 | 3/27/2026 |
| 2026.0.2-preview-759 | 93 | 4/1/2026 |
| 2026.0.2-preview-758 | 97 | 3/29/2026 |
| 2026.0.2-preview-757 | 103 | 3/29/2026 |
| 2026.0.2-preview-756 | 102 | 3/27/2026 |
| 2026.0.2-preview-754 | 89 | 3/27/2026 |
| 2026.0.1 | 100 | 3/27/2026 |
| 2026.0.1-preview-752 | 98 | 3/26/2026 |
| 2026.0.1-preview-750 | 99 | 3/26/2026 |
| 2026.0.1-preview-749 | 102 | 3/25/2026 |
| 2026.0.1-preview-748 | 100 | 3/23/2026 |
| 2026.0.1-preview-742 | 95 | 3/22/2026 |