Similar Notes

unlisted

by watthem

Find semantically similar notes using local TF-IDF. No API keys, no external calls.

1 starsUpdated 1mo agoMIT
View on GitHub

Similar Notes

Similar Notes is an Obsidian plugin that surfaces related notes in a sidebar using local TF-IDF + cosine similarity via @watthem/quarrel. It is designed to be fast, private, and explainable: no network calls, no accounts, and no black-box ranking.

Similar Notes sidebar with related results and keyword chips

Status

Manual install is available from GitHub Releases. The plugin is not yet listed in Obsidian's Community Plugins directory.

Features

  • Local-first: Indexing and ranking happen entirely on-device.
  • Explainable results: Similarity is based on TF-IDF terms and cosine similarity, not embeddings.
  • Keyword chips: Promote terms from the active note to quickly bias the ranking.
  • Change detection: See when notes have changed since the last index build and rebuild in one click.
  • Optional auto-reindex: Rebuild automatically after vault changes with a configurable delay.

Installation

  1. Download main.js, manifest.json, and styles.css from the latest release.
  2. Create a folder at .obsidian/plugins/quarrel-similar-notes/ inside your vault.
  3. Copy the three release files into that folder.
  4. Reload Obsidian and enable Similar Notes in Settings -> Community plugins.

Usage

  1. Open the Similar notes view from the ribbon or the command palette.
  2. Build the index the first time you open the plugin.
  3. Switch between notes to see related notes update in the sidebar.
  4. Click keyword chips to boost specific terms in the ranking.
  5. Rebuild the index after large vault changes, or enable auto-reindex in settings.

Keyword chips with active filters highlighted

Commands

  • Show similar notes panel: Open the sidebar view.
  • Rebuild similarity index: Rebuild the TF-IDF index for the current vault.
  • Check for changes: Show how many notes changed since the last index build.

Settings

SettingDefaultDescription
Maximum results5Number of similar notes to show (1-20).
Minimum similarity15%Minimum score required for a result to appear (0-50%).
Hash dimensions2048Vector size used for hashing. Higher is more precise but slower.
Content excerpt length1500Characters of note content to analyze.
Open panel on startOffOpen the view automatically when Obsidian starts.
Auto-reindex on changesOffRebuild automatically when notes change.
Auto-reindex delay30sDebounce window before an automatic rebuild.

Settings tab

How It Works

Similar Notes builds a TF-IDF index across markdown files in your vault:

  1. Tokenize each note into meaningful terms.
  2. Weight terms by how distinctive they are across the vault.
  3. Hash the term weights into fixed-size vectors.
  4. Rank notes by cosine similarity.

This favors notes that share distinctive vocabulary, which makes the ranking easier to inspect and reason about than embedding-based approaches.

Privacy And Disclosures

This plugin follows Obsidian's disclosure guidance for community plugins.

ConcernStatus
Network callsNone
External APIsNone
Accounts requiredNone
Telemetry or analyticsNone
External file accessReads markdown files from the current vault only
Local storageStores the index in the plugin data folder inside the vault
Dependencies@watthem/quarrel only
PaymentsNone
AdsNone
Closed-source componentsNone

Development

git clone https://github.com/watthem/quarrel-similar-notes.git
cd quarrel-similar-notes
npm install
npm run dev

Useful commands:

  • npm run build builds the release bundle.
  • npm test runs the test suite.
  • npm run release copies release assets to dist/release/.

Feedback

Bug reports and feature requests are welcome in GitHub Issues. If you want to discuss ranking behavior or UX, the Obsidian forum is a good place to start a thread.

License

MIT. See 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.