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.
.cs.py.ts .tsx .js .jsx.javaClick 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.
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.
obj/, bin/, node_modules/, .git/, and other noise. Add a .graphitignore file to the folder to exclude anything else — same syntax as .gitignore.Click Analyze. A progress indicator tracks parsing across all supported file types in parallel. When it finishes the graph renders automatically.
Click Export and choose a format:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.