Find related notes in your vault using bloom filter similarity analysis.



The plugin automatically indexes your notes and updates the index when notes are modified. However, if you want to force a complete re-indexing of all notes:
Force re-indexing is useful when:
Settings:
Enable to view detailed statistics about the plugin's operation in the developer console.
The plugin uses bloom filters with n-gram analysis:
git clone https://github.com/mrboxtobox/obsidian-related-notes.git
cd obsidian-related-notes
npm install
npm run build
npm run dev - Starts development build with hot-reloadnpm run dev:test - Starts development build with hot-reload and copies files to test-vault (you will need to create this)npm run dev:custom - Starts development build with custom target directories (set TARGET_DIRS env var)npm run build - Creates a production buildnpm run build:test - Creates a production build and copies files to test-vaultnpm run build:custom - Creates a production build with custom target directories (set TARGET_DIRS env var)npm run version - Updates version numbers in manifest.json and versions.jsonsrc/main.ts - Main plugin file with core functionality and event handlingsrc/core.ts - Core similarity algorithms and interfacessrc/bloom.ts - Bloom filter implementation for efficient similarity calculationsrc/multi-bloom.ts - Multi-resolution bloom filter with adaptive parameterssrc/settings.ts - Settings tab implementationsrc/ui.ts - User interface components for related notes viewsrc/styles.css - Custom CSS styles for the pluginsrc/manifest.json - Plugin manifest filepackage.json - Project configuration and dependenciesesbuild.config.mjs - Build configuration for esbuild that handles copying filesobsidian - Obsidian API types and utilitiesThe following scripts are available to streamline the release process:
npm run validate
npm run release:patch # For bug fixes
npm run release:minor # For new features
npm run release:major # For breaking changes
The release script will:
main.jsmanifest.jsonstyles.cssSpecial thanks to the following people for filing bug reports and helping improve this plugin:
Your feedback has been invaluable in improving this plugin.
This project is licensed under the MIT License. See the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
If the plugin freezes during indexing or becomes unresponsive, especially in large vaults (5,000+ notes):
Quick Recovery Steps:
# Navigate to your vault's .obsidian folder and run:
rm -rf .obsidian/plugins/related-notes
Or manually delete the .obsidian/plugins/related-notes folderAlternative Recovery (Preserve Settings):
If you want to keep your plugin settings:
# In your vault's .obsidian/plugins/related-notes/ folder:
rm -f .bloom-filter-cache.json
rm -f bloom-filter-cache.json
rm -f similarity-cache.json
If you see errors like "Array length mismatch" or "Cache format incompatibility":
For vaults with 10,000+ notes:
If you encounter any issues or have questions:
cmd + option + i on Mac and ctrl + shift + i for Windows)Architecture overview:
graph TD
A[Markdown Files] --> B[Tokenizer]
B --> C[Bloom Filter Generator]
C --> D[Index Cache]
E[User Opens Note] --> F[Similarity Calculator]
F --> D
F --> G[Candidate Selector]
G --> H[Related Notes Results]
I[File Changes] --> J[Incremental Updater]
J --> B
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Markdown │ │ Tokenizer │ │ Bloom Filter │
│ Files │───▶│ (N-grams) │───▶│ Generator │
│ │ │ │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ File Events │ │ Index Cache │
│ (Create/Edit) │──────────────────────────▶│ (Memory+Disk) │
│ │ │ │
└─────────────────┘ └─────────────────┘
│
▼
┌─────────────────────────────┐
│ Similarity Engine │
│ │
│ • Candidate Selection │
│ • Bloom Filter Comparison │
│ • Similarity Scoring │
│ • Result Ranking │
└─────────────────────────────┘
If this plugin helps you discover meaningful connections in your notes, consider supporting its development:
Your support helps maintain and improve this plugin. Thank you! ☕️