The visualizer

Depth rings, not a hairball.

A force-directed graph of a real codebase is a tangle. Lattice lays the same graph out on concentric rings by call depth, so the structure shows before you read a single name.

Reading the rings

Distance from the center is depth.

  • Rim. Entry points: route handlers, commands, and handler functions, the places execution starts.
  • Center. Foundations: the helpers many things call. Code no entry point reaches sits in the middle too, with no depth at all.
  • Angle. Symbols sit next to the others in their package on each ring.
  • Size. A bigger dot has a higher PageRank: it is a structural hub.
  • Arcs. One arc per resolved call. An arc that crosses many rings skips layers.
  • Color. Dot color is the kind of symbol: module, class, function, or method.
Lattice's depth-ring view of a small codebase: entry points on the outer rim, foundations near the center, and arcs for calls.Lattice's depth-ring view of a small codebase: entry points on the outer rim, foundations near the center, and arcs for calls.
The sample codebase: five packages, drawn as rings.
Blast radius

See how far a change reaches.

Turn on blast radius, pick 1 to 5 hops, and select a symbol. Everything that depends on it is colored by distance and the rest fades. The shape tells you whether a change is contained or systemic.

  • The symbol itself
  • 1 hop: direct callers
  • 2 hops
  • 3 hops
  • 4 hops
  • 5 hops or more
Blast radius of a shared helper in Lattice: dependents in orange, yellow, and green across many packages.Blast radius of a shared helper in Lattice: dependents in orange, yellow, and green across many packages.
A shared helper: the change reaches across the whole codebase.
Blast radius of a leaf method in Lattice: a few nearby dependents colored by hop, the rest faded.Blast radius of a leaf method in Lattice: a few nearby dependents colored by hop, the rest faded.
A leaf method: a small, contained change.
Filters and limits

Narrow the picture; nothing is dropped silently.

Menus pick the repository, the kind of symbol, and the package. The canvas draws up to 2,500 symbols at a time, highest centrality first, and a notice says when it trimmed so you know to filter. Drag to pan, scroll to zoom, hover to highlight neighbors, and click to inspect.

Lattice filtered to one package: a few symbols on their depth rings.Lattice filtered to one package: a few symbols on their depth rings.
Package filter: one module up close.
Lattice filtered to classes only, shown as purple dots across the depth rings.Lattice filtered to classes only, shown as purple dots across the depth rings.
Kind filter: classes only.
Using it without a mouse

The canvas is mouse-driven; the facts are not.

The graph is drawn on a canvas that you pan, zoom, and click with a pointer. Selecting a symbol has no keyboard path yet, and that gap is listed on the accessibility page. The menus, the blast-radius checkbox, and the theme toggle are ordinary controls that Tab reaches, and the same answers about any symbol are available as text through Lattice's MCP tools, command line, and REST API, shown on the agent tools page.