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
What IcePanel does better than most
The model is the data structure, not a side effect. Diagrams are views into it, so renaming an object updates every diagram it appears in, and the C4 levels stay consistent instead of drifting apart into four incompatible drawings.
The features around the model are unusually good for this category. Zoomable levels from system landscape down to detail. Domains, which split a large model so C4 stays usable at scale. Drafts, for designing a future state beside the current one instead of overwriting it. Flows, which overlay a data or user journey onto an existing diagram so you can show how one interaction moves through the system. Tags, for showing a different perspective to a different audience over the same model. A dependency view for the incoming and outgoing connections of a single object. Comments and read-only sharing for stakeholders. For architecture reviews, onboarding sessions, and walkthroughs, that is a strong toolkit.
If the job is to think together about a design, that toolkit is worth paying for and this page is not going to argue otherwise.
The gap: nothing in the loop reads the code
Every object in the model exists because a person put it there. There is no mechanism that compares the model to a codebase, so a service that was deleted last quarter stays in the landscape until someone notices, and a datastore that was added on Tuesday is absent until someone models it.
Enforcing C4 consistency prevents internal contradiction, which is valuable, but internal consistency and external accuracy are different properties. A model can be perfectly coherent and describe a system that no longer exists.
The practical consequence is a maintenance meeting. Someone owns the model, chases the teams, and reconciles it on a cadence. That works while the practice has energy and stops working the quarter it does not, which is exactly when the model gets used for an incident or an audit.
What generation adds
Datadef starts from the repository instead of from a modelling session. A read-only connection to GitHub, GitLab, or Azure DevOps, a branch or tag per diagram, and the generation reads a bounded set of architecture-dense files: infrastructure as code, container and orchestration files, database schemas and dbt models, API specs, CI pipelines, and manifests, with a compact tree summary for context.
Because the input is the repository, the correction loop is automatic. The daily sync regenerates the diagram and the architecture.md when the code moves, unchanged commits are skipped, and an agent can trigger a refresh through the MCP tools after a change merges. Nobody has to remember, because remembering is the part that fails.
The honest trade is expressiveness. There are no formal C4 levels, no flows overlaying a journey on a view, no tags showing one model to several audiences, and no draft state to design the future in. What you get is a current picture of what the repository declares, an editable canvas, PNG and JPEG export, and a live embed that keeps every doc showing the latest version.
Use both, deliberately
Which model objects a repository read can settle
The useful question is not whether generation replaces modelling. It is which objects in your model a machine could have checked for you, and the mapping is concrete. Deployable units come from Dockerfiles, compose files, and Kubernetes or Helm manifests. Managed datastores, queues, and networks come from infrastructure as code. Build and release paths come from CI workflows, meaning .github/workflows, .gitlab-ci.yml, and azure-pipelines.yml. The technology label on a box comes from package.json, pyproject.toml, go.mod, pom.xml, or Cargo.toml. External interfaces come from OpenAPI, protobuf, and GraphQL files.
Selection reads them in exactly that order, infrastructure first and prose last, stopping at 40 files or 250KB and truncating any file past 30KB with a visible marker. Per-class ceilings keep one loud class from taking the budget, so a repository holding two hundred dbt models cannot push the Dockerfiles out of the read. A compact summary of the top three directory levels rides along, which means the generator sees the shape of what was left out instead of assuming the sample was the whole repository.
Everything outside that list is what a modelling session is for: which system owns a capability, what the target state is, which boundaries are organizational rather than technical, and why a decision went the way it did. No amount of parsing produces those, which is the honest reason to keep a model tool rather than replace it.
FAQ
Does Datadef enforce the C4 model?
How does the diagram stay in step with the code?
Can several people work on the generated diagram together?
What does the generation actually read?
Can viewers see the diagram without an account?