Support matrix

16 languages. 45 frameworks. Honest precision.

Every language declares how its reference graph is built, and confidence is capped accordingly. A finding in Java can never look as certain as one in Python, because it is not. Run deadpath languages for the live table.

Tier 1 · AST

Python. Full syntax tree: exports, private defs, decorators, base classes, string literals, __all__, __main__ guards, dynamic imports, attribute access on imported modules.

Tier 2 · Import graph

TypeScript and JavaScript, including .vue and .svelte. Import specifiers resolve via relative paths, tsconfig paths aliases, and baseUrl. Named exports, @decorators, and package.json dependencies are scored the same way as Python.

Tier 3 · Reference graph

Fourteen languages. Each declares how a file is identified (import path, module name, declared types) and what it references. Precision is path or name. All four finding kinds run: orphan files, unused exports, unused manifest dependencies, and private unreachable names.

The matrix

LanguageTierPrecisionDetectsFrameworks recognisedValidation commands in workflow
PythonASTpathorphan_file · unused_export · unused_dep · unreachableDjango, Flask, FastAPI/Starlette, pytest, Celery, SQLAlchemy/Alembic, Click/Typer, Airflow, Pydanticpython -c "import …" · mypy / pyright · pytest
TypeScript / JavaScriptimport graphpathorphan_file · unused_export · unused_dep · unreachableNext.js, React, Vue, Nuxt, Angular, Svelte/SvelteKit, Remix/React Router, Astro, Vite, Express/Koa/Fastify/Hono, NestJS, Electron, Jest/Vitest, Playwright/Cypressnpx tsc --noEmit · vitest / jest / npm test
Goreference graphpathorphan_file · unused_export · unused_dep · unreachableGin, Echo, Fiber, Gorilla, Chi, Cobra, urfave/cligo build ./... · go vet ./... · go test ./...
Rustreference graphpathorphan_file · unused_export · unused_dep · unreachableActix, Axum, Rocket, Warp, Tokio, Clapcargo check --all-targets · cargo test
Javareference graphnameorphan_file · unused_export · unused_dep · unreachableSpring, Quarkus, Micronaut, JUnit/TestNGmvn compile/test · ./gradlew test
Kotlinreference graphnameorphan_file · unused_export · unused_dep · unreachableKtor, Android, Spring, Quarkus, Micronaut, JUnit./gradlew build · ./gradlew test
Scalareference graphnameorphan_file · unused_export · unused_dep · unreachableSpring, Quarkus, Micronaut, JUnit (sbt projects)sbt compile · sbt test
C#reference graphnameorphan_file · unused_export · unused_dep · unreachableASP.NET Core, xUnit/NUnit/MSTestdotnet build · dotnet test
Rubyreference graphpathorphan_file · unused_export · unused_dep · unreachableRails, Sinatra, RSpec/Minitestrubocop · rspec / rake test
PHPreference graphnameorphan_file · unused_export · unused_dep · unreachableLaravel, Symfonycomposer validate · phpunit
Swiftreference graphnameorphan_file · unused_export · unused_dep · unreachableSwiftUI/UIKit, Vaporswift build · swift test
Dartreference graphpathorphan_file · unused_export · unused_dep · unreachableFlutterdart analyze · flutter test / dart test
Elixirreference graphnameorphan_file · unused_export · unused_dep · unreachablePhoenixmix compile --warnings-as-errors · mix test
C / C++reference graphpathorphan_file · unused_export · unused_dep · unreachableCMake / Make / Meson / vcpkg projectscmake --build build · ctest
Luareference graphpathorphan_file · unused_export · unused_dep · unreachablerockspec, Neovim plugin layoutsluacheck · busted
Perlreference graphpathorphan_file · unused_export · unused_dep · unreachablecpanfile / Makefile.PLperl -c · prove -l t

What precision means for confidence

path

Imports resolve to files

Go import paths via go.mod, Rust mod/use crate::, Dart package: URIs, Ruby require_relative, C #include "…", Lua require, Perl use. A missing edge is strong evidence. Signal <lang>_path_resolved_graph −0.03; orphan files can reach block (0.89).

name

References are tokens

Java/Kotlin/Scala imports plus same-package type names, C# and Swift declared types, PHP namespaces, Elixir modules. Reflection, DI containers and code generation can hide edges. Signal <lang>_name_reference_graph −0.30; orphan files top out at warn (0.62) and always get a verify step.

Framework detection

Frameworks are detected two ways and unioned: import statements in source files, and dependency names in manifests — package.json, pyproject.toml, requirements.txt, go.mod, Cargo.toml, pom.xml, build.gradle(.kts), *.csproj, Gemfile, composer.json, Package.swift, pubspec.yaml, mix.exs, build.sbt. Each framework contributes:

Monorepos

Workspaces from package.json, pnpm-workspace.yaml, Nx/Turbo/Lerna, Cargo [workspace], go.work, and nested manifests set profile.monorepo. The graph is built per repository root; scan a package directory for a package-local view.

Adding a language is a ~40-line entry in deadpath/polyglot.py: suffixes, an ids() function, a refs() function, an entry rule, a test rule, and validation commands. Precision must be declared.