No description
Find a file
2026-06-11 07:49:48 -06:00
.github Add GitHub Sponsors funding links (v1.0.2) 2026-06-07 22:30:22 -06:00
src Release 1.0.8: remove !important (use specificity) and deprecated setDynamicTooltip 2026-06-11 07:49:48 -06:00
.gitignore Commit package-lock.json for reproducible builds (enables build verification) 2026-06-10 08:51:50 -06:00
esbuild.config.mjs Fix automated review issues: popout-safe DOM/timers, createDiv, typed loadData, minAppVersion 0.16.0, attested release (v1.0.1) 2026-06-04 10:14:59 -06:00
eslint.config.mjs Fix automated review issues: popout-safe DOM/timers, createDiv, typed loadData, minAppVersion 0.16.0, attested release (v1.0.1) 2026-06-04 10:14:59 -06:00
LICENSE Initial release v1.0.0 2026-05-03 23:21:10 -06:00
manifest.json Release 1.0.8: remove !important (use specificity) and deprecated setDynamicTooltip 2026-06-11 07:49:48 -06:00
package-lock.json Commit package-lock.json for reproducible builds (enables build verification) 2026-06-10 08:51:50 -06:00
package.json Release 1.0.8: remove !important (use specificity) and deprecated setDynamicTooltip 2026-06-11 07:49:48 -06:00
README.md Release 1.0.7: configurable highlight colors, vault search limits, redesigned settings UI 2026-06-10 09:18:59 -06:00
README_ar.md Use absolute GitHub URLs for language/LICENSE links (fix 404 on Obsidian site and in-app) 2026-06-10 08:45:13 -06:00
README_es.md Use absolute GitHub URLs for language/LICENSE links (fix 404 on Obsidian site and in-app) 2026-06-10 08:45:13 -06:00
README_fr.md Use absolute GitHub URLs for language/LICENSE links (fix 404 on Obsidian site and in-app) 2026-06-10 08:45:13 -06:00
README_he.md Use absolute GitHub URLs for language/LICENSE links (fix 404 on Obsidian site and in-app) 2026-06-10 08:45:13 -06:00
README_pt.md Use absolute GitHub URLs for language/LICENSE links (fix 404 on Obsidian site and in-app) 2026-06-10 08:45:13 -06:00
README_ru.md Use absolute GitHub URLs for language/LICENSE links (fix 404 on Obsidian site and in-app) 2026-06-10 08:45:13 -06:00
styles.css Release 1.0.8: remove !important (use specificity) and deprecated setDynamicTooltip 2026-06-11 07:49:48 -06:00
tsconfig.json Initial release v1.0.0 2026-05-03 23:21:10 -06:00
versions.json Release 1.0.8: remove !important (use specificity) and deprecated setDynamicTooltip 2026-06-11 07:49:48 -06:00

Diacritics-Free Search

Search and replace text ignoring diacritical marks in Obsidian

Hebrew nikud · Arabic tashkil · Latin accents · Greek polytonic · Any Unicode combining mark

GitHub release License: MIT Ko-fi

🌐 English | Español | עברית | العربية | Français | Русский | Português

Support me on Ko-fi


The Problem

If your notes contain vocalized Hebrew like בְּרֵאשִׁית, searching for בראשית (without vowels) won't find it. The same happens with café vs cafe, Arabic بِسْمِ vs بسم, and any other diacritical marks.

Diacritics-Free Search solves this by making all diacritics transparent during search — type without marks and find text that has them.

Search query:    בראשית        →  Finds:  בְּרֵאשִׁית ✓
Search query:    cafe           →  Finds:  café ✓
Search query:    بسم            →  Finds:  بِسْمِ ✓

Features

🔍 Local Search — Find & Replace in Current Note

Shortcut Option + F (suggested — assign in Settings → Hotkeys)
Behavior Opens a search bar at the top of the active note (Chrome-style)

