The TMSL to TMDL Switch: A CI/CD Nightmare for Microsoft Fabric

The TMSL to TMDL Switch: A CI/CD Nightmare for Microsoft Fabric

Introduction

For those of us automating Microsoft Fabric, life was good. TMSL (Tabular Model Scripting Language) used JSON, which made programmatic manipulation easy. Need to apply CI/CD? No problem! JSON’s structured format, clear syntax, and robust tooling made it a natural fit.

Then came TMDL (Tabular Model Definition Language), and with it… YAML.
Instead of sticking with JSON like the rest of Fabric, Microsoft decided to throw a curveball. But why?


1. YAML vs. JSON: Readability vs. Usability

The argument for YAML is always the same:
"It's more readable!"
"It’s cleaner and more human-friendly!"

But what about when we need to automate, diff, validate, and apply CI/CD processes? YAML is a pain:

Whitespace Hell – Forget a space? Your automation breaks.
Difficult to Parse – JSON has built-in parsers everywhere, YAML is trickier.
No Schema Enforcement – JSON has strict schemas, YAML’s structure is more flexible (too flexible).

If readability was the only goal, sure, YAML wins. But Fabric is an enterprise-grade platform—automation is a core use case!


2. Microsoft Fabric Uses JSON Everywhere… Except Here?

One of the biggest head-scratchers in this decision is that Fabric uses JSON for almost everything else, why, then, does Semantic Model automation suddenly need to be YAML-based? This breaks consistency across the platform.


3. CI/CD & Automation Just Got Harder

Before TMDL, automating Semantic Models was straightforward:

  1. Export the model as JSON
  2. Apply transformations using JSONPath (easy, structured)
  3. Push the modified file through CI/CD pipelines
  4. Deploy seamlessly

Now, with TMDL and YAML, we face new challenges:

🔴 Parsing and transforming YAML requires extra libraries
🔴 Line-sensitive formatting can break automation
🔴 No clear API support for handling YAML modifications

Unless Microsoft provides official libraries for YAML manipulation (which aren’t currently available), developers are left scrambling for workarounds.


Conclusion: A Step Backward for Automation?

While YAML might be nice for human-readable edits, it introduces huge roadblocks for automation and CI/CD in Fabric. For a platform that’s supposed to empower data professionals and developers, this feels like an unnecessary complication.