Architecture · rendered by someone else

zzop's own import graph, uncapped

Every file in this repository and every import between them — 1,329 nodes, 2,441 edges, nothing dropped. zzop emitted two NDJSON tables and rendered none of it; the drawing below is a viewer reading those tables, which is the whole point. Point the same command at your repository and you get the same two files.

zzop graph --domain dep --format cosmograph-links > links.ndjson
zzop graph --domain dep --format cosmograph-nodes > nodes.ndjson
Colour by
Size by
    The line above is what the command prints on stderr — stdout stays a parseable table. Layout is precomputed and fixed, so this picture is the same on every visit.

    Reading it

    Nodes are files, edges are imports
    Direction is importer → imported, the direction ir.dep already stores. Size is degree by default; switch it to fan-in to find what everything depends on, or fan-out to find what depends on everything.
    Left to right is the dependency direction
    A file's column is the longest chain of imports that reaches it, so the far left is what nothing in the repository imports and the far right is what everything ends up leaning on. Import cycles have no such depth — no member of a cycle sits above another — so each cycle collapses into a single column rather than being broken at an arbitrarily chosen edge. Rows group files by top-level area, which is why a domain reads as one body.
    Zoomed out you get areas, zoomed in you get files
    At a distance a dot per file is confetti, so the wide view draws one bubble per top-level area — sized by how many files it holds, with arrows carrying the import counts between areas. Zoom past that and the bubbles resolve into the files inside them. It is one drawing at two grains: the bubbles are placed from the very file positions they summarise, so nothing you see far out contradicts what you find close in.
    cases/ is deliberately grey
    It is a labelled defect benchmark — every file in it is intentionally wrong, scored against cases/EXPECTED.jsonc. It is not product code, so it recedes.
    The far-right block is the files nothing imports
    A file with no imports in either direction has no depth to measure, so putting it in a column would claim a rank the graph never gave it. There are 145 of them here, and they used to be scattered across the frame at whatever bearing the old force layout's starting spiral happened to give them — positions that looked like information and carried none. They now sit in a block of their own past the right edge, grouped by area, so their position says the only two things it honestly can: this file has no imports, and this is the area it belongs to. Nothing is hidden by the move — the census below still counts every node.
    Nothing is truncated
    The mermaid format caps this domain at 40 nodes, because a flowchart with a thousand of them is a black square that looks like information. This lane is uncapped instead, on the grounds that a viewer with zoom does the job a cap does for a drawn picture.
    Your own graph goes somewhere better than this page
    These tables are a standard shape — source/target for links, an id plus styling columns for nodes — so they load into Cosmograph, Gephi or any force-graph library without conversion. See the usage guide.