Graph Explorer
This page introduces the main controls in the Graph Explorer panel.
DependencyAtlas builds this graph from static and compiler-time source analysis. It is not a runtime execution trace, and the Graph Explorer should be read with that boundary in mind.
Graph Explorer
Summary counters
The four summary counters at the top show how many modules, files, methods, and edges are currently in the loaded graph snapshot.
They are useful as a quick sanity check before you start filtering:
Modulesgives the current module count in the snapshotFilesgives the current file countMethodsgives the current method countEdgesgives the current edge count
These numbers describe the loaded graph data, not only the nodes currently visible after every filter.
Layer
DependencyAtlas exposes three graph layers:
methodfilemodule
The Layer selector switches between them. Each layer answers a different question.
Method view
Use method view when you want the most detailed call and define relationships.
This is usually the best place to:
- inspect concrete call chains
- examine overloads
- study external calls
File view
Use file view when you want a structural overview of how source files relate to each other.
This is often the best entry point for understanding project shape without reading every method-level edge.
Module view
Use module view when you want the highest-level architectural picture.
This is useful for:
- package-level or subsystem-level understanding
- explaining a codebase to someone else
- finding broad boundaries before zooming back in
Confidence >=
Confidence >= filters call evidence by evidence class.
DependencyAtlas uses:
exactinferredpossibledynamic
These values tell you what kind of evidence produced an edge. They do not mean "100% certain" versus "50% certain".
A useful way to read them is:
exact: direct structural evidenceinferred: compile-time inferred evidencepossible: ambiguous or heuristic static evidencedynamic: unresolved or dynamic-dispatch evidence
In particular, call_inferred should be read as compiler-time or analysis-time evidence. It is helpful, but it is not a proof of complete runtime truth.
Node Search
Node Search filters the graph by node label, fully qualified name, or kind.
Use it when you already know what you want to inspect and want to reduce the canvas quickly.
Layout
Layout changes the broad layout direction or family used to place nodes.
In the current UI, the main presets are:
layered, left to rightlayered, top to bottomorganic, left to right
Use layered layouts when you want clearer flow direction. Use the organic layout when you want a less rigid overview.
Layout Model
Layout Model changes the layout engine variant behind the selected layout.
The current options are:
sugiyama lite (fastest)elk layered crossing-min (slower)
Choose the faster option when you want quick iteration. Choose the slower option when you want a cleaner layered result and can tolerate more waiting.
Edge Path
Edge Path changes how edges are drawn between nodes.
The current options are:
curvedorthogonal
This only changes edge routing style. It does not change the underlying graph data.
Reachability Direction
Reachability Direction controls whether a reachability query follows:
- callers
- callees
- both directions
Use callers when you want to know what can reach a node. Use callees when you want to know what a node can reach. Use both when you want a bounded neighborhood around the selected node.
Reachability Depth
Reachability Depth sets how many steps away from the selected node the reachability query can expand.
A lower depth keeps the result focused. A higher depth shows more context, but can grow quickly in dense graphs.
Show Overloaded Functions
Show Overloaded Functions reveals overloaded Base, Core, or stdlib generics that are relevant to the current graph.
This is useful when project methods extend shared generics and you want those overload sites to stay visible.
Show Base/Stdlib Calls
Show Base/Stdlib Calls controls whether calls into Base and the Julia standard library remain visible.
Turn it on when you want more complete dependency context. Turn it off when you want to focus more narrowly on project-owned code.
Show External Package Calls
Show External Package Calls controls whether calls into external packages remain visible in the graph.
This is especially useful when your project relies on package APIs and you want to see where those boundaries appear in the dependency story.
Edge kind filters
The edge-kind chips let you enable or disable specific relationship kinds.
Typical examples include:
includedefineimportcall_exactcall_inferredcall_possiblecall_dynamic
Use these chips when the graph feels dense and you want to temporarily suppress one class of relationship without changing everything else.
Export controls
The export buttons let you take the current graph state out of the UI:
Export to ClipboardExport to FileExport .drawio
These are useful for sharing, debugging, creating static examples, or continuing work in external diagram tools.
Reading the graph itself
The sections above describe the controls in the Graph Explorer panel. The sections below explain how to interpret the graph shown on the canvas once those controls are applied.
Read nodes first
At a high level, nodes represent entities in the current layer:
- methods in method view
- files in file view
- modules in module view
Some nodes belong to your project, while others represent external code such as Base, stdlib APIs, or external packages.
External nodes are useful because they show where your project touches code outside your own repository.
Then read edges
Edges express relationships such as:
includeimportdefine- call relationships such as
call_inferred,call_possible, andcall_dynamic
Not every edge means the same thing. Structural edges such as include and define are different from call evidence edges.
Overloads and piracy-like styling
DependencyAtlas also highlights overload-related semantics.
The important categories are:
none: no overload signalsafe: overload with project-type evidencepiracy_like: overload-like signal without project-type evidence
As a user-facing reading rule:
- safe overloads usually mean "this extends behavior in a project-owned way"
- piracy-like signals should make you slow down and inspect the definition more carefully
This is especially useful when project methods interact with Base, stdlib generics, or external package generics.
Why external nodes matter
External nodes are not noise. They help answer questions like:
- where does this project call into
Base - which stdlib APIs are on the path
- which external package symbols show up in the dependency story
Without them, the graph would often hide exactly the boundaries you want to inspect.
A good first reading workflow
If a graph feels dense, use this order:
- start broad in
fileormodule - identify one region or node that matters
- switch to
method - inspect node details and source snippets
- only then worry about more ambiguous evidence kinds
That keeps the graph useful instead of overwhelming.