- created
- 2026-07-26
- updated
- 2026-10-30
Hierarchy
Hierarchy
Links make a graph; sometimes you also want a tree. track builds hierarchy navigation from one
conventional relation property: up. A note that declares up:: [[Parent]] sits under that
parent, and the engine derives everything else — no separate outline file to maintain. If you know
the up/parent convention from Obsidian vaults or org-mode's file hierarchies, this is the same
idea.
Declaring a parent
up is an ordinary property whose value is a wiki link. Write it wherever
properties live:
up:: [[Projects]]or set it on the sidecar from the CLI:
track meta --title "My note" --set "up=[[Projects]]"Only a link-typed value counts (up:: draft is just a string property), and the link resolves the
same way a body [[link]] does. A note may declare several parents; the breadcrumb trail follows
the first one, while every parent still lists the note among its children.
A published site is a vault, so the same rule holds there: this page's parent is the up in its
sidecar, and the trail you see above it was built from that.
What you get
- Breadcrumbs — the Web workspace note view (and this published site) shows the chain of
uplinks above the note, root first. The trail at the top of this page comes from this page's ownupproperty; Block links shows a two-level trail. - Children — next to the backlinks, each note lists the notes whose
uppoints at it. Open track and you'll see the help topics gathered there. - The whole tree — the workspace rail carries a hierarchy button between search and the graph.
Hovering it opens the vault's entire
upforest as a folding tree, in title order. The roots and their children are always in view; anything deeper unfolds where you ask, and the tree remembers which branches you left open. Notes the hierarchy does not place — no parent, no children — are simply absent from it. - CLI/API —
track nav --id N(or--path P) prints the same data as JSON:
{"trail": [{"note_id": 1, "title": "Projects", "...": "..."}], "children": []}The live server serves it with each note response, and track export-site bakes it into the
published bundle, so all three surfaces agree.
Notes
- A cycle (
A → B → A) is harmless: the trail stops where it would repeat a note. - In a vault the relation is data in your notes —
track propsand queries see it like any property — but the note view keeps it out of the property strip: the breadcrumbs and children are its display, and one relation should not render twice.