No description
Find a file
Etai Solomon 47643cc91c docs: sharpen marketplace description; clean up stale "pending review" content
- manifest.json description now leads with the action ("Fuzzy-find a
  tag, then a note tagged with it") and mentions the Quick Switcher
  framing. Three natural occurrences of tag/tagged for marketplace
  search relevance vs. the previous single occurrence.
- README opener reframes the plugin against the existing tag-plugin
  neighborhood ("Built for navigation, not tag management") so users
  arriving from a "tag" search understand the differentiation vs.
  Tag Wrangler / Tag Tactician without trash-talking them.
- Removed the "pending review" status badge and callout (plugin is
  live at community.obsidian.md/plugins/tag-fuzzy-find) and reordered
  the install section so Community Plugins is the primary path and
  manual install is the fallback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 13:23:15 +03:00
.github/workflows fix: address marketplace scorecard findings; bump 0.1.4 2026-05-13 13:00:57 +03:00
docs docs: add demo GIF to README 2026-04-26 17:09:46 +03:00
scripts chore(scripts): add demo seed for screenshots and GIF recording 2026-04-26 12:34:36 +03:00
src fix: address marketplace scorecard findings; bump 0.1.4 2026-05-13 13:00:57 +03:00
tests feat(settings): add triggerPrefix with 6-option allowlist 2026-04-26 10:33:08 +03:00
.gitignore fix: address marketplace scorecard findings; bump 0.1.4 2026-05-13 13:00:57 +03:00
CHANGELOG.md fix: address marketplace scorecard findings; bump 0.1.4 2026-05-13 13:00:57 +03:00
esbuild.config.mjs fix: address marketplace scorecard findings; bump 0.1.4 2026-05-13 13:00:57 +03:00
eslint.config.mjs fix: address marketplace scorecard findings; bump 0.1.4 2026-05-13 13:00:57 +03:00
LICENSE chore: prepare repo for open-source release 2026-04-26 12:18:47 +03:00
manifest.json docs: sharpen marketplace description; clean up stale "pending review" content 2026-05-13 13:23:15 +03:00
package.json fix: address marketplace scorecard findings; bump 0.1.4 2026-05-13 13:00:57 +03:00
README.md docs: sharpen marketplace description; clean up stale "pending review" content 2026-05-13 13:23:15 +03:00
tsconfig.json fix(ci): drop deprecated baseUrl, regenerate lockfile 2026-04-27 10:22:24 +03:00
versions.json chore: scaffold Obsidian plugin project 2026-04-21 10:32:35 +03:00
vitest.config.ts refactor: split settings UI into settingsTab.ts to keep settings.ts Node-pure 2026-04-21 11:22:15 +03:00

Tag Fuzzy Find

CI License: MIT Latest release Marketplace

A keyboard-first Quick Switcher for tags. Fuzzy-find any tag in your vault, then jump straight to a note that uses it. Built for navigation, not tag management — if you've ever wished Cmd+O could search tags as well as files, this fills that gap.

Tag Fuzzy Find demo

What it does

Obsidian's built-in Quick Switcher finds files and headings, but there's no first-class way to find a tag. Tag Fuzzy Find fills that gap:

  1. Open the modal — fuzzy-search every tag in your vault, with usage counts.
  2. Pick one — drill straight into the notes that carry it.
  3. Pick a note — open it in the current pane, a new tab, or a split.

It honors Obsidian's nested-tag semantics: choosing #project surfaces notes tagged #project/work/urgent too.

Features

  • Two-step flow. Tag picker → note picker. Backspace on an empty query takes you back to the tag picker, with your previous query preserved.
  • Quick Switcher hook. Typing a configurable prefix character (default #) as the first character in the built-in Cmd+O switcher reroutes you straight into Tag Fuzzy Find. Works with :, @, !, >, ? if # collides with your file names.
  • Smart initial ordering. Default: recently-picked tags first, then the rest by usage. Switch to alphabetical or usage-only in settings.
  • Nested tag inclusion. #project includes #project/work, #project/work/urgent, etc.
  • Standard keyboard shortcuts. Enter opens in current pane, Cmd/Ctrl+Enter opens in a new tab, Shift+Enter opens in a split, Esc closes.
  • Zero ceremony. No background indexing, no extra settings panes — runs entirely on Obsidian's existing metadata cache.

Installation

Settings → Community plugins → Browse → search Tag Fuzzy Find → Install → Enable.

Via BRAT

Add the repo URL etaiso/obsidian-tag-fuzzy-find in BRAT and it will install the latest release.

Manual

  1. Download main.js and manifest.json from the latest release.
  2. Create the folder <your-vault>/.obsidian/plugins/obsidian-tag-fuzzy-find/.
  3. Copy main.js and manifest.json into it.
  4. In Obsidian: Settings → Community plugins → turn off Restricted Mode → enable Tag Fuzzy Find.

Usage

Open the plugin

Either way works:

  • Run the command Tag Fuzzy Find: Open from the command palette (Cmd/Ctrl+P). Bind a hotkey in Settings → Hotkeys for fastest access.
  • Press Cmd/Ctrl+O to open the built-in Quick Switcher, then type the configured trigger character (default #). The switcher reroutes to Tag Fuzzy Find with the remaining text pre-filled.

Navigate

Key Action
Enter Open the highlighted note in the current pane
Cmd/Ctrl+Enter Open in a new tab
Shift+Enter Open in a split
Backspace (when query is empty) Return to the tag picker
Esc Close

Settings

Setting What it does Default
Initial sort Order of tags before you type. Recent-then-usage / Most-used / Alphabetical / Empty until typing. Recent-then-usage
Quick Switcher trigger First character to type in the Quick Switcher to open Tag Fuzzy Find. #
Integrate with Quick Switcher Toggle the Cmd+O interop. On
Recent tags to remember Size of the recent-tags list (0 disables it). 10
Clear recent tags One-shot button to wipe the recent list.

Development

Built with TypeScript + esbuild + vitest. No runtime dependencies beyond Obsidian itself.

Setup

git clone https://github.com/etaiso/obsidian-tag-fuzzy-find.git
cd obsidian-tag-fuzzy-find
npm install
npm run dev   # esbuild watch — rewrites main.js on save

Testing locally against a real vault

  1. Create a dedicated test vault in Obsidian (don't use your real one). Example: ~/Documents/TagFuzzyFindTestVault.
  2. Symlink the project into the test vault's plugins directory:
    mkdir -p ~/Documents/TagFuzzyFindTestVault/.obsidian/plugins
    ln -s "$(pwd)" ~/Documents/TagFuzzyFindTestVault/.obsidian/plugins/obsidian-tag-fuzzy-find
    
  3. In Obsidian: Settings → Community plugins → turn off Restricted Mode → enable Tag Fuzzy Find.
  4. Recommended: install the Hot Reload plugin in the same vault — it auto-reloads Tag Fuzzy Find on every main.js rewrite.
  5. Seed the vault with test data:
    npx tsx scripts/seed-vault.ts ~/Documents/TagFuzzyFindTestVault
    
    For richer, demo-friendly content (realistic note titles and tag hierarchies — useful when recording screenshots or a GIF), use the demo seed instead in a dedicated vault:
    npx tsx scripts/seed-demo-vault.ts ~/Documents/TagFuzzyFindDemoVault
    

Tests

npm test           # vitest — pure-logic suites for settings, recent tags, tag index
npm run typecheck  # tsc --noEmit

Obsidian has no headless runtime, so modal behavior and the Quick Switcher hook are verified manually against the matrix in docs/test-plan.md.

Releasing

  1. Bump version in manifest.json and package.json (keep them in sync).
  2. Add an entry to CHANGELOG.md.
  3. Commit and push.
  4. Tag with the unprefixed semver version (e.g. 0.2.0, not v0.2.0) and push the tag — the GitHub Actions release workflow will produce a draft release with main.js and manifest.json attached.
  5. Review the draft release and publish it.

License

MIT © Etai Solomon