20+ languages
TypeScript, Python, Go, Rust, Kotlin, Swift, Java, C#, PHP, Ruby, C, C++, Dart, Scala, R, Zig, and more — all through maintained Tree-sitter grammars.
tracers parses 20+ languages with Tree-sitter and builds a unified graph of symbols, calls, imports, and dependencies. Ask who calls a function, what breaks if it changes, or where the cycles are — all locally, in one Rust binary.
$ tracers scan .
=== Tracers scan summary ===
Files scanned: 4
Nodes: 59
Edges: 142
Wrote graph export to .tracers
A layered analysis pipeline that turns source code into a queryable graph — and is honest about what it cannot resolve.
TypeScript, Python, Go, Rust, Kotlin, Swift, Java, C#, PHP, Ruby, C, C++, Dart, Scala, R, Zig, and more — all through maintained Tree-sitter grammars.
Every relationship is marked resolved_internal, resolved_external, unresolved, or ambiguous — tracers never pretends a guess is a fact.
Direct and transitive dependencies, callers and callees, references, inheritance — bounded, deterministic traversals over indexed graph data.
See exactly which symbols depend on a target, with the path that connects them — static reachability, not runtime guesswork.
Every scan emits a standalone graph.html — a D3-force canvas explorer with search, filtering, and ego-network inspection. Works from file://.
Parallel parsing with per-worker parsers and a content-addressed syntax cache — rescans only re-parse what changed.
One scan builds the graph; every query command runs against it —
or against an exported graph.json without rescanning.
$ tracers scan fixtures/languages/typescript
=== Tracers scan summary ===
Files scanned: 4
Nodes: 59
Edges: 142
Symbols: 44
Unresolved edges: 12
Wrote graph export to .tracers
$ tracers callers twice
Callers of `twice`:
- run [function] via calls
(resolved_internal), lexical
depth 1 — src/math.ts:11
$ tracers impact twice
Impact of `twice`:
- run [function] depth 1
path: run -> twice
via: calls
Discover, parse, resolve, query — a deterministic pipeline with explicit uncertainty at every step.
tracers discovers source files (respecting .gitignore and your tracers.toml), parses them with Tree-sitter in parallel, and caches syntax trees by content hash.
tracers scan .
A layered resolver matches symbols through lexical scope, imports, qualified names, and package boundaries — recording exactly how confident each edge is.
.tracers/graph.json
Ask callers, callees, refs, deps, dependents, reach, impact, path, roots, cycles — or open the interactive explorer. All queries accept --graph to skip rescanning.
tracers callers myFunc
Grab a prebuilt binary from GitHub Releases, or build from source with Cargo. No runtime dependencies, no daemon, no account.
$ curl -fsSL https://raw.githubusercontent.com/hieudoanm/tracers/main/scripts/install.sh | sh
Installed tracers to ~/.local/bin/tracers
$ tracers scan .
Wrote graph export to .tracers
$ tracers --version
tracers 0.0.1 (build 2026.11.08.13.12.56)
Or build from source: ./scripts/install-local.sh — see the README for details.