# Obsidian Bases

Bases is Obsidian's native answer to Dataview: a `.base` file declares filters, computed formulas, and named views over the frontmatter of every note in the vault, and Obsidian renders each view as a sortable table. Unlike Dataview it ships with the app and needs no plugin, and unlike Dataview the query language is YAML rather than a DSL, which makes a `.base` file readable by anything that can parse YAML — including whatever ends up serving the vault.

A view is embedded into a note like any other block: `![[wiki.base#Orphans (no inbound links)]]`.

## What this vault uses it for

`wiki.base` at the vault root scopes itself to markdown files in `wiki/` or `toolbox/` and defines four formulas over each note:

```yaml
formulas:
  age_days: (today() - file.ctime).days.round(0)
  stale_days: (today() - file.mtime).days.round(0)
  backlink_count: file.backlinks.length
  link_count: file.links.length
```

Five views build on those: All Pages, Orphans (no inbound links), Stale Pages, By Type, and Recent. The root `index.md` embeds four of them, which is what makes the front page a dashboard rather than a table of contents.

The filter vocabulary in use is small — `file.ext`, `file.inFolder()`, `file.name !=`, `file.backlinks.length == 0` — plus `groupBy`, `order`, `limit`, and `Average` summaries. That narrowness is the reason the vault-site spec in `meta/` treats a Bases interpreter as tractable: everything the five views need is already computed when a site walks the vault, so the subset can be reimplemented without implementing Bases.

## The orphan view has never worked

`Orphans (no inbound links)` filters on `file.backlinks.length == 0` and has never returned a row. `wiki/index.md` links to every wiki page except itself and the log, so every page has at least one backlink by construction. The view is not broken; the metric it measures is meaningless as long as catalog pages are counted.

Obsidian gives no way to exclude a page from backlink counting, which is why the vault half-fixed this by hand: the `Stale Pages` view filters out `file.name != "index"` and `file.name != "log"` while the orphan view does not. `CLAUDE.md` now marks those pages `type: catalog` and `type: log` so a consumer that can filter — a site, a script — has something explicit to filter on. Inside Obsidian the view stays empty.

Related: [[obsidian]], [[files-as-graph-database]], [[llm-wiki-pattern]].
