[[wikilinks]] and YAML frontmatter — the two building blocks Obsidian uses to structure a knowledge graph. Every note’s type field becomes a graph node label, and every frontmatter key whose values contain wikilinks becomes a typed graph edge. No plugins, no exports, no syncing: smolbren reads your vault directly from disk.
Find your vault path
Obsidian shows the full path to your vault in Settings → About, under the vault name at the top of the left sidebar.Common vault locations:
Copy the full absolute path — you’ll use it in the next step.
| Platform | Example path |
|---|---|
| macOS (local) | ~/Documents/Notes |
| macOS (iCloud) | ~/Library/Mobile Documents/iCloud~md~obsidian/Documents/MyVault |
| Linux | ~/notes or ~/Documents/Notes |
| Windows | C:\Users\you\Documents\Notes |
Register the vault
Run smolbren writes the registration to
smolbren vault add with a short name for the vault and its path. Pass --default to make it the vault smolbren uses when no --vault flag is given:~/.smolbren/config.json. You can register multiple vaults and switch between them with --vault <name>.To see all registered vaults:Build the index
Run
Subsequent runs are incremental: smolbren compares content hashes and only re-processes changed files, so re-indexing a large vault after a few edits takes a fraction of a second.
smolbren index to scan the vault, parse frontmatter and body text, build the BM25 full-text index, resolve wikilink edges, and write the index data to ~/.smolbren/vaults/obsidian/.| Field | Meaning |
|---|---|
scanned | Markdown files found in the vault |
added | Notes written to the index for the first time |
updated | Notes re-indexed because their content changed |
removed | Notes deleted from the index because the file is gone |
edges | Typed wikilink edges resolved and stored |
unresolved_edges | Wikilinks that point to a note not yet in the vault |
duration_ms | Wall-clock time for the run |
Explore the ontology
After indexing, inspect what smolbren discovered about your vault’s structure.Node types — the unique values of the Edge types — the frontmatter keys that contained wikilinks, and how many edges each produced:These are the labels and relationship types you’ll use in Cypher queries. See Graph Queries for patterns.
type frontmatter key across all notes:Working with Obsidian frontmatter
Obsidian calls YAML frontmatter “Properties”. smolbren treats these properties as the schema of your knowledge graph:- The
typekey defines the node label for that note. - Any key whose value is a wikilink (or a list of wikilinks) becomes a relationship type, with the host note as the source and the linked note(s) as targets.
- All other scalar values (
status,created,url, etc.) are stored in thefrontmatterobject returned bysmolbren get.
| Derived artefact | Value |
|---|---|
| Node label | blog |
Edge type for | → orgs/junaid-foo |
Edge type mentions | → projects/prism, repos/smolbren, blogs/context-development-lifecycle, blogs/context-platform-engineering |
Edge type merged_from | → blogs/context-development-lifecycle, blogs/context-platform-engineering |
Edge type derives_from | → Journal/2026, June 01, Journal/2026, June 04 |
| Scalar frontmatter | status: "draft", created: "2026-05-10" (available via smolbren get) |
type key are still indexed and searchable — they just don’t carry a node label and are only reachable via the catch-all Note label in Cypher.
Keeping the index fresh
Runsmolbren index again after you make changes in Obsidian. Because indexing is incremental, only modified files are re-processed:
--full:
smolbren index whenever you want the index to reflect the current state of your vault. Many users add it as a shell alias or a short script that runs before any search or query session.
The
.obsidian/ directory inside your vault — which stores Obsidian’s own configuration JSON files — is automatically skipped during indexing. Only .md files outside that directory are parsed.