Supported Languages
ArchGraph parses sixteen languages. What differs between them is not
whether they appear in the graph — they all do — but how a CALLS edge
is established.
The sixteen
C, C++, C#, Go, Java, JavaScript, Kotlin, Lua, Objective-C, PHP, Python, Ruby, Rust, Scala, Swift, TypeScript.
For each of them ArchGraph extracts functions, classes, files, imports, call edges, structural containment, and security labels — input sources, dangerous sinks, crypto operations.
Two ways a call gets resolved
Compiler-backed (SCIP). The language's own compiler or type-checker produces a cross-reference index with full type information, and ArchGraph replaces name-matched placeholders with verified edges. Indexers exist for TypeScript, JavaScript, Python, Go, Rust, Java, Kotlin, Scala, C, C++ and C#.
Heuristic. A four-level name-matching chain. It runs for the five languages with no SCIP indexer — Ruby, PHP, Lua, Swift, Objective-C — and as the fallback whenever an indexer cannot run. It resolves most calls correctly on codebases without heavy overloading; what it cannot do is tell two same-named methods apart.
Every extraction records which of the two applied, per language, in its
report. That is worth more than a table, because the answer depends on
the specific repository as well as on the language: a Java project with
no build file, or a TypeScript project whose tsconfig.json extends a
package it has not installed, resolves heuristically no matter what a
support matrix says.
What your install actually runs
An indexer existing is not the same as it being present in the build you deployed, and neither is the same as it being able to run against a given repository. Those are three different questions and the answer to all three is in one place:
→ docs/CAPABILITIES.md in archgraph-api
It carries the per-language table with the pinned indexer versions, what each one needs from your repository, what the failure looks like in the extraction report, and how to read an empty result. Every enumeration in it is checked against the code by a test, which is why it is there and not repeated here — an earlier version of this page promised compiler-backed resolution for C, C++ and C# and none of the three resolves that way in the published image.
C# is the one of those three with a supported way to get it: a separate opt-in worker image carrying the .NET SDK, because the SDK is about a gigabyte and every install that never indexes C# would otherwise carry it. The linked document has the recipe and the measured result.
Adding a language
Sixteen grammars are wired in; eight are installed by default and eight ship as extras, which the published image installs. Adding a seventeenth means a tree-sitter grammar, an extension mapping and a handler — see docs/ARCHITECTURE.md.