Skip to content

Graphify Installation

Feed a GraphScribe Graphify export into the graphify CLI to get a clustered knowledge graph plus an interactive HTML page (graph.html) that visualizes every Blueprint, DataAsset, and the calls / defines / uses links between them.

GraphScribe already emits graphify-shaped JSON (nodes + edges with stable bp: / fn: / evt: / cls: ids, see Graphify: AI-Ready Graphs). A Graphify batch export also writes the thin graphify-ready wrapper (graphify-out/graph.json) the CLI expects, so graphify cluster-only does the rest: community clustering, a written report, and the HTML viewer.

The graphify CLI is a separate, optional tool. It is not shipped with the plugin. The editor can auto-run it after a Graphify export (see Project Settings). Everything below also works standalone outside the Unreal editor.

Use the batch export (Content Browser folder right-click → Export Blueprints with GraphScribe…) and choose Graphify as the format. The output folder gets:

FileMeaning
Graphify/ProjectLinkage.graphify.jsonThe merged project graph. Every asset plus cross-asset calls / defines / uses edges. This is the file you feed to graphify.
Graphify/graphify-out/graph.jsonThe graphify-ready wrapper written automatically for the CLI (no converter step).
Graphify/<ContentRoot>/<AssetPath>/*.graphify.jsonOne per-asset export (graphify consumes the merged file, not these).

Re-exporting the folder rebuilds ProjectLinkage.graphify.json from every per-asset file, so folder-by-folder exports accumulate into the same graph.

Terminal window
uv tool install graphifyy

This provides graphify (and graphify-mcp) on your PATH. This guide was verified against v0.9.48.

The graphify CLI reads its own graph format: a graph.json with nodes and links (plus a few top-level metadata keys). GraphScribe’s export already carries the same node/edge schema, so the only missing piece is a lossless wrapper and the plugin writes it for you:

A Graphify batch export now writes Graphify/graphify-out/graph.json automatically next to ProjectLinkage.graphify.json (no converter step, no CLI required for this part). graphify cluster-only . consumes it directly.

ProjectLinkage.graphify.jsongraphify-out/graph.jsonNotes
nodes[] (top-level)nodes[]Copied unchanged (id, label, file_type, source_file, optional source_location / kind / nativeFunction)
edges[] (top-level)links[]Copied unchanged (source, target, relation, confidence, source_file)
N/Adirectedtrue GraphScribe edges are directional (source → target)
N/Amultigraphfalse
N/Agraph{} (graph attributes, unused)
N/Ahyperedges[] GraphScribe emits no hyperedges
N/Abuilt_at_commitOptional, best-effort from the enclosing git repo so the report shows freshness

Run cluster-only from the Graphify folder. It re-clusters the graph, writes the report, and generates the HTML page:

Terminal window
graphify cluster-only .

In the editor: with Project Settings → Plugins → GraphScribe → Generate Graphify Viewer enabled (off by default), a Graphify batch export runs graphify cluster-only in the background and shows a toast when the viewer is ready. The batch dialog also gets an Open Graphify Viewer button for the last Graphify export. If the graphify CLI is missing, the export still completes and the log suggests uv tool install graphifyy. Set GraphifyCliPath if the CLI is not on PATH.

cluster-only reads <path>/graphify-out/graph.json, re-clusters it into communities, and writes:

OutputWhat it is
graphify-out/graph.htmlThe page to view the links. Interactive node/link viewer (open in a browser)
graphify-out/graph.jsonThe re-clustered graph (nodes gain community / community_name / norm_label)
graphify-out/GRAPH_REPORT.mdWritten report: node/edge counts, community hubs, god nodes, surprising connections, import cycles
graphify-out/.graphify_analysis.jsonMachine-readable communities / cohesion / god nodes / surprises / questions
graphify-out/.graphify_labels.json (+ .sig)Community labels (deterministic hub names by default)
graphify-out/<date>/Backed-up previous artifacts (one dated snapshot per run)

Useful flags:

  • --no-label keep Community N placeholders (skips naming entirely).
  • --no-viz skip graph.html for very large graphs (>5000 nodes) or CI.
  • --backend <name> / --model <name> community names via an LLM backend. Without a backend, labels default to each community’s hub node, deterministic and free.

Open graphify-out/graph.html in a browser. It is a self-contained page (vis-network, no build step):

  • Nodes: One dot per Blueprint / DataAsset / function / event / class, sized by degree, colored by community.
  • Edges: Labeled with the relation (calls / defines / uses) and confidence, click any edge for details.
  • Search: Type to find a node by name.
  • Node info: Click a node for its source file, community, and neighbor list, click a neighbor to navigate.
  • Community legend: Checkbox to isolate each community, Select All resets.
  • Footer: The totals (41 nodes · 47 edges · 14 communities in the example project).

The same workflow powers a coding assistant instead of (or alongside) the HTML page. Register Graphify with your assistant so it can read graphify-out/graph.json and answer project questions:

Terminal window
graphify install # auto-detect Claude Code / Cursor / Codex / Gemini CLI / ...
graphify install --platform claude # or name the platform explicitly

Then ask your assistant questions like “Who calls Base_Function_2?” or “Which Blueprints use PDA_BaseAsset?” The answers come from the real exported linkage, not from .uasset binaries. The exported documents carry the format contract schemaVersion: 2, generator: "GraphScribe", generatorVersion: "1.1.0", and the node/edge shape documented in Schema & Stability.

The same graph.json powers graphify’s read commands:

Terminal window
graphify query "who calls BP_BaseTest::BeginPlay?" # scoped subgraph for a question
graphify path "BP_BaseTest" "PDA_BaseAsset" # dependency path between two nodes
graphify explain "BP_BaseTest" # plain-language node + neighbors
graphify god-nodes # most connected (architectural hubs)
graphify tree . # GRAPH_TREE.html: collapsible D3 tree
graphify export callflow-html # Mermaid-based architecture/call-flow HTML

Run these from the Graphify export folder (the folder that contains graphify-out/). The CLI resolves graphify-out/graph.json relative to the current directory. Running from inside graphify-out/ fails with a doubled path. Alternatively pass the graph explicitly: graphify explain "X" --graph <path-to-graph.json>.

  • Keep the graph fresh: re-exporting Graphify in the editor rewrites graphify-out/graph.json and (with Generate Graphify Viewer on) re-runs graphify cluster-only automatically. Outside the editor, graphify cluster-only . does the same. The report stamps the git commit the graph was built from.
  • Parallel edges collapse: cluster-only builds a plain DiGraph, so edges that share the same (source, target) collapse to one, in the example, BP_BaseTest both calls and defines several of its own functions, and its 52 export links become 47 graph edges.
  • Where graph.json must live: graphify expects graphify-out/graph.json relative to the path you pass. The plugin writes it there by construction.
  • Exact node tracing: explain "<unique label>" returns one node with its exact neighbors (who defines it, who calls it, what it calls). query fuzzy-matches and can return a superset of start nodes, filter by the unique node id (bp: / fn: / evt: / cls:) when you need precision.
  • The graphify CLI never touches your .uasset files, it only reads the exported JSON.

Graphify HTML linkage viewer