Neighbourhood Graph
approvedby agilesmagile
This plugin has not been manually reviewed by Obsidian staff. Interactive D3.js force-directed graph showing the current note's neighbourhood in a sidebar panel. Nodes connected by shared tags and backlinks.
Neighbourhood Graph
An Obsidian plugin that shows the current note's neighbourhood as an interactive force-directed graph in a sidebar panel. Navigate your vault by exploring connections between notes, shared tags, and backlinks.
Screenshots will be added in a future update.
What it does
Opens as a right-sidebar panel. As you navigate between notes, the graph recentres on the active note and shows:
- The focus note highlighted with an amber glow, largest node
- Neighbour notes connected via shared tags or backlinks, sized by relevance
- Shared tag nodes (diamond shapes) representing tags that connect notes
- Typed edges — when Excalibrain is installed, edges between related notes are drawn with distinct line styles
Hover any node to highlight its connections. At depth 2, secondary connections also light up, revealing the structure around any note in the neighbourhood.
Interactions
| Action | Behaviour |
|---|---|
| Hover node | Highlights direct connections (and secondary connections at depth 2) |
| Hover edge | Shows the relationship type if the edge is a typed Excalibrain relationship |
| Click | Recentres the graph on that note |
| Double-click | Opens the note in the editor and recentres |
| Drag | Repositions a node |
| Scroll | Zoom in and out |
Installation
From the community plugin directory
- Settings > Community plugins > Browse
- Search "Neighbourhood Graph"
- Install and enable
Manual install
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Create a folder at
<your vault>/.obsidian/plugins/neighbourhood-graph/ - Copy all three files into that folder
- Settings > Community plugins > reload and enable Neighbourhood Graph
Settings
There are two places to configure the plugin:
Floating panel (gear icon on the graph)
Quick access to the controls you reach for most often.
| Setting | Description | Default |
|---|---|---|
| Highlight depth | Tiers of connections highlighted on hover. 1 = direct only. 2 = direct + secondary. | 2 hops |
| Max neighbours | Cap on displayed notes. Most strongly connected shown first. | 30 |
| Size by relevance | How much node size varies by connection strength. 0 = uniform, 10 = dramatic. | 5 |
| Max node size | Maximum radius in pixels of the largest neighbour node. Reduce for a compact sidebar. | 10 |
Physics sliders — four controls for fine-tuning the graph layout: line colour, line thickness, spread (repulsion), and link pull (clustering). Changes are reflected live as you drag without rebuilding the graph.
Plugin settings tab (Settings > Neighbourhood Graph)
| Setting | Description | Default |
|---|---|---|
| Highlight depth | Same as the floating panel. | 2 hops |
| Max neighbours | Same as the floating panel. | 30 |
| Max node size | Maximum node radius. Reduce for compact sidebars; increase for full-panel views. | 10 |
| Show path in tooltip | Display the vault-relative folder path when hovering a note node. | On |
| Default node colour | Colour used for notes not matching any colour group. Falls back to your theme's accent colour. | Theme accent |
Colour groups
Assign colours to notes by query. Three query types are supported:
path:people/— matches notes whose path starts withpeople/tag:#project— matches notes carrying the#projecttag- Plain text — matches against note title
First matching rule wins. Groups are collapsible in the settings tab once at least one exists. Use the Import button to copy colour groups directly from Obsidian's built-in graph view.
Excalibrain integration
If Excalibrain is installed, this plugin reads its typed relationship fields from note frontmatter to draw distinct edge styles and weight connections more accurately.
| Relationship | Edge style | Default frontmatter fields |
|---|---|---|
| Parent / child | Solid line | Parent, Parents, Children, Child, up, down |
| Friend | Dashed line | Friends, Friend, similar, supports, alternatives |
| Opposes | Dotted line | opposes, disadvantages, cons |
| Previous / next | Dash-dot line | Previous, Next, Before, After |
The plugin detects three states:
- Not installed — plain edges only; the settings tab explains how to get Excalibrain
- Installed, not yet opened — uses Excalibrain's built-in English field names
- Installed and configured — reads your saved Excalibrain settings automatically
Toggle the integration on or off with the Use Excalibrain relationships toggle in the settings tab. When active, typed links receive a strength bonus so they rank higher in the neighbourhood.
Hover any typed edge to see the relationship label ("parent of", "friend", "opposes", etc.) in a tooltip.
The legend in the top-left of the graph panel shows edge style swatches that reflect your current line colour and thickness settings, so the key always matches the graph.
How it works
The plugin reads Obsidian's metadata cache for tags, resolved links, and frontmatter links. No custom frontmatter is required for basic use. Neighbours are scored by connection strength:
- Shared tags between the focus note and a neighbour
- Direct wikilinks (outbound and inbound)
- Bidirectional links score higher
- Well-connected hub notes rank higher (logarithmic scaling)
- Excalibrain-typed relationships receive an additional strength bonus
The top N neighbours (configurable) are shown. Node size reflects relevance to the focus note — salience scaling is anchored to the displayed set, so variation fills the full range regardless of how many notes are capped.
Works well with
Graph Label Above — moves node labels above nodes in Obsidian's full graph view so they are not obscured by an enlarged mouse pointer. If you use Neighbourhood Graph alongside the built-in graph view, this is a natural companion.
Licence
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.