An Obsidian plugin that makes links first-class citizens. Notes are atoms; the connections between them are bonds — and a bond is itself a note that carries its own content.
Information that belongs to a relationship (credentials for a site, the reason two ideas connect, the history between two people) lives in exactly one place — the bond note — and is rendered automatically at the bottom of both endpoint notes. No more copying the same snippet to both ends.
We never actually know a thing in itself — we know it in relation to other things. A word is defined by other words. A price means nothing except relative to other prices. You know a person through shared history, a concept through what it resembles and what it opposes. Strip away everything a thing relates to and there is nothing left to know. All knowledge is relative; the relations are the knowledge.
The brain works the same way: memory isn't stored in neurons, it's stored in the connections between them. A synapse is not a wire — it's where the information lives.
Yet almost every note-taking tool, Obsidian included, inverts this: notes (nodes) get all the structure — titles, content, metadata, history — while the links that give them meaning are reduced to bare pointers with no content, no identity, no home. The most important part of a knowledge graph is the part you can't write anything in.
Bonds fixes that inversion. A bond is a real note: it can hold content, carry a type, appear in search, and grow over time — because the relationship between two ideas is often the most valuable thing you know about either of them. The rendered section in each note is titled Synapses by default (configurable) — a nod to where nature keeps its knowledge.
A bond is a plain markdown note with frontmatter:
---
synapse: bond
atoms:
- "[[Amazon]]"
- "[[Password]]"
type: credential
---
login: you@example.com
2FA: authenticator appOpen Amazon.md or Password.md and the bond's content appears in a collapsible Synapses section at the bottom of the note. Edit the bond once, both ends update.
Everything is plain markdown — without the plugin, bonds are still ordinary notes that link to both atoms, visible in graph view and search. Nothing is locked in.
- Create bond from current note (command palette) — fuzzy-pick the other atom(s); the bond note is scaffolded in your bonds folder and opened for editing. Enter picks the final atom and creates the bond; Shift+Enter adds an atom and keeps picking, so a bond can join any number of atoms.
- Bonds render at the bottom of notes in both reading and editing mode.
typeis free-form — let your own taxonomy emerge.- Rebuild bond index — manual refresh if anything looks stale.
- Bonds folder — where new bond notes are created (default:
Bonds) - Show bonds in notes — toggle the rendered section
- Collapse bonds by default — start bonds folded
Until Bonds is in the community plugin browser, install manually: copy manifest.json, main.js, and styles.css into <your vault>/.obsidian/plugins/bonds/, then enable it in Settings → Community plugins.
npm install
npm run dev # watch mode
npm run build # type-check + production buildFor a live dev loop, symlink this folder into a test vault's .obsidian/plugins/ and reload the plugin after builds.
npm version patch # bumps package.json, manifest.json, versions.json
git push && git push --tagsPushing a tag triggers the GitHub Action, which builds and creates a draft release with main.js, manifest.json, and styles.css attached.
- Bond strength — explicit or emergent from traversal
- Custom atom/bond graph view (edges rendered as edges, thick when strong)
- In-place bond editing from the atom's view