Model-driven apps generate their UI from a data schema rather than a blank canvas. You define tables, columns, relationships and business rules in Dataverse — the app UI builds itself from that structure. Less pixel control, dramatically less time building and maintaining forms.
If you've touched Dynamics 365, you've used a model-driven app. D365 Sales, D365 Customer Service and D365 Field Service are all model-driven apps on the same Dataverse platform.
| Canvas App | Model-Driven App | |
|---|---|---|
| UI control | Complete | Generated from schema |
| Backend required | Any data source | Dataverse only |
| Complexity | Simple to medium | Medium to complex |
| Relationships | Manual setup | Native support |
| Business rules | Formulas | Declarative rules |
| Mobile | Custom layout | Auto-responsive |
Canvas apps suit simple, single-purpose tools. Model-driven apps suit applications with multiple related tables, complex forms, and business logic that needs to run consistently regardless of where data enters the system.
Everything in a model-driven app lives in Dataverse:
Business rules execute synchronously when a user interacts with a form. They set fields, show/hide columns, and enforce conditions in real time. No code, no async execution.
Power Automate flows execute asynchronously on data changes. Use them for sending emails, creating records in other systems, or running logic that doesn't need to block the user.
Use both together: business rules for UX enforcement, flows for background automation.
A model-driven app makes a natural IT asset tracker:
Asset table with columns: Name, Serial Number, Category (Choice), Assigned To (Lookup to User), Status (Choice), Purchase Date, Warranty ExpiryMaintenance Log table with a many-to-one relationship to AssetTotal build time for a working prototype: about two hours. The same thing in a canvas app would take a day and be harder to maintain.
Model-driven apps ship as part of Dataverse solutions — packaged exports containing tables, apps, flows and configurations. Deploy from Dev to Test to Prod by exporting a managed solution and importing it to the target environment. No manual config drift.