See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
The four layers, and what goes in each
Domain zones. One zone per domain, named after the business capability, not the source system. Four to eight zones is the readable range, and the same ceiling applies inside a zone. Datadef own Terraform pipeline enforces exactly that on generated diagrams: a zone is created for a module holding two or more nodes, and no zone is allowed past eight nodes before its tail collapses into a named supporting-resources node. Past eight domains, group them and draw the group.
Data products with their ports. Inside each zone, one node per published product, labelled with the port technology rather than the table name: orders (Snowflake table), orders (Kafka topic). Do not draw the internal staging models, they are implementation detail the reader cannot act on.
Platform band. A horizontal band under the zones listing capabilities, not vendors alone: storage, orchestration, catalog registration, access control, observability. It communicates that every domain is standing on the same floor, which is the point of the third principle.
Governance plane. A band across the top holding the global decisions: classification vocabulary, shared identifiers, naming rules, minimum quality bar, plus the policy checks that enforce them. Two or three lines, not a policy library.
The arrows are consumption, not ingestion
This is the detail that separates a mesh diagram from a warehouse diagram. Arrows run from an output port of one domain to a consuming domain, directly. Nothing routes through a central node, because there is no central node in the target architecture. If your diagram has every arrow converging on one box, you have drawn a hub and spoke and labelled it a mesh.
Label the edges with what is actually consumed, at the port level: "orders topic, daily" beats an unlabelled line. Labelled edges are also what makes the diagram reviewable, because a domain lead can point at one and say that dependency does not exist any more.
Leave off ingestion from operational systems unless the diagram is specifically about one domain. Source systems belong on a domain-level diagram, one per zone, where they are the subject rather than clutter.
Drawing it, and keeping it from going stale
Datadef generates the canvas from a description in one pass: zones for domains, nodes for products, labelled edges for consumption, and real service icons rather than grey rectangles. The registry holds 2,093 ids, 624 Azure, 438 AWS and 226 GCP among them, plus the data tools a mesh diagram actually needs: Snowflake, BigQuery, Kafka, dbt, Airflow, Databricks, Postgres. It stays editable afterwards, so a domain lead can move a product between zones without redrawing.
Keeping it true is the harder half. Connect the repositories that describe the mesh, the dbt project or the Terraform that provisions each domain account, with read-only access on GitHub, GitLab, or Azure DevOps, choose the branch or tag, and the diagram plus its architecture.md regenerate on a daily sync. A node dragged more than twelve pixels from where the previous sync left it is recorded as hand-placed and restored after the redraw, so a re-sync updates the picture rather than reshuffling it. A sync whose parsed structure hashes to the same fingerprint as the previous run stops before generation, so a commit that only reworded a description produces no new picture.
Declaring domain and owner in the model metadata makes the grouping explicit for every reader downstream, and it is worth doing regardless of tooling.
# dbt: make the domain boundary explicit in the project itself
models:
- name: orders_fct
description: Orders published by the checkout domain.
meta:
domain: checkout
data_product: orders
owner: [email protected]
output_ports:
- snowflake://analytics/checkout/orders_fct
- kafka://checkout.orders.v2
contract: contracts/checkout/orders.odcs.yamlWhere the diagram has to live
A mesh diagram that lives in a slide deck is consulted twice and then forgotten. Put it where the decisions happen: one markdown line renders it as a live embed in the platform README, a Notion page, or a Confluence space, and the image follows the canvas, so the version people see is the current one. Readers need no account.
For the export path, PNG and JPEG are available from the canvas when a static copy is needed for a review pack. Export it last, from the same canvas the embed points at, so the file in the pack and the live picture cannot disagree.
One page per audience
FAQ
What should a data mesh architecture diagram show?
How is a data mesh diagram different from a data warehouse diagram?
How many domains can you fit on one mesh diagram?
Should individual tables appear on the mesh diagram?
How do you keep a mesh diagram current as domains change?