Wiki-links.
[[page-name]] · Obsidian syntax
Wiki-links are how pages reference each other.
Resolution is by basename only — which is why basenames must be unique across the whole tree.
Render in Obsidian, scan with lint.py, follow when reading.
A link from one page to another resolves by file basename — no folder path needed.
Syntax
# basic link — render and follow by basename [[checkout-api]] # alias — display different text [[checkout-api|the checkout service]] # inside frontmatter — same resolution services: [checkout-api, payments-db] # in body prose — link the FIRST mention only [[connection-pool-exhaustion]] surfaced again on 2026-04-12; pool exhaustion remained the dominant pattern after that.
Rules
- Syntax is
[[page-name]]or[[page-name|display text]]. The page-name is the file basename without.md. - Link the first mention of any other entity on a page. Subsequent mentions stay plain text.
- Frontmatter list values are wiki-links too —
services: [checkout-api]resolves towiki/services/checkout-api.md. - Basenames are unique across the entire wiki tree. Two pages cannot share one —
tools/lint.pyenforces this because collisions break resolution. - If a linked page doesn't exist, create a stub. Never leave a dangling link.
- Links are case-sensitive on the filesystem but Obsidian normalises — pick one casing convention and stick to it (we use kebab-case).
Why basename-only resolution
Obsidian and the lint tool both resolve [[checkout-api]] by scanning the whole wiki/ tree for a file named checkout-api.md.
This lets pages move between folders without breaking links — but it requires every basename to be globally unique.
If you ever need two pages with the same logical name (rare), disambiguate the slug at file-rename time, not by adding folder prefixes to the link.