Structural

Topology Graph

Reveal every package and real usage relationship as a navigable directed graph. This is the default lens and the place to start when you need to understand structure.

The Topology Graph is the default lens and the place to start an architecture investigation. It can reveal every package in your project as a node and every real usage relationship as a directed edge. An arrow from A to B means code in A uses code from B.

Current Focus lets you take that complete model one area at a time. Inline expansion, filters, and view exclusions shape the working graph around the question you are asking without redefining the underlying dependency evidence.

Screenshot: readable Topology Graph expansion with directed package edges, cycle emphasis, breadcrumb, and Cycles count visible
Start with the whole structural question. Capture the default survey before pinning, cycle focus, filters, or Heatmap reframe it.

Reading the graph

Cycles are analyzed findings, not an optional metric overlay. AtlasArc marks cycle participation in the structural graph, while the Cycles section lets you select a group, inspect its members and loop-forming edges, and move between groups. Heatmap is the separate optional overlay: it adds metric colour without changing the dependency structure.

Beyond cycles, you can:

  • Select a package to highlight its direct dependencies and dependents while its evidence opens in the right sidebar; clear the selection on the canvas to return to the wider read
  • Expand packages inline to reveal subpackages without leaving the graph
  • Open one visible package or source folder into classes or files when you need the implementation evidence inside it
  • Filter by coupling strength to cut visual noise on large projects and keep the tightly coupled pairs in view
  • Apply Heatmap colouring so topology and a selected metric can answer one question together
  • Right-click a package to Set as Root, pin it as a structural subject in Graph or Matrix, reveal it in Project View, or navigate to its source evidence in the IDE

Package Internals

Package internals stay contained. A Java or Kotlin package opens into classes; a TypeScript source folder opens into files. Same-owner edges can expose a local tangle, while external dependencies still connect the owning packages or source folders. Opening internals does not turn classes or files into peer architecture units in the other lenses.

Screenshot: one open package containing class or file nodes and a same-owner implementation tangle while external edges still terminate on owner packages
Implementation evidence stays inside its owner. Include the synthetic internals group or boundary treatment so contained nodes cannot be mistaken for peer packages.

Pinned Subject Controls

When a package is pinned, the graph becomes one subject-centred structural read. The toolbar adds Direction, Neighbour links, and Mute cycles controls so you can move between a local blast-radius picture and a cleaner ingress/egress interface without starting over. The structural breadcrumb above the graph moves the pin to an ancestor when the audit needs a wider subject.

Neighbourhood is shorthand for the local blast-radius read: what this package depends on, and what depends on it. Boundary is shorthand for the perimeter read: what crosses into and out of the selected package or subsystem. They are readings of the same pinned subject, not separate lenses or graph modes.

Read the pair below as one controlled comparison: keep the repository, Current Focus, subject, expansion, Neighbour links, and camera the same; change only Direction.

Screenshot: pinned subject with Direction off and Neighbour links on
Neighbourhood mesh. Show the subject inside its broader local blast radius before directional flow is applied.
Screenshot: same pinned subject with Direction on and Neighbour links still on
Directional flow added. Show outbound solid teal and inbound dashed teal crossings while the surrounding neighbour mesh stays constant.

When the cycle layer overwhelms a boundary audit, Neighbour links and Mute cycles provide a deliberate declutter posture. This is not the Direction comparison above: it is a separate ingress/egress task that temporarily removes surrounding mesh and cycle emphasis without deleting the findings.

Screenshot: same pinned subject with Direction on, Neighbour links off, Mute cycles on, and Open Cycle Group View still available
A clean interface read, one click from the cycles. Show the reversible mute state and the surviving cycle-group affordance so declutter cannot be mistaken for changed evidence.

Cycle View and Cycles Only

Cycle View keeps one detected cycle group as the current structural subject. Use it when you have selected a group from the Cycles section and want the graph to hold that loop steady while you inspect the packages and edges keeping it alive.

Cycles Only is broader. It filters the working view to cycle-participating packages and dependencies, which is useful when you are triaging several groups or checking whether the visible area is tangled at all. Cycle View is one selected group; Cycles Only is a cycle-participant filter.

Screenshot: one selected cycle group held in Topology with group navigation and loop-forming edges visible
One group held steady. The selected loop is the structural subject while its concrete members and closing edges remain readable.
Screenshot: same Current Focus filtered to all visible cycle participants
All cycle pressure in scope. Several groups may remain; non-cycle packages and relationships no longer dominate the field.

Heatmap Overlay

Heatmap colours visible packages by a selected metric without changing the dependency structure underneath. Use it for questions such as “which cycle participants are unstable?”, “which backbone packages are too concrete?”, or “which depended-on packages have weak coverage?”

The overlay belongs to the current working graph. Current Focus, filters, view exclusions, Cycles Only, and pinned-subject posture decide which packages and edges you are investigating; Heatmap adds a metric read to them.

Screenshot: Topology with Instability Heatmap and legend over an otherwise unchanged dependency graph
Metric colour over structure. Keep directed edges and cycle language visible so the screenshot demonstrates that Heatmap adds a reading rather than replacing topology.

What carries into other lenses

Current Focus and applicable filters and exclusions belong to the shared investigation. Topology and Matrix also share package expansion and structural posture, so you can move from spatial structure to exact directional cells without rebuilding the question. Subsystems consumes those visible boundaries as its candidate map.

Opened package internals, graph layout, theme, and pinned-Graph controls such as Neighbour links and Mute cycles stay local to Topology. Simplifying that pinned Graph does not erase model evidence or remove the corresponding relationship cells from Matrix. Shared filters and explicit view exclusions remain part of the wider investigation posture.

Take the graph with you

  • Snapshot as PNG captures the graph as it appears on screen.
  • View as DOT exports the renderer-resolved semantic topology you are actually investigating, including Current Focus, filtering, exclusions, opened internals, and a selected cycle-group posture where applicable.

The global Download → Model as DOT action is different. It exports the retained acquisition model before repository policy or view interpretation is applied, so it is not owned by whichever lens happens to be open.

An Architecture Report is different: it is a model-driven report assembled from selected sections, not a dump of the lens that happens to be open.

When the graph has nothing to draw

AtlasArc distinguishes an absent analysis model, a successful analysis with no architectural units, and a working view narrowed to nothing. Follow the offered Analysis Source and Analyze action for the first case; inspect the acquisition outcome for the second; reset the named focus, filter, or exclusion for the third. A cycle filter that finds no participants is a valid zero-finding result, not a failed analysis or an empty architecture.

Use Topology to map the connections. Switch to Matrix for exact traffic, Composition for mass, Subsystems for boundary pressure, or Hotspots for priority.