Graph Explorer
This page introduces the main controls in the Graph Explorer panel.
Read this page if the app is already running and you want to understand what the explorer controls are for before diving into deeper architecture or protocol details.
DependencyAtlas builds the main graph from source-first static analysis. It is not a runtime execution trace. Optional JET results appear as separate on-demand views rather than changing the main graph.
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
Search
Search filters the graph by file path, 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.
Files to include / exclude
Files to include and Files to exclude let you narrow the working set by path pattern before reading the graph in detail.
Use them when you want to:
- focus on one subsystem such as
src/runtime/** - hide noisy areas such as
test/**ordocs/** - keep the explorer readable on larger repositories
Layout
Layout changes the broad graph direction used to place nodes.
In the current UI, the main presets are:
left to righttop to bottom
Use left to right when you want call flow to read horizontally. Use top to bottom when you want a more compact vertical stack.
Layout Engine
Layout Engine changes the layout engine variant behind the selected layout.
The current options are:
Sugiyama liteELK layered crossing min
Choose Sugiyama lite when you want fast iteration. Choose ELK layered crossing min when you want a cleaner layered result and can tolerate more waiting.
ELK Edge Routing
ELK Edge Routing only applies when the layout engine is ELK layered crossing min.
The current options are:
orthogonalpolylinesplines
Use it when you want to change how ELK itself routes edges through the layered layout.
Edge Path
Edge Path changes how edges are drawn between nodes.
The current options are:
native ELKrounded routeorthogonalbeziersmoothstepstep
Some of these modes reuse ELK's routed path directly, while others draw the same graph through React Flow edge styles. This changes presentation only; 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.
This toggle is mainly about overloaded external generics, not about collapsing project methods together. In practice that means:
- project-defined overloads such as multiple
meet(...)methods still appear as separate method nodes - overloaded external generics such as
Statistics.meanorLogging.handle_messagemay appear as one external generic node with overload styling
So if two examples look different on the canvas, that is usually because one is showing project-owned method definitions while the other is showing an external generic that your project extends.
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 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.
There is also an important display distinction:
- project-owned overloads stay split into separate method nodes, because each definition is part of your codebase
- overloaded external generics can be shown as one external generic node with overload styling, because the graph is emphasizing the shared external API surface rather than duplicating every external generic node
That is why a project function family and an overloaded stdlib generic do not always look the same even when both involve multiple method definitions.
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.
Related Pages
- Want a full first-run walkthrough? See Quick Start.
- Want to know when to switch layers? See Guides / Graph Views.
- Want focused traversal once you pick a node? See Guides / Reachability.