Skip to main content

ovecc index

Builds or updates the local architecture database: parses source files, resolves imports, extracts symbols, call edges, HTTP APIs and schema accesses, ingests Git history, evaluates rules and security detectors, and persists everything (plus a snapshot) into .ovecc/graph.db. Run it once per revision; everything else reads this model.

Usage: ovecc index [OPTIONS] [PATH]

Example

$ ovecc index . --stats
Indexed repository: ~/projects/acme-shop
Database: ~/projects/acme-shop/.ovecc/graph.db
Snapshot: snapshot:8230ae07ba488166774d0865
Files scanned: 9
Files indexed: 9
Files parsed: 0
Files from cache: 9
Modules: 6
Dependencies: 17
External dependencies: 5
Symbols: 27
Calls: 51
APIs: 4
Tables: 3
Commits ingested: 1
index phases (ms):
discovery 48
parse 1
resolve 7
analyze 109
persist 64
total 231
stats: 374 ms wall, 0.3 MB peak heap

This run was fully incremental — Files parsed: 0, Files from cache: 9 — because nothing changed since the previous index. After editing five files, only those five are re-parsed.

Options

OptionEffect
[PATH]Repository to index (default: current directory / --repo)
--exclude <GLOB>Extra glob(s) to skip, on top of the built-in defaults (node_modules, .venv, dist, target, …). Repeatable
--include <GLOB>Restrict indexing to these glob(s) only. Repeatable
--no-gitSkip Git facts for this run (disables churn/ownership signals)
--statsPer-phase timings + peak memory on stderr

Plus the global options.

ovecc index . --exclude "vendored/**" --exclude "generated/**"
ovecc index . --include "packages/api/**"

Excludes can also live in config.toml under [index] exclude.

Behavior notes

  • Incremental by design. A content-addressed parse cache means unchanged files are never re-parsed; differential sync writes only what changed, plus a new snapshot.
  • Snapshots accumulate. Each run appends a snapshot tagged with the current commit — the raw material for review, drift, and history.
  • Git ingestion powers churn and ownership metrics. Commits ingested: 0 (or --no-git) simply disables those signals; hotspots then label churn/ownership as n/a.
  • On very large repositories, the first index is the expensive one (discovery + persist dominate); subsequent runs are cache-hits. Queries against the resulting database are sub-second regardless of repository size.