Capabilities:

  • Real-time highlighting — All matches highlighted in yellow; current match in orange
  • Match navigation — Use ▲▼ buttons or Enter / Shift+Enter to jump between matches
  • Scrollbar markers — Yellow ticks on the scrollbar show where matches are (clickable!)
  • Replace one / Replace all — Replace the current match or all matches at once
  • Case sensitivity toggle — Click "Aa" to switch between case-sensitive and insensitive
  • Remembers last search — Reopen the bar and your previous query is still there
  • Escape to close — Press Esc from anywhere (even while editing) to dismiss

🌐 Global Search — Search Entire Vault

Shortcut Shift + Option + F (suggested — assign in Settings → Hotkeys)
Behavior Opens a modal to search across all markdown files in your vault

Capabilities:

  • Vault-wide search — Scans every .md file in your vault
  • Highlighted context — Shows the matching line with the found text highlighted
  • Click to navigate — Click any result to open the file and jump to the exact match
  • Match count per file — See how many matches each file contains
  • Global Replace All — Replace a term across all files in one click
  • Debounced input — Waits 300ms after you stop typing to avoid lag on large vaults

🎯 How Matching Works

The plugin uses Unicode NFD normalization to decompose characters, then removes all combining marks (Unicode category Mn):

Original Normalized Script
בְּרֵאשִׁית בראשית Hebrew (nikud + cantillation)
café cafe Latin (acute accent)
بِسْمِ ٱللَّهِ بسم الله Arabic (tashkil)
naïve naive Latin (diaeresis)
Ἀθῆναι Αθηναι Greek (polytonic)
résumé resume Latin (multiple accents)
über uber Latin (umlaut)

💡 Both sides are normalized — if you search with diacritics, it still matches text without them (and vice versa).


⌨️ Keyboard Shortcuts

Action Shortcut
Open local search Option + F (suggested — assign in Settings → Hotkeys)
Open global search Shift + Option + F (suggested — assign in Settings → Hotkeys)
Next match Enter or ▼ button
Previous match Shift + Enter or ▲ button
Close search Esc (works from anywhere)
Replace current Enter in replace field

Both commands are also available via the Command Palette (Cmd + P).


🗂️ Supported Scripts

Script Example What's stripped
🇮🇱 Hebrew בְּרֵאשִׁית → בראשית Nikud, cantillation marks
🇸🇦 Arabic بِسْمِ → بسم Tashkil / harakat
🇫🇷 Latin café → cafe Accents, umlauts, cedillas, tildes
🇬🇷 Greek Ἀθῆναι → Αθηναι Polytonic accents, breathings
🇷🇺 Cyrillic й → и Combining breve
🇮🇳 Devanagari Anusvara, virama, etc.
🌍 Any All Unicode Mn (Mark, Nonspacing)

Installation

  1. Open Settings → Community Plugins in Obsidian
  2. Click Browse and search for "Diacritics-Free Search"
  3. Click Install, then Enable

Or install in one click: Open in Obsidian →

Manual Installation

  1. Download main.js and manifest.json from the latest release
  2. Create folder: <your-vault>/.obsidian/plugins/diacritics-free-search/
  3. Place both files inside
  4. Restart Obsidian
  5. Go to Settings → Community Plugins → Enable "Diacritics-Free Search"

Building from Source

git clone https://github.com/spenhos/obsidian-diacritics-free-search.git
cd obsidian-diacritics-free-search
npm install
npm run build

Copy main.js + manifest.json to your vault's plugin folder.


Settings

Setting Description Default
Case sensitive by default Start searches with case sensitivity enabled Off
Match highlight color Color used to highlight all matches #ffd000
Current match color Color of the currently selected match #ff8c00
Minimum characters (vault search) How many characters before the vault search starts 2
Maximum files shown (vault search) Limit how many files appear in vault results 50

The whole interface is localized and follows Obsidian's language (English, Español, עברית, العربية, Français, Русский, Português).


Support

If this plugin is useful to you, you can support its development:

Support me on Ko-fi

Sponsor on GitHub


Contributing

Issues and PRs are welcome! If you find a script or language where diacritics aren't being properly stripped, please open an issue with an example.


Made with ❤️ for multilingual note-takers

Saleh Penhos