Skip to content

Web UI

nestweaver ui opens the same graph the CLI queries. Use it when you want to see a symbol, its source, and its neighbors at the same time.

Terminal window
nestweaver ui

The server listens on port 3000. Open http://127.0.0.1:3000. Pass --db if the database is not ./nestweaver.lbug in the current directory. The macOS app serves the same UI on port 9377.

This is the first screen. The sample is one small repository, so the graph stays readable.

Web UI overview of a sample repository, with the file tree, graph, and an empty details panel

  • Left Files, symbols, and notes in the current scope.
  • Center Task mode and the graph. Overview is selected here.
  • Right Details for the selection. Empty until you pick a node.
  • Green chip Local or federated, and whether the index is current.

Start Here, in the center, summarizes what is indexed. Read the green chip before you trust the picture.

Choose a function in the symbol list. The center switches to Context, the evidence panel shows the source span, and the card on the right lists callers and callees.

run_query selected in the web UI, with source on the right and parse_source and search_index in the graph

The toolbar above the graph switches representation: graph, table, matrix, or JSON. These screenshots show the graph. Table and JSON are the same nodes in a form you can scan or copy. Press ⌘L to cycle graph, table, and matrix.

  • Graph The neighborhood, drawn.
  • Table The same nodes as a sortable list.
  • Matrix Which of those nodes connect.
  • JSON The payload you can copy.
Graph, table, and matrix cycle with ⌘L. JSON is the same payload, including the trust envelope.

Impact, Repos, Features, and Local use the same three columns. They are not pictured here.

Everything in the UI is organized around what you’re trying to do:

  • Workspace scope — switch between all indexed content, a single repo, or a vault. Every view carries an honest trust chip: local-only vs federated, current vs stale, partial vs truncated. You always know what the answer is (and isn’t) based on.
  • Command bar (⌘K) and Search Phrases — plain-language queries resolve to typed scenes deterministically. No LLM in the loop; the same phrase always produces the same scene:
    • impact of <symbol> — blast radius
    • trace flow from <symbol> — forward call chain
    • callers of <symbol> / callees of <symbol>
    • path from <A> to <B> — shortest path between two symbols
    • tests affected by <symbol> — test selection
    • notes about <topic> / backlinks for <note>
    • hubs in <repo> / bridges in <repo> / dead code in <repo>
    • explain <symbol>, contract drift, stale repos
  • Task modes — six top-level modes, switchable with the keys 1–6: Overview, Context, Impact, Repos, Features, and Local neighborhood. Impact mode renders a layered blast-radius DAG with affected tests and local/org trust states. Search Phrases and node actions activate additional lenses on top (Trace, Path, and more).

Activating a node opens three synced panels:

  1. Graph — a focused subgraph around the selection.
  2. Evidence — the source span or note excerpt backing the node, with syntax highlighting. When there is no evidence, the UI says so explicitly rather than guessing.
  3. Knowledge card — identity, role, evidence, relationships, trust, and next actions (open source, trace, find path, impact, ask).

The three panels cross-highlight, so selecting in one focuses the others.

Every result set is inspectable multiple ways. ⌘L cycles the three canvas representations — graph, table, and matrix — and a JSON view is a separate toggle:

  • Graph — the spatial constellation view.
  • Table — an accessible, sortable list of the same nodes.
  • Matrix — an adjacency matrix of the scene’s relationships.
  • JSON — the raw payload, including the _meta provenance and trust envelope.

This means every graph answer has a non-visual equivalent, which matters for accessibility and for copying results into other tools.

The visuals encode meaning, not decoration:

  • Color = node kind (function, class, method, interface, note, …).
  • Size / glow = importance (PageRank in the current scene).
  • Spark-green convergence rings mark betweenness bridges — the architectural chokepoints that connect otherwise separate parts of the graph.

Motion is used sparingly to aid comprehension — a repo-galaxy ignition on load and a focus impact-ripple that traces blast radius — and all motion, bloom, and glow are gated behind prefers-reduced-motion, which the UI auto-detects. There is also a manual reduced-effects toggle.

Press ? in the UI for the full list. The essentials:

KeyAction
1–6Switch task mode (Overview, Context, Impact, Repos, Features, Local)
⌘KOpen the ask / Search-Phrase command bar
/Focus search
⌘LCycle graph / table / matrix representation
⌘⇧GToggle zen (canvas-only) layout
IImpact of the selected node
PPath from the selected node
M / C / TToggle minimap / communities / tags
⌘Z / ⌘⇧ZNavigate history back / forward
EscClear selection

The URL captures the workspace scope, selected node, active lens, and representation mode, so any view is shareable and restores exactly.

Append ?engine=wasm to the URL to run graph algorithms client-side via WebAssembly. The browser downloads a MessagePack snapshot and executes Personalized PageRank locally, with no server round-trips for queries. See the build note in the main repository for producing the WASM artifact.