{"id":50786998,"url":"https://github.com/maskdotdev/aci","last_synced_at":"2026-06-12T08:33:02.921Z","repository":{"id":356435591,"uuid":"1232373192","full_name":"maskdotdev/aci","owner":"maskdotdev","description":"Rust-first codebase indexer for symbols, dependencies, call graphs, references, impact analysis, and graph exports.","archived":false,"fork":false,"pushed_at":"2026-05-16T02:47:44.000Z","size":303,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-16T02:59:55.603Z","etag":null,"topics":["code-intelligence","developer-tools","rust","static-analysis","tree-sitter"],"latest_commit_sha":null,"homepage":"https://aci.mask.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maskdotdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-07T21:39:53.000Z","updated_at":"2026-05-16T02:47:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/maskdotdev/aci","commit_stats":null,"previous_names":["maskdotdev/aci"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maskdotdev/aci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maskdotdev%2Faci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maskdotdev%2Faci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maskdotdev%2Faci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maskdotdev%2Faci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maskdotdev","download_url":"https://codeload.github.com/maskdotdev/aci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maskdotdev%2Faci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34236551,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-intelligence","developer-tools","rust","static-analysis","tree-sitter"],"created_at":"2026-06-12T08:33:02.102Z","updated_at":"2026-06-12T08:33:02.914Z","avatar_url":"https://github.com/maskdotdev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ACI\n\nACI is a Rust-first codebase indexer. It walks a repository, detects source\nlanguages, extracts a neutral graph of files, symbols, imports, exports, calls,\nreferences, and package dependencies, then stores that graph for fast queries\nand export.\n\nThe goal is a small, deterministic indexing engine that can grow from structural\nTree-sitter extraction into richer semantic enrichment without changing the\ninternal graph model.\n\n## What It Does\n\n- Indexes code into per-file graph partitions.\n- Emits stable IDs from repository, path, language, symbol kind, names, and\n  source spans.\n- Tracks fact provenance and confidence so structural, SCIP, LSP, and compiler\n  facts can coexist.\n- Stores full indexes as compact binary packs with JSONL manifests.\n- Supports incremental replacement of changed files and reverse dependencies.\n- Queries symbols, dependencies, callers, callees, references, packages, and\n  impact sets.\n- Exports graph data as JSONL, KiteDB-shaped JSONL, SCIP-shaped JSON, and\n  LSIF-shaped JSON.\n\n## Crates\n\n| Crate | Responsibility |\n| --- | --- |\n| `aci-core` | Graph model, IDs, spans, diagnostics, language types, fact quality. |\n| `aci-adapters` | Language detection, Tree-sitter extraction, scanner fallback, fixtures. |\n| `aci-indexer` | Discovery, filtering, fingerprinting, parallel indexing, incremental planning. |\n| `aci-diff` | Branch-to-branch semantic diffing over indexed graph snapshots. |\n| `aci-store` | Manifests, packed partitions, delta logs, snapshots, symbol/dependency indexes. |\n| `aci-query` | Symbol lookup, dependency traversal, callers, callees, references, impact. |\n| `aci-export` | JSONL, KiteDB, SCIP, and LSIF export shapes. |\n| `aci-watch` | Filesystem watch and debounce helpers. |\n| `aci-cli` | Thin command-line entry point over the library crates. |\n\n## Supported Inputs\n\nCurrent adapters cover:\n\n| Language | Detection | Extraction |\n| --- | --- | --- |\n| C, C++, Objective-C | Extensions and parser support | Tree-sitter with scanner fallback |\n| Go, Java, Rust | Extensions and parser support | Tree-sitter with scanner fallback |\n| JavaScript, TypeScript, TSX | Extensions and parser support | Tree-sitter with scanner fallback |\n| Python | Extension and shebang support | Tree-sitter with scanner fallback |\n| JSON / `package.json` | Filename and extension | Package/dependency extraction |\n\nUnsupported, binary, generated, and vendor paths are skipped before parsing.\n\n## Quickstart\n\nInstall the latest release:\n\n```sh\ncurl -fsSL https://aci.mask.dev/install.sh | sh\n```\n\nRun the tests:\n\n```sh\ncargo test --workspace\n```\n\nIndex the current repository into `.aci`:\n\n```sh\ncargo run -p aci-cli -- index .\ncargo run -p aci-cli -- index . --max-parse-bytes 10485760\n```\n\nQuery symbols:\n\n```sh\ncargo run -p aci-cli -- query symbols\ncargo run -p aci-cli -- query symbols --name main\ncargo run -p aci-cli -- query --pretty symbols --name main\ncargo run -p aci-cli -- query --pretty --color always symbols --name main\ncargo run -p aci-cli -- query --format json symbols --name main\n```\n\nSymbol queries include jump locations in `path:line:column` form after the\nstore is indexed with the current binary. Query commands default to text output;\nuse `--format json` before the query subcommand for machine-readable output.\nQuery and export commands use `.aci` by default; pass `--store` only when\nreading a different store path.\n\nQuery dependencies and impact:\n\n```sh\ncargo run -p aci-cli -- query deps --file src/lib.rs\ncargo run -p aci-cli -- query packages\ncargo run -p aci-cli -- query callers main\ncargo run -p aci-cli -- query callees main\ncargo run -p aci-cli -- query refs main\ncargo run -p aci-cli -- query deps-tree main --depth 2\ncargo run -p aci-cli -- query impact src/lib.rs\ncargo run -p aci-cli -- query --pretty impact src/lib.rs\n```\n\nCompare two Git refs semantically:\n\n```sh\ncargo run -p aci-cli -- diff main feature\ncargo run -p aci-cli -- diff main feature --agent\ncargo run -p aci-cli -- diff main feature --pretty\ncargo run -p aci-cli -- diff main feature --format json --pretty\ncargo run -p aci-cli -- diff main feature --agent --format json --pretty\ncargo run -p aci-cli -- diff main feature --agent --max-parse-bytes 10485760\n```\n\n`aci diff` checks each ref out into an isolated detached worktree, indexes both\ntrees, then reports file, symbol, public API, dependency, diagnostic, and impact\nchanges without mutating the current working tree.\n\nTree-sitter adapters skip files above the parse byte cap and fall back to\nstructural scanners when fallback mode is enabled. Use `--max-parse-bytes` on\n`index`, `watch`, `diff`, `bench cold`, and `bench query-path` when a repository\nhas large generated-by-hand source files that should still get parser-backed\nfacts. The default protects indexing latency and memory on mixed repositories.\n\nKeep the store updated while editing:\n\n```sh\ncargo run -p aci-cli -- watch .\ncargo run -p aci-cli -- watch . --debounce-ms 250\ncargo run -p aci-cli -- watch . --once --max-wait-ms 5000\ncargo run -p aci-cli -- watch . --max-parse-bytes 10485760\n```\n\nExport the graph:\n\n```sh\ncargo run -p aci-cli -- export --format jsonl\ncargo run -p aci-cli -- export --format scip --output graph.scip.json\n```\n\nRun a cold-index benchmark:\n\n```sh\ncargo run -p aci-cli -- bench cold . --variant tree-sitter-fallback\n```\n\n## Development Workflow\n\nUse this as the local quality gate before committing:\n\n```sh\n./scripts/check-loc.sh\ncargo fmt --all -- --check\ncargo clippy --workspace --all-targets -- -D warnings\ncargo test --workspace\nRUSTDOCFLAGS=\"-D warnings\" cargo doc --workspace --no-deps\n./scripts/validate-packaging.sh\n```\n\nBenchmark and budget scripts live under `scripts/`:\n\n- `bench-cold-index.sh`\n- `bench-incremental-index.sh`\n- `bench-query-latency.sh`\n- `bench-memory.sh`\n- `bench-real-repo.sh`\n- `bench-structural-variants.sh`\n- `validate-performance.sh`\n\n## Architecture Notes\n\nACI keeps parser-specific details behind adapters. Every adapter emits the same\n`aci-core` graph model, and storage writes are partitioned by file so changed\nfiles can be replaced without rewriting unrelated graph data.\n\nFull index writes stream compact partition records into\n`partitions/pack-00000.bin` and write `manifest.jsonl`. Incremental updates\nwrite changed file partitions and append replacement records to `delta.jsonl`.\nSnapshots are optional compaction artifacts for faster query startup.\n\n## Documentation\n\n- [Architecture](docs/architecture.md)\n- [Graph model](docs/graph-model.md)\n- [Storage](docs/storage.md)\n- [Adapter authoring](docs/adapter-authoring.md)\n- [Exports](docs/exports.md)\n- [Branch diffs](docs/diff.md)\n- [Semantic enrichment](docs/semantic-enrichment.md)\n- [Troubleshooting](docs/troubleshooting.md)\n- [Release checklist](docs/release-checklist.md)\n- [Tree-sitter production plan](docs/tree-sitter-production-plan.md)\n\n## Contributing and Security\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for setup, validation, and pull request\nexpectations. See [SECURITY.md](SECURITY.md) for vulnerability reporting.\n\n## Current Limits\n\n- Extraction is strongest for structural facts. Semantic enrichment exists, but\n  compiler/LSP-grade facts are still adapter work.\n- Query APIs are library-first; the CLI intentionally stays thin.\n- Store compatibility is tested for the current packed layout. Old local `.aci`\n  stores should be regenerated after storage format changes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaskdotdev%2Faci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaskdotdev%2Faci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaskdotdev%2Faci/lists"}