You have hit a hard blocker with the new native Git integration for Canvas Apps and wanted to share detailed findings to see if others have hit this or if the product team can advise.
The issue
When committing a Canvas app to Git, the commit fails with this error:
CanvasApp has an object NativeCDSDataSourceInfo of type Employees of size ~20 MB. This exceeds the 17 MB limit and cannot be committed to source control.
Key facts:
Employees is the built‑in systemuser table in Dataverse
- We only have 6 custom columns on this table
- All other columns are system protected and cannot be removed
- We are simply referencing the table as a data source in the Canvas app
There is nothing we can change in the app to reduce the size.
When a Canvas app adds a Dataverse table, the platform serializes the entire table metadata into an internal object called NativeCDSDataSourceInfo. For system tables like systemuser, this includes:
- All system columns
- Localization labels
- Relationships to many other system tables
- Security and identity metadata
Because systemuser is central to the platform, this metadata alone is around 20 MB. The size is not affected by how many columns are used in formulas.
The native Git integration enforces an effective limit of about 17 MB for a single artifact, so the commit fails every time.
Why this is a serious ALM problem
Previously, pac canvas unpack allowed us to work around large metadata issues. That path is now deprecated, and native Git integration is positioned as the primary ALM option.
This creates a real conflict:
- Microsoft encourages native Git for Canvas Apps
- Built‑in system tables like
systemuser exceed the Git payload limit
- There is no supported alternative ALM path
This completely blocks Git‑based ALM for apps that legitimately use the Employees table.
Things that do NOT help
- Using Dataverse views
- Removing columns from formulas
- Hiding columns in views or forms
- Splitting the app
- Re‑publishing or re‑saving
All of these still serialize the full table metadata.
Only viable workaround today
The only reliable workaround we have found is:
- Create a custom proxy table with just the required fields
- Sync data from
systemuser using Power Automate
- Bind the Canvas app to the proxy table instead of
systemuser
This works, but adds operational and data‑sync overhead that should not be required for a standard scenario.
✅ If this answer helped resolve your issue, please mark it as Accepted so it can help others with the same problem.
👍 Feel free to Like the post if you found it useful.