Magellan
Version: 4.11.1
Magellan is a deterministic codebase indexing tool. It watches or scans source trees, extracts symbols, references, calls, AST nodes, code chunks, CFG data, and coverage metadata, then stores those facts in a local SQLite database for fast CLI and downstream-tool queries.
Magellan is intentionally fact-oriented: it records what is present in source code and leaves higher-level reasoning to tools such as llmgrep, Mirage, and Splice.
Technical Architecture
Compiler frontends
- Tree-sitter multi-language symbol extraction: Rust, Python, C, C++, Java, JavaScript, TypeScript, Go, CUDA
- C/C++ CFG via clang → LLVM IR (feature
llvm-cfg,llvm_ir_parser) - Java CFG via javac →
.classbytecode (javac_invoker,class_parser)
Indexed facts
- Symbols with canonical / display FQNs, byte + line spans, stable IDs
- References and interprocedural call graph
- AST nodes and code chunks for source retrieval
- CFG blocks and CFG edges,
#[cfg]attribute inheritance - Coverage ingestion from LCOV into CFG side tables
Storage
- SQLite, schema v18: repository snapshots, temporal symbol/edge history, graph memory tables, project metadata, FTS5 full-text search, cfg-aware CFG blocks
- Auto-detect project layout from
Cargo.toml,pyproject.toml,go.mod,package.json,tsconfig.json,pom.xml,CMakeLists.txt
Keyword index: code intelligence · codebase indexing · compiler frontend · tree-sitter · LLVM IR · Java bytecode · call graph · interprocedural · control-flow graph · CFG · AST · FTS5 · SQLite · Rust
Current Storage Model
The supported user-facing database is SQLite:
code.db
Use .db files for normal operation.
Schema version: 18 (repository snapshots, temporal symbol/edge history, telemetry events, cfg-aware CFG blocks, project metadata, FTS5 full-text search, graph memory tables)
Features
- Multi-language symbol extraction with tree-sitter: Rust, Python, C, C++, Java, JavaScript, TypeScript, Go, and CUDA
- Stable symbol IDs, canonical FQNs, display FQNs, and byte/line spans
- File watching and one-shot indexing
- References and call graph queries
- AST node storage and AST queries
- Code chunks for source retrieval and editor context
- CFG blocks and CFG edges for control-flow analysis
#[cfg]attribute extraction: CFG blocks inherit cfg conditions from function attributes- Cargo.toml manifest parsing: features, dependencies, and test/bench/example targets
.magellan.tomlproject configuration with include/exclude filters- Auto-detect project layout from
Cargo.toml,pyproject.toml,go.mod,package.json,tsconfig.json,pom.xml,CMakeLists.txt - Coverage ingestion from LCOV into CFG coverage side tables
- Graph algorithms: reachability, dead code, cycles, condensation, paths, slice
- Temporal history: snapshot ingestion, as-of symbol lookup, barcode-style lifetime queries, and SCC persistence analysis
- HopGraph v2: embedding-based semantic symbol search with HNSW, name resolution, and
--hops Ngraph expansion via BFS on REFERENCES edges - Source inventory: index wiki pages, specs, and other non-code documents
- Candidate facts: structured knowledge triples linked to source documents
- JSON, pretty JSON, human output, and graph exports
- LSIF import/export and SCIP export
- Impact export: blast radius analysis for single symbols
- Repo-root export convention: automatic
.magellan/directory exports - Pre-commit hooks: git hooks for blast score validation
doctorchecks for schema and database health
Install
From crates.io (recommended):
One-line install with service + pre-commit hook setup:
# bash / zsh
|
# fish
|
Both scripts install the binary, create ~/.magellan/, set up a systemd user service (Linux), and install a pre-commit blast-radius warning hook. Pass --no-service or --no-hook to skip either step.
Requires: Rust toolchain (rustup.rs), git, jq (for the hook).
Quick Start
# Orient on an existing project (see what is indexed)
# Initialize project configuration
# Build an index
# Check database contents
# Query symbols in a file
# Find symbols
# Show incoming or outgoing references/calls
# Index or delete one file
# Refresh from git working tree changes
# Recompute derived metrics
# Build temporal history from git commits
# Semantic symbol search (requires embed + configured embeddings)
# Re-embed after significant code changes so HopGraph stays current
# (magellan watch updates the graph, but not embeddings automatically)
Coverage
Magellan can ingest LCOV data and attach it to CFG blocks and edges:
Status JSON always includes a stable coverage object:
When coverage exists, source, revision, and ingested_at are included.
Service Daemon
Magellan can run as a background daemon with per-project filesystem watchers and a JSON-RPC control socket for integration with downstream tools.
The daemon uses notify::RecommendedWatcher directly with custom debouncing
that filters out read-only filesystem events (ACCESS/OPEN/CLOSE_NOWRITE).
Only write-side mutations (CREATE/MODIFY/REMOVE) are tracked. This prevents
the feedback loop where reading a file for reconciliation would trigger
re-indexing.
The daemon stores databases at ~/.magellan/<name>/<name>.db. The JSON-RPC
socket (at $XDG_RUNTIME_DIR/magellan.sock) supports project management,
cross-project queries, and an evolution loop for automated refactoring
candidates. See docs/API_INTEGRATION.md for the full method reference.
Useful Commands
# Blast score single-symbol impact analysis
# Install pre-commit hooks for blast score checking
# Natural language query routing (callers, CFG, cycles, impact, semantic search, find)
# Grounded investigation packet (term extraction → symbol find → callers/callees/impact/context)
External CFG Tools
C/C++ and Java CFG extraction uses installed external tools detected at runtime. No special build flags are required.
C/C++ (clang required): When clang is on PATH, magellan compiles each
C/C++ file to LLVM IR and extracts accurate per-function CFGs and call edges.
Falls back to tree-sitter approximations when clang is absent.
Java (javac required): When javac is on PATH, magellan compiles .java
files and extracts CFG from bytecode.
compile_commands.json: For projects with non-trivial build flags (defines,
include paths, language standards), load a compile_commands.json via the
--compile-commands CLI flag or the CodeGraph::set_compile_commands API. Per-file
flags are forwarded to clang during CFG extraction.
Neither clang nor javac is required. When absent, CFG extraction degrades gracefully to tree-sitter-based approximations.
Documentation
- MANUAL.md: command reference and workflows
- CHANGELOG.md: release notes
- docs/MAGELLAN_ARCHITECTURE.md: architecture
- docs/SCHEMA_SQLITE.md: SQLite schema
- docs/SCHEMA_REFERENCE.md: stable IDs and data model
- docs/API_INTEGRATION.md: Rust/API integration notes
- docs/JSON_EXPORT_FORMAT.md: JSON response shape
- docs/CONTEXT_API_CONTRACT.md: context API contract
- docs/TESTING.md: verification commands
Acknowledgements
The blast-radius impact scoring (magellan blast-score), the symbol-map and
impact JSON exports (magellan export), the pre-commit hook (magellan install-hook),
and the repo-root .magellan/ file convention were inspired by
codeindex by scheidydude.
License
GPL-3.0