Migration and versioning
HyperPBI dashboard schema 2.0 is the only active authoring and rendering contract. Production code rejects dashboard schema 1.0 and missing versions; it never silently infers or migrates a dashboard version.
The dashboard schema version is separate from:
- the PBIVIZ/package version in
pbiviz.jsonandpackage.json - the Runtime Config protocol version used by the visual settings JSON
- the
hyperpbi-changeenvelope protocol version used for bounded AI edit operations
Those independent protocols may have their own version numbers without changing the dashboard schema contract.
Canonical dashboard schema 2.0
Every dashboard starts with an explicit root:
{
"version": "2.0",
"components": []
}
Schema 2.0 requires globally unique stable component IDs, rejects unknown properties, resolves Field Manifest aliases or canonical field keys, and supports named datasets, definitions, application patterns, responsive rules, calculations, maps, tables, charts, SVG, interactions, UI actions, and security sanitization.
Removed production compatibility paths
The visual, editor, preparation pipeline, renderer, AI importer, preview/save flow, and shared playground-facing runtime do not import or call a schema 1.0 migrator. The production field resolver does not translate display names or old normalized field keys.
The following schema 1.0-only forms were removed from the active contract:
- component type aliases
drawerandfilterDrawer; useoffcanvas - component type alias
stepper; usestepsfor workflow progress orcollapsiblefor collapsible content tabs[].componentsandtabs[].content; usetabs[].children- top-level accordion
children; useitems[].children - component flags
internal,external, and tableselectable; useinteraction - table top-level
selectionMode; useinteraction.internalMode,interaction.selectionMode, andinteraction.internalScope - button/button-group
actionandactionValue; useuiAction - table
engine, including"tabulator"; the canonical table is native - implicit map
settings, map-specific legacystyle, top-levelpopup, and maps without explicitlayers - map feature-details mode
legacyPopup - map performance properties
generalizeByZoom,minimumGeneralization,maximumGeneralization, andprogressiveRendering - map binding compatibility fields
legacyCompatibility,runtimeBindings,__color__, and__size__ - obsolete interaction-looking inputs such as
selectionTarget,externalSelection,crossFilter, andpowerBISelectionin dashboard JSON - display-name and legacy normalized-key field-reference migration
Canonical schema 2.0 components that also existed historically remain supported under their documented 2.0 properties.
Standalone development converter
Use the temporary converter only during development:
npm run schema:migrate-v1 -- old-dashboard.json converted-dashboard.json
The converter:
- requires an input and output JSON path
- accepts a supported dashboard schema 1.0 file
- creates stable IDs and converts known compatibility forms
- validates the result with the strict schema 2.0 validator
- exits nonzero with actionable diagnostics when conversion is ambiguous or invalid
- refuses to overwrite the input unless
--overwrite-inputis explicitly passed to the underlying Node script
The converter lives at scripts/migrate-schema-v1-to-v2.mjs. It is not imported by production source, included in the src/visual.ts dependency graph, or packaged in PBIVIZ archives.
Field mappings and business aggregations are never guessed merely to satisfy validation. Review converted interactions, fields, map bindings, and output before replacing a production dashboard.
Map compatibility after the analytical expansion
Existing 2.0 Power BI and ArcGIS map layers, popup/tooltip/label definitions, joins, clusters,
rectangle/lasso tools, and interaction policies remain supported. Legacy
toolbar.rectangleSelection/toolbar.lassoSelection still enable the corresponding tool; new
specifications should author structured tools definitions.
Existing renderer.type: "heatmap" specifications now render real weighted canvas intensity
instead of bounded point-symbol fallback. Set interactivePoints: true when selection of heat source
records is required. Heat pixels themselves are not selectable. New fields and runtime behavior are
listed in the July 2026 map release note.
Package commands for maintainers
npm run package:core
npm run package:maps
npm run package:verify
Maps defaults to the broad artifact label with Power BI-compatible built-in host declarations. Set HYPERPBI_ALLOW_ALL_MAP_HOSTS=false for the restricted artifact label, and set HYPERPBI_MAP_HOSTS to include custom exact hosts or real-domain subdomain wildcards. See Map services and Security.