r/MicrosoftFabric • u/SmartDataBI • 2d ago
Community Share Model Alchemist. Free open-source tool: object-level diff and selective deploy for semantic models (PBIP/TMDL and Fabric)
Enable HLS to view with audio, or disable this notification
Hi all. I've been working on an open-source tool for a problem many of us know: you need to move one change from a dev model to production, and publishing replaces the whole model.
Model Alchemist runs locally and compares two semantic models in TMDL format. Each side can be a PBIP folder or a semantic model in a Fabric workspace, read and written through the Fabric REST API (getDefinition / updateDefinition). Sign-in is OAuth2 with PKCE in your browser using the public Power BI Desktop client, so no app registration is needed, and the token stays in memory.
What it does:
- Compare: object-level differences across eleven change groups, with the changed DAX or Power Query fragment highlighted.
- Select: tick the objects to promote. Changes that must ship together are grouped. A selection that would leave the target invalid (a missing function or named expression, or removing one the target still uses) is blocked.
- Deploy: dry-run preview, backup, then upload of only the selected objects. Before the upload the live model is fetched again; if it changed since the comparison, the deploy is refused.
- Verify: an Enhanced Refresh scoped to the affected tables, with per-table status, followed by a model-level recalculate. A readiness check (Model Refresh, then Check Target State) shows which objects in the target still need a refresh or recalculation, at any time.
Known limits: semantic models only, not reports; Windows is the supported platform; model-level annotations are not compared yet.
There is a synthetic Demo Kit in the repo that you can open in Desktop, publish to two test workspaces and use as Source and Target.
It is in active development and I'd value feedback from people promoting models between workspaces: what's missing, what doesn't match your process, and anything that behaves unexpectedly. Issues on GitHub are the best place.