<p align="center">
<img src="https://loct.io/assets/loctree-logo.png" width="128" alt="loctree logo"/>
</p>
<h1 align="center">loctree</h1>
<p align="center">
<strong>Scan once, query everything.</strong><br/>
AI-oriented static analysis for dead exports, circular imports, dependency graphs, and holographic context slices.
</p>
<p align="center">
<a href="https://crates.io/crates/loctree"><img src="https://img.shields.io/crates/v/loctree.svg" alt="crates.io"/></a>
<a href="https://crates.io/crates/loctree"><img src="https://img.shields.io/crates/d/loctree.svg" alt="downloads"/></a>
<a href="https://docs.rs/loctree"><img src="https://docs.rs/loctree/badge.svg" alt="docs.rs"/></a>
<a href="https://github.com/Loctree/Loctree/actions/workflows/ci.yml"><img src="https://github.com/Loctree/Loctree/actions/workflows/ci.yml/badge.svg" alt="CI"/></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-blue.svg" alt="License"/></a>
</p>
---
## Install
```bash
Or directly via Cargo:
```bash
cargo install loctree # CLI: loct, loctree
cargo install loctree-mcp # MCP server for AI agents
```
## Quick Start
Artifacts are stored in your OS cache dir by default (override via `LOCT_CACHE_DIR`).
```bash
loct # Scan project, write cached artifacts
loct --for-ai # AI-optimized overview (health, hubs, quick wins)
loct slice src/App.tsx --consumers # Context: file + deps + consumers
loct find useAuth # Find symbol definitions
loct find 'Snapshot FileAnalysis' # Cross-match: where terms meet
loct impact src/utils/api.ts # What breaks if you change this?
loct health # Quick summary: cycles + dead + twins
loct dead --confidence high # Unused exports
loct cycles # Circular imports
loct twins # Dead parrots + duplicates + barrel chaos
loct audit # Full codebase review
```
## What It Does
loctree captures your project's real dependency graph in a single scan, then answers structural questions instantly from the snapshot. Designed for AI agents that need focused context without reading every file.
**Core capabilities:**
- **Holographic Slice** - extract file + dependencies + consumers in one call
- **Cross-Match Search** - find where multiple terms co-occur (not flat grep)
- **Dead Export Detection** - find unused exports across JS/TS, Python, Rust, Go, Dart
- **Circular Import Detection** - Tarjan's SCC algorithm catches runtime bombs
- **Handler Tracing** - follow Tauri commands through the entire FE/BE pipeline
- **Impact Analysis** - see what breaks before you delete or refactor
- **jq Queries** - query snapshot data with jq syntax (`loct '.files | length'`)
## MCP Server
loctree ships as an MCP server for seamless AI agent integration:
```bash
loctree-mcp # Start via stdio (configure in your MCP client)
```
Tools: `repo-view`, `slice`, `find`, `impact`, `focus`, `tree`. Each tool accepts a `project` parameter - auto-scans on first use, caches snapshots in RAM.
```json
{
"mcpServers": {
"loctree": {
"command": "loctree-mcp",
"args": []
}
}
}
```
## Language Support
| **Rust** | ~0% FP | Tested on rust-lang/rust (35K files) |
| **Go** | ~0% FP | Tested on golang/go (17K files) |
| **TypeScript/JavaScript** | ~10-20% FP | JSX/TSX, React patterns, Flow, WeakMap |
| **Python** | ~20% FP | Library mode, `__all__`, stdlib detection |
| **Svelte** | <15% FP | Template analysis, .d.ts re-exports |
| **Vue** | ~15% FP | SFC support, Composition & Options API |
| **Dart/Flutter** | Full | pubspec.yaml detection |
Auto-detects stack from `Cargo.toml`, `tsconfig.json`, `pyproject.toml`, `pubspec.yaml`, `src-tauri/`.
## Holographic Slice
Extract 3-layer context for any file:
```bash
loct slice src/App.tsx --consumers
```
```
Slice for: src/App.tsx
Core (1 files, 150 LOC):
src/App.tsx (150 LOC, ts)
Deps (3 files, 420 LOC):
[d1] src/hooks/useAuth.ts (80 LOC)
[d2] src/contexts/AuthContext.tsx (200 LOC)
[d2] src/utils/api.ts (140 LOC)
Consumers (2 files, 180 LOC):
src/main.tsx (30 LOC)
src/routes/index.tsx (150 LOC)
Total: 6 files, 750 LOC
```
## Cross-Match Search
Multi-term queries show where terms meet, not flat OR:
```bash
loct find 'Snapshot FileAnalysis'
```
```
=== Cross-Match Files (9) ===
src/snapshot.rs: Snapshot(6), FileAnalysis(4)
src/slicer.rs: Snapshot(2), FileAnalysis(3)
...
=== Symbol Matches (222 in cross-match files) ===
src/snapshot.rs:20 - Snapshot [struct]
src/types.rs:15 - FileAnalysis [struct]
...
=== Parameter Matches (4 cross-matched) ===
src/slicer.rs:45 - snapshot: &Snapshot in build_slice(analyses: &[FileAnalysis])
```
## jq Queries
Query snapshot data directly:
```bash
loct '.dead_parrots' # Dead code findings
loct '.summary.health_score' # Health score
```
## CI Integration
```bash
loct lint --fail --sarif > results.sarif # SARIF for GitHub/GitLab
```
## Crates
| [`loctree`](https://crates.io/crates/loctree) | Core analyzer + CLI (`loct`, `loctree`) |
| [`report-leptos`](https://crates.io/crates/report-leptos) | HTML report renderer (Leptos SSR) |
| [`loctree-mcp`](https://crates.io/crates/loctree-mcp) | MCP server for AI agents |
## Development
```bash
make precheck # fmt + clippy + check (run before push)
make install # Install loct + loctree-mcp
make test # Run all workspace tests
make publish # Cascade publish to crates.io
```
## Badge
```markdown
[](https://crates.io/crates/loctree)
```
## License
MIT OR Apache-2.0. See [LICENSE-MIT](LICENSE-MIT) and [LICENSE-APACHE](LICENSE-APACHE).
---
VibeCrafted with AI Agents (c)2025-2026 VetCoders