Get in touch

Fill out the form below and I'll get back to you.

🕸️

GraphIt — Code Graph Visualizer

Instantly map how your code is structured. Point GraphIt at any project folder and get an interactive, searchable graph of every class, method, and dependency — right in your browser.

Open GraphIt →
🔍 Multi-language
📊 Code metrics
🔗 Share links
📷 Snapshots & Diff
⬇ Export SVG / PNG / JSON
🛡️ Privacy-first

Supported Languages

⚙️
C#
.cs
Full Roslyn analysis — highest accuracy
🐍
Python
.py
Classes, module functions, docstrings & calls
🟨
TypeScript / JavaScript
.ts .tsx .js .jsx
Classes, JSDoc & call edges
Java
.java
Classes, Javadoc & call edges

How to Use GraphIt

  1. 1
    Open the Visualizer

    Click Open GraphIt → at the top of this page, or navigate to /tools/graphit directly. The canvas and sidebar will load, ready for a new project.

  2. 2
    📂 Choose a Folder

    Click Choose Folder… in the toolbar. On your first visit a short privacy notice will appear — read it, then click Got it — Choose Folder to open your browser's native folder picker. Select the root of any project you want to analyze.

    💡 GraphIt automatically skips obj/, bin/, node_modules/, .git/, and other noise. Add a .graphitignore file to the folder to exclude anything else — same syntax as .gitignore.
  3. 3
    Analyze

    Click Analyze. A progress indicator tracks parsing across all supported file types in parallel. When it finishes the graph renders automatically.

  4. 4
    Explore the Graph
    🖱️
    Pan & Zoom — scroll to zoom, drag the canvas to pan, or use the +/−/⌖ buttons.
    🔍
    Search — type a class name to focus the graph. Use the Depth slider (1–5) to include nearby neighbours.
    📊
    Metrics — colour-code nodes by Cyclomatic Complexity, Coupling, or Lines of Code using the Metric dropdown.
    🗂️
    Namespace clusters — toggle grouping by namespace. Collapse or expand all clusters at once.
  5. 5
    ⬇ Export

    Click Export and choose a format:

    SVG Vector image — ideal for docs PNG Raster image — great for slides Mermaid Paste into GitHub, Notion, etc. JSON Raw graph data for further processing
  6. 6
    🔗 Share

    Click Share to publish the current graph to a unique URL. Anyone with the link gets a read-only, zoomable view of the same diagram.

    ⚠️ Shared graphs live in server memory. They are cleared when the server restarts. Re-analyze and re-share if that happens.
  7. 7
    📷 Snapshots & Diff

    Click Snapshot, give it a name, and save the current graph state. Once you have two or more snapshots the ⚖️ Diff button appears — use it to see exactly which classes were added, removed, or had their methods changed between any two snapshots.

🛡️ Your Code Stays Private

🔍Your browser reads the folder — the server never touches your filesystem.
📂You grant one-time read-only permission via the browser's native folder picker. Permission is not stored between sessions.
📡Files are transmitted to the server for parsing over your existing TLS/SignalR connection.
🧠Your code is held in memory only — never written to disk, never logged, never stored in any database.
Only class names, method names, and edges are kept client-side. Raw source text is discarded immediately after parsing.

Frequently Asked Questions

Does GraphIt upload my code to a cloud service or third party?

No. Parsing happens on the same server serving this application. For a locally-run instance, everything stays on your own machine. No third-party code analysis service is involved at any point.

Will GraphIt work on large codebases?

Yes. Parsing runs in parallel across all language groups. Typical projects with hundreds to a few thousand files complete in a few seconds. Very large monorepos may take longer, but the SignalR connection supports payloads up to 50 MB which covers the vast majority of projects.

Why does the graph look sparse, or why are some classes missing?

Heuristic parsers (Python, TypeScript, Java) use regex patterns and may miss classes with unconventional formatting. C# uses Roslyn and is the most accurate. Classes with zero resolved dependencies are omitted from the graph to reduce noise. Also check that your files are not excluded by a .gitignore or .graphitignore rule.

Can I add support for another language?

Yes. Implement the ICodeParser interface, register the new parser in Program.cs, and ParserRouter will discover it automatically. No changes to the router or the UI are required.

What is a "module node" in Python graphs?

Python files can contain functions defined outside any class (top-level / module-level functions). GraphIt groups these into a synthetic node labelled with the filename so they still appear in the graph with their outgoing call edges.

Are snapshots saved between sessions or server restarts?

No. Snapshots are held in server memory and are cleared on restart. To preserve a graph permanently use Export → JSON and save the file locally.

What exactly does the Diff compare?

The diff compares two named snapshots at the class level. A class is marked Changed when its set of method names differs. It does not inspect method bodies, parameter signatures, or field changes — it is a structural summary, not a line-by-line code diff.

The shared graph URL stopped working. What happened?

Shared graphs are stored in server memory. A server restart clears them. Re-analyze the project and click Share again to generate a fresh link.

Can I exclude specific files or folders from analysis?

Yes. Create a .graphitignore file in the root of the folder you are analyzing — same glob syntax as .gitignore. Any existing .gitignore in that folder is also respected. Common build output directories (obj/, bin/, node_modules/, etc.) are always excluded by default.

How is Cyclomatic Complexity calculated?

For C# files, complexity is computed from the Roslyn syntax tree by counting decision points within each method. For heuristic-parsed languages it is estimated by counting control-flow keywords (if, else, for, while, switch, etc.) in the method body.

Does GraphIt handle generics, partial classes, or records in C#?

Yes. GraphIt uses Roslyn's full parser and correctly identifies generic types, partial classes, records, and all other C# type declarations. Generics appear with their base name (e.g., MyService rather than MyService<T>). Partial classes spread across multiple files are treated as separate nodes unless the files are consolidated before analysis.

Can GraphIt be used as a standalone tool outside this application?

Not currently. GraphIt is a feature built into this Blazor application. However, the parser layer (ICodeParser, ParserRouter, and the individual language parsers) has no UI dependencies and could be extracted into a separate library or CLI tool if needed.

An unhandled error has occurred. Reload 🗙
Reconnecting… Reconnecting in s… Connection lost. Session paused. Failed to resume.