xrmverse compared with Dataverse
The comparison refers to the product once the roadmap is complete (phases 1–4).
Same as Dataverse
Web API and SDK, metadata, FetchXML/OData, plugins and pipeline, security (roles, BUs, teams, sharing, field and hierarchy security, access teams), managed and unmanaged solutions, auditing, file, image, calculated, rollup and formula columns, currencies, activities and notes, classic workflows, duplicate detection, change tracking, Custom APIs, webhooks, a read-only SQL (TDS) endpoint (with the differences below), existing Model-driven apps.
Works differently
| Aspect | Dataverse | xrmverse |
|---|---|---|
| Where it runs | Microsoft cloud, multi-tenant | Your servers or your cloud, one process per environment |
| Database | Managed Azure SQL, no direct access | SQL Server (and PostgreSQL in phase 2), direct access |
| Identity | Entra ID only | Entra ID or the server's own identity provider (see Local identity provider) |
Power Platform CLI (pac) |
Signs in with Entra | Works with Entra mode; not supported with the local IdP (it hard-codes Microsoft's authorities): use xrmd solution import/export |
| Scalability and high availability | Managed by Microsoft | Depend on your infrastructure |
| Files | Managed Azure Blob | File system or S3-compatible storage |
| Bulk messages | CreateMultiple / UpdateMultiple are events on standard tables, Upsert / UpsertMultiple are not; all-or-nothing on standard tables, partial success on elastic ones; the pipelines of single and bulk messages merge |
Same model on standard tables (more tables than Dataverse offers them on); inner execution depth, step order and rank ties are our reading of the docs; steps on *Multiple of an elastic table are refused; Upsert and PATCH as upsert on standard tables; asynchronous payloads and image reads grow with the bulk (see Bulk operations) |
| Elastic tables | Cosmos DB | Emulated on SQL: ids stay unique across partitions, writes commit per stage (nested ones join the outer transaction), bulk messages run one pipeline per record with partial success, basic JSON queries with ExecuteCosmosSqlQuery, no solution export yet (see Elastic tables) |
| UI | Microsoft's Unified Interface | xrmverse renderer: faithful for the supported Client API, not pixel-identical |
| Change tracking | audit is tracked |
audit, intersect tables and some system tables cannot be tracked; paging cookie and skip token are xrmverse's own (see Change tracking) |
| Classic workflows | Authored in the designer; XAML run by Windows Workflow Foundation; workflow log; Form-scope business rules; XAML actions on the Web API; custom activities on .NET Framework in a sandbox | Imported by solution, or written as YAML with xrmd workflow apply (see Workflow authoring as code); XAML read by xrmverse's own interpreter, which runs the designer's steps and fails explicitly on anything else; no workflowlog, only the job row; Entity-scope business rules only; XAML actions through the SDK and SOAP only; no Pause/Resume; custom activities run on .NET through CoreWF with the workflow SDK you install, in the server process (see Classic workflows) |
| Duplicate detection | Rules are solution components; default rules for some tables; operator "Exact Match (Pick List Label)"; email and recurring bulk jobs; Compound* messages; matchcode length limit |
Rules are not carried by solutions; no default rules; operator 5 is refused; no email, no recurrence, bulk jobs stop at 5000 duplicaterecord rows; no Compound* messages; match codes are SHA-256 hashes; the import and offline switches are stored and do nothing (see Duplicate detection) |
| Glossary and synonyms | Knowledge source, synonym and glossary tables, used by agents built in Copilot Studio, which need Dataverse search to be on (see Learn); in solutions | The same five tables with the Dataverse names and lookups, read by MCP only. Columns left out: appid, appmoduleid, appmoduleuniquename, apptype, connectionreference, knowledgeconfig, knowledgesourceconsumerid, knowledgesourceprofileid, m365appmoduleid, m365appmoduleidsecondary, entity, unstructuredfilesearchentityid, attribute, isattributeenabledforvectorsearch; object type codes are xrmverse's own; not solution components, an import logs a warning (see Glossary and synonyms) |
| Currencies | Names and symbols of System currencies are filled in; precision up to 10 in the column; per-user number formats | Name and symbol are required; precision 0 to 4; en-US formatting only; the ISO list and a few error codes are xrmverse's own reading (see Currencies) |
| Activities and notes | Sends email through a mailbox; queues, recurring appointments and email attachments; chunked note attachments | SendEmail only changes the email's state until plan 4.1, and only the caller can be the sender; activitypointer is a stored copy; queues, recurrence, templates and email attachments are refused; note bodies in one piece, up to 128 MB (see Activities and notes) |
| SQL endpoint: sign-in | Microsoft Entra only | Local identity provider only, with a SQL login (user name and password): the opposite. Entra organizations have no SQL endpoint for now; a token login is refused with error 18456. Users with TOTP are refused, a disabled user or a user without roles cannot connect, and lockout is shared with web sign-in (see SQL endpoint). SSMS "Microsoft Entra MFA" and the Power BI Dataverse connector, which sign in with Entra, are expected not to work: a token login that reaches the endpoint is refused with 18456 (not yet verified with these clients, see the checklist); use the Power BI SQL Server connector |
| SQL endpoint: SQL | A read-only T-SQL subset (see Microsoft's documentation for its limits) | The subset the query engine can express: SELECT with TOP, DISTINCT, INNER/LEFT JOIN on a lookup, WHERE, ORDER BY, GROUP BY with the aggregates, sp_executesql. No subqueries, UNION, HAVING, OFFSET, scalar functions in the select list, CAST, CASE, APPLY; anything else is refused with error 40000. SET options are ignored (SET FMTONLY ON is refused) and sys.* views are not available |
| SQL endpoint: columns | Lookup, choice and similar columns with their name and label companions; file, image, multiselect choice, party list and virtual columns are refused | Same shape: the id or integer, plus <column>name for the name or label. File, image, multiple-choice, party list and virtual columns give Invalid column name. * leaves out secured columns the user cannot read |
| SQL endpoint: size and port | 5 minute limit; port 1433 or 5558 | Results are buffered: at most 50000 rows by default (Tds:MaxRows), never partial, 5 minute limit. One port per organization, which you choose (--tds-port). TLS is required (Encrypt=True); Encrypt=Strict (TDS 8) is not supported |
| SQL endpoint: plug-ins | Reads do not trigger plug-ins | Same: no plug-in runs on SQL reads |
| SQL deadlock and timeout | A deadlock victim or a SQL timeout comes back as the SQL error codes 0x80044150 and 0x80044151 (web service error codes) |
Same codes, HTTP 500, on the Web API, the SOAP endpoint and inside a plug-in's organization service call (the plug-in gets a FaultException<OrganizationServiceFault>, and the transaction is doomed as for any failed nested call). The server never retries by itself: the request was rolled back and pre-validation plug-ins have already run outside the transaction, so a retry would run them twice. The caller retries |
| Custom API authoring | Created in the maker portal, the Plug-in Registration Tool, or by solution; a customizable managed API can be changed; deep insert of the fields | Created over the SDK, SOAP, the Web API or xrmd customapi create, one Create per API, parameter and property; no deep insert; no iscustomizable column; a managed API is never changed in place; Delete is refused while a step is registered; the prefix may be that of any existing publisher; the rules follow Learn and are not verified against Dataverse (see Custom APIs) |
| Webhooks | Webhooks and Azure Service Bus and Event Hub endpoints, in solutions; the auth value is encrypted; x-ms-dynamics-organization is the domain name |
Webhooks only (contract 8), registered per organization, never in a solution; the auth value is stored unencrypted in the organization database and never returned; the header carries the organization name; a failed delivery is 500 0x80040224, and async jobs retry with the queue's backoff (see Webhooks) |
| Updates, support, compliance | Microsoft | Whoever runs the installation |
Not in xrmverse
Power Automate and the Dataverse connector, canvas apps and custom pages, Business Process Flows, editable grids, the offline mobile app, Copilot and AI Builder in Power Apps, virtual tables, Dataverse search (relevance search, vector search), Power Pages, multiple organizations in one process, position hierarchy.