Symbols and spans
Track names, kinds, qualified paths, and jump locations in path:line:column form.
Rust-first code graph CLI
Fast local code indexing for large repositories. ACI turns source files into a queryable graph without a daemon, database, or hosted service.
ACI writes a compact local store with stable IDs and per-file partitions, so command-line queries do not need to crawl the repo again.
Track names, kinds, qualified paths, and jump locations in path:line:column form.
Capture code dependencies plus package metadata from files like package.json.
Traverse callers, callees, refs, dependency trees, and impact sets from one store.
Write JSONL, KiteDB-shaped JSONL, SCIP-shaped JSON, and LSIF-shaped JSON.
Build a local graph store, query relationships, keep it current while editing, and export the same graph for other tools.
curl -fsSL https://aci.mask.dev/install.sh | sh
Install ACI as a single local binary.
aci index .
Creates or replaces graph partitions inside the default .aci store.
aci query --pretty symbols --name main
Use text tables for humans or JSON output for scripts and tools.
aci watch . --debounce-ms 250
Keep the graph fresh while editing without re-indexing the world.
aci export --format jsonl
Move the same internal graph into downstream formats when needed.
aci bench cold ./next.js --variant tree-sitter-fallback
Run cold index timing against real repositories and compare extraction modes.
Measured on local checkouts with the tree-sitter-fallback extraction mode.
21,869435,553616,376379970149,2878,635,54215,819,48591,088253,039local-first pipeline
ACI keeps parser details behind adapters and writes a compact local graph store for fast lookup, traversal, impact analysis, and export.
Skip vendor, generated, binary, and unchanged paths before parsing.
Language adapters emit the same internal model across Tree-sitter and scanner fallback paths.
Changed files can replace their partitions without rewriting unrelated graph records.
Ask for symbols, deps, callers, callees, refs, packages, impact, JSONL, SCIP, or LSIF.