AI diagram generator

AI microservices diagram generator.

The interesting question is never how many services there are, it is which ones cannot be deployed without the others.

Download for macOS
v0.1.33 · .dmg · Apple Silicon & Intel
Signed & notarized by Apple · opens without a Gatekeeper warning
sha256 698955a0187bc039f4c74f5d05a9f10fbb27376a45788a0a241d1326b73873c7
Download for Windows instead
$curl -fsSL https://lucidtrain.com/install.sh | sh
Event-driven microservices architecture. 12 components across 4 tiers.
Event-driven microservices architecture. Produced by the app's layout engine from a semantic graph, not placed by hand.

What a microservices diagram should show

Services, what each one owns, and the difference between a synchronous call and an event. That last distinction is the one that matters and the one most diagrams omit: a synchronous call is a runtime dependency that fails together, and an event is not. Drawing both as identical arrows loses the only information that predicts how the system behaves during an incident.

How Lucid Train draws one

Describe what you want, or point it at a repository. The agent emits a semantic graph of nodes and edges with no coordinates, and the ELK layout engine computes positions and orthogonal routing. That separation is the reason the output cannot come back with boxes overlapping or arrows crossing through cards, which is the characteristic failure when a language model is asked to place things on a canvas itself. It also means editing is editing the graph: change a component and the layout re-solves rather than drifting out of alignment.

Data ownership is the real boundary

The test of a service boundary is whether it owns its data. Two services sharing a database are one service with a deployment problem, and drawing the data each service owns makes that visible immediately. It is also the diagram people most resist producing, because it tends to show that the boundaries are not where the org chart says they are.

Finding the distributed monolith

A cycle of synchronous calls between services means none of them can be deployed or fail independently, which is the specific failure the architecture was adopted to avoid. Cycles are visible on the drawn graph and close to invisible when reading service code one repository at a time.

Local, offline, your models

It runs as a desktop application. Against a local Ollama model the whole thing works offline with no API key and no telemetry, which is the practical difference from every browser-based diagram tool: your architecture never leaves the machine.

Edge types worth distinguishing

EdgeWhat it implies
Synchronous callA runtime dependency: the caller fails when the callee does
Published eventNo runtime coupling; the consumer may lag
Shared databaseNot a boundary at all, whatever the diagram says
Saga stepA workflow needing compensation on failure
Read model projectionEventually consistent by construction
Batch or scheduledCoupled by data rather than by request

Try it

shell
$ Diagram these microservices. Distinguish synchronous calls from events, show which service owns which datastore, and mark any cycles.
FAQ

Questions

Can it diagram microservices across several repositories?

One at a time, then combined by describing the whole. There is no automatic discovery across repositories, since nothing in one repository reliably names the others.

Will it distinguish synchronous from asynchronous edges?

Yes, and it is worth insisting on, since it is the distinction that determines how the system degrades.

Can it help decide where to split a monolith?

It can show you the current coupling, which is the input to that decision. The decision itself depends on team structure and change frequency, neither of which is in the code.

How many services is too many for one diagram?

Past fifteen or so it stops being readable, and the answer is to draw domains at one level and expand each separately rather than to keep adding boxes.

Related