cferrugem164 downloadsSearch your vault with a fast, worker-powered index. Typo-tolerant fuzzy matching, in-file search, and optional PDF, image, and Office document indexing. Inspired by Omnisearch.
Fast, worker-powered full-text search for Obsidian.
Credit where it's due: CFR Find is heavily inspired by Omnisearch by Simon Cambier, licensed under GPL-3. Omnisearch pioneered this style of ranked, typo-tolerant vault search in Obsidian, and CFR Find borrows many of its ideas (and its Text Extractor integration). If you need an HTTP API, a public plugin API, embed results, or Chinese word segmentation, use Omnisearch — it's excellent. CFR Find trades those features for raw speed. Like Omnisearch, CFR Find is licensed under GPL-3.
Omnisearch's slowness on large vaults is architectural: all indexing, tokenization, and cache serialization run on Obsidian's UI thread, every document is tokenized several times over, and the whole index is serialized as one blob on the main thread. CFR Find keeps the same core idea (BM25 ranked search via MiniSearch) but restructures everything around performance:
| CFR Find | Omnisearch | |
|---|---|---|
| Indexing & search thread | Web Worker (UI never blocks) | Main/UI thread |
| Tokenization | Single pass, deduplicated | 3–4 passes, duplicates kept |
| Diacritics normalization | Once per distinct token (memoized) | Per document + per term + per query |
| Note content in memory | Not retained | 2 full copies of every note |
| Cache serialization | In the worker, one atomic transaction | On the UI thread |
| Excerpt highlighting | Visible results only (IntersectionObserver), offset-based <mark> |
All 50 results, regex replace |
| UI | Plain DOM, no framework | Svelte 5 |
| Bundle | ~75 KB | ~1 MB+ |
CFR Find: Search the vault): ranked, typo-tolerant,
prefix-matching search across markdown, canvas, and any plaintext extensions
you configure.CFR Find: Search in the current note): jump to any
match in the active note. Tab switches between the two modes, carrying
your query."exact phrases", -excluded words, -"excluded phrases",
ext:md / .md extension filters, path:Daily / -path:Archive filters.cafe finds café),
camelCase-aware (user finds getUserName), hyphen-aware.Being honest about scope — these Omnisearch features are intentionally not in CFR Find (use Omnisearch if you need them):
obsidian:// URL scheme.The command is CFR Find: Search the vault (there is also
CFR Find: Search in the current note). Bind a key to it in
Settings → Hotkeys, or use the shortcut button in CFR Find's settings tab
which takes you straight there.
npm install && npm run build.dist/main.js, dist/manifest.json, and dist/styles.css into
<your vault>/.obsidian/plugins/cfr-find/.npm install
npm run dev # watch build
npm test # unit tests (tokenizer, query parser, engine, worker core)
npm run build # type-check + production build
Architecture notes: the search engine runs in a Web Worker that is bundled
separately and inlined into main.js as a blob URL (Obsidian plugins ship a
single file). The main thread only reads files and renders UI; file contents
are posted to the worker and never kept resident. See src/shared/protocol.ts
for the full message contract.
CFR Find makes no network requests. All indexing and searching happens
locally on your device; the index is stored locally in IndexedDB. The only
external link in the plugin is the optional "Buy me a coffee" button in the
settings tab, which opens buymeacoffee.com in your browser only if you
click it.
If CFR Find is useful to you, you can buy me a coffee. ☕
GPL-3.0-or-later. Inspired by Omnisearch © Simon Cambier.