Dashboards — composable widget grids for analytics, ops, and IoT
Granit Dashboards turn a declarative DashboardDefinition into a tenant-importable
catalogue entry. The same primitive composes analytics dashboards (KPI tiles +
charts over MetricDefinition / QueryDefinition), operational dashboards
(status banners, alarm tables), and — once the IoT module ships — real-time
device dashboards.
Three-layer model
Section titled “Three-layer model”| Layer | Type | Lives in | Mutability | Persistence |
|---|---|---|---|---|
| Catalogue entry | DashboardDefinition | Granit.Dashboards.Abstractions (declarative) | Immutable — code | None — assembly only |
| Tenant-composed dashboard | Dashboard aggregate | Granit.Dashboards (runtime) | Mutable — admin actions | Granit.Dashboards.EntityFrameworkCore |
| Edit mode (frontend only) | live widget grid | @granit/react-dashboards (front) | Mutable — drag/drop | DOM, persisted via the runtime API |
Read ADR-038 for the design rationale.
Package layout
Section titled “Package layout”Directorysrc/
DirectoryGranit.Dashboards.Abstractions/ Declarative contracts (DashboardDefinition, WidgetDefinition, …)
- …
DirectoryGranit.Dashboards/ Runtime + DI registry. Future: Dashboard aggregate, real-time hub
- …
DirectoryGranit.Dashboards.EntityFrameworkCore/ Persistence layer for the Dashboard aggregate
- …
DirectoryGranit.Analytics/ Analytics-flavoured widget catalogue (Kpi, Chart, Table, Pivot)
- …
DirectoryGranit.IoT.Dashboards/ Future — IoT widget catalogue (gauges, camera feeds, alarm lights)
- …
| Package | Role | Reference from |
|---|---|---|
Granit.Dashboards.Abstractions | Pure declarations — DashboardDefinition, WidgetDefinition, layout / size / time-window / action / view / alias / filter / datasource records, registry interface, three presentation widgets (Markdown / Image / Text) | Any module that declares dashboards or widgets |
Granit.Dashboards | IDashboardDefinitionRegistry impl, AddGranitDashboards() + AddDashboardDefinition<T>() DI, IVariableSubstituter runtime | Hosts that expose dashboards |
Granit.Dashboards.EntityFrameworkCore | Persisted Dashboard aggregate + EF configurations | Hosts that persist tenant-composed dashboards |
Granit.Analytics | Kpi / Chart / Table / Pivot widget records that bind to MetricDefinition / QueryDefinition | Modules declaring analytics dashboards |
Read next
Section titled “Read next”- Conventions — declarative shape, widget catalogue, JSON wire format, localization keys
- Endpoints — REST surface: catalogue, import, list / read, edit, state transitions, widget CRUD
- ADR-038 — DashboardDefinition vs Dashboard boundary
- Analytics conventions —
MetricDefinitionnaming, period tokens, DAX alignment