What the symbol graph gives you
On by default, for Rust, TypeScript/JavaScript, Python and Go.
Written By Dustin
Last updated 27 minutes ago
TOVIO indexes your code into a symbol graph as part of ordinary operation — definitions, references, and the typed relationships between them. tovio commit builds the index for the files that changed; nothing separate to run, no daemon, no server.
Which languages
Four backends ship on by default, all pure Rust with no C toolchain to install:
A file in any other language is simply not indexed, and everything about it falls back to a text diff. That is the designed behaviour, not a failure. The same applies to a file above the indexer's size cap or nested unusually deeply — a large generated file in a supported language is skipped before parsing, which is the usual explanation when a symbol you expected does not turn up.
A wider set of languages exists as an opt-in build tier — generic tree-sitter grammars, off by default, Java and Ruby today. It is off by default deliberately: those grammars need a C toolchain, and the default build promises none.
What it enables
- Find definitions and references across the repository, by symbol rather than by string.
- Ranked symbol search, for when you do not know the exact name yet.
- Interface-level diffs that flag breaking changes a textual diff makes look trivial.
- Impact and relation queries — who calls this, which tests cover it, what depends on it.
- Semantic-aware landing, where a protected lane can refuse a breaking change.
- Symbol context for agents, so an agent orients itself without reading the whole tree.
It is advisory by design
The semantic layer is never on a core critical path. If the indexer is unavailable, a language is unsupported, or a symbol object is malformed, ordinary version control keeps working unchanged — commits still commit, merges still merge.
There is exactly one exception, and it is something you have to switch on: a protected lane can declare that a semantic check is required, and then a breaking change is refused at the land gate. Nothing else in the layer can block anything.
Protected files are not indexed in the clear
A symbol name and signature are derived from the file's plaintext, so they are exactly as sensitive as the file. A policy-protected file never produces a readable symbol shard: its shard is sealed under the same policy envelope as the content, and a reader who cannot decrypt the file sees neither its symbols nor any hint that they exist.
Where the commands live
Both tovio semantic and tovio behavioral are Advanced-tier, so they are hidden from the default command index to keep the everyday surface small. They run normally; they just are not listed until you ask:
tovio help --advancedTurning it off
It is a default-on build feature. A build with --no-default-features compiles no indexer at all and no tovio semantic command — the subcommand is absent from that binary, so a query is rejected as unrecognised rather than returning an empty result.
Two things to know before reaching for it. The flag switches off more than the symbol graph; it is the minimal offline-core build, not a semantic-only toggle. And such a binary cannot land onto a lane that requires a semantic check — that land is refused rather than waved through.