Tool Alternatives

IcePanel alternative: a model that gets corrected by the code, not by a meeting

By the engineer who builds Datadef, from client work on data platforms · Reviewed August 21, 2026

IcePanel fixed the worst thing about architecture diagrams: it stopped treating them as drawings. One model sits behind every view, objects update everywhere at once, and the C4 hierarchy is enforced rather than suggested. That is a real advance over a stencil library. What it does not solve, and does not claim to, is whether the model still matches the software it describes.

7 min readFor architecture teams whose model is beautiful and six months behind

See it as a diagram

Everything below, as a diagram you can edit. Describe yours and see it in seconds.

146/20003 credits left
Try:

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

Model the intent where modelling pays (domains, flows, the target state) and generate the as-built view next to it. When the two disagree, that is the most useful architecture signal you will get all quarter. See documentation drift.

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?

No. It draws zones, nodes with real icons, and labelled edges generated from the repository. There are no enforced C4 levels, no domains, no tags, and no notation validation, so a team that needs conformance or several perspectives over one model should keep a modelling tool and use generation for the as-built view beside it.

How does the diagram stay in step with the code?

A daily sync re-reads the connected branch or tag and regenerates both the diagram and the architecture doc. Each run hashes the structure that feeds the diagram first, so a commit touching only a README or a test regenerates nothing at all. Manual refresh in the app and agent-triggered refresh over MCP are available at any time.

Can several people work on the generated diagram together?

Yes. Diagrams live in a shared workspace with folders and team access, so architects and engineers work on the same canvas rather than trading exported images. Anyone outside the workspace can be given the live embed instead, which renders the current diagram as an image and needs no account to read.

What does the generation actually read?

A bounded selection of the most architecture-dense files in the repository: infrastructure as code, containers and orchestration, database schemas and dbt models, API specs, CI pipelines, and manifests, plus a compact summary of the directory tree. Anything not present in those files is not drawn.

Can viewers see the diagram without an account?

Yes. A live embed is one markdown image line that renders the current diagram anywhere markdown or an image URL works, and reading it requires no account and no viewer seat. That suits READMEs, wikis, audit packs, and stakeholder pages, where most readers will never log into a diagramming tool.