by Paulo Vianna
Turn graph filter queries into removable chips: Esc leaves editing without clearing, and Enter saves the filter as a chip you can remove with x.
Graph Filter Chips
Turn the graph view filter into removable chips.
Today the graph filter is a single text field, and pressing Esc wipes it out.
This plugin changes that:
| Action | Vanilla Obsidian | With Graph Filter Chips |
|---|---|---|
Esc | clears the whole filter | just leaves the text field, keeps the text |
Enter | only re-applies the filter | turns the text into a chip |
| Remove a term | edit the raw text | click the x on the chip |
Features
Entercommits the current query as a chip.Esconly blurs the field; the filter stays.- Each chip has an x to remove just that term.
- Click a chip's label to pull it back into the input for editing.
- Works on the global graph and on local graphs.
- The filter keeps being saved normally in
graph.json, so it survives restarts.
Why
The graph filter is easy to lose: a single stray Esc erases a carefully built
query. Chips make the filter explicit, visible, and individually removable.
Installation
Community plugins (after it is published)
Settings → Community plugins → Browse → search for Graph Filter Chips → Install → Enable.
BRAT (beta)
- Install the BRAT plugin.
- Run BRAT: Add a beta plugin for testing and paste the repository URL.
Manual
Copy main.js, manifest.json, and styles.css into
<your-vault>/.obsidian/plugins/graph-filter-chips/ and enable the plugin.
Usage
- Open the graph view and expand the Filters section.
- Type a query, for example
path:"Projects",-file:home, ortag:idea. - Press
Enterto turn it into a chip. - Press
Escany time to leave the field without losing what you typed. - Click the x on a chip to remove that filter.
How it works
The plugin relies on a few stable graph internals:
- The filter input is
.graph-controls .setting-item.mod-search-setting input[type="search"]. - Obsidian reads the effective value with
engine.filterOptions.search.getValue()and applies it withengine.updateSearch(). Escclearing the field is the native behavior of<input type="search">in Chromium, not Obsidian's code.
The plugin overrides getValue/setValue on the filter instance only
(chips become the source of truth) and intercepts keydown in the capture
phase on an ancestor of the input, so its preventDefault runs before the
native clear. Everything is restored when the plugin unloads.
Compatibility and caveats
- Built and tested against Obsidian 1.12.7 (
minAppVersion). - Because it hooks undocumented graph internals, a future Obsidian update could change these objects. The plugin fails gracefully (it simply stops attaching), but it may need maintenance. Issues and PRs are welcome.
- A chip typed with spaces stays one chip in the session; after reload, the saved query is split back into chips on whitespace (outside quotes). The filtering result is identical.
Development
No build step, plain JavaScript.
# copy the plugin into a vault for live testing
./scripts/sync-to-vault.sh
Then reload Obsidian (Ctrl/Cmd + P → Reload app without saving).
License
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.