CJK Cross-Script Search

approved

by sai1047976

This plugin has not been manually reviewed by Obsidian staff. Type 萬維鋼 and find 万维钢 (and vice versa) in global search. Uses OpenCC to expand queries across Simplified and Traditional Chinese.

11 downloadsUpdated 16d agoMIT

CJK Cross-Script Search

Type 萬維鋼 in Obsidian's global search and find files containing 万维钢. And vice versa.

What it does

Obsidian's native global search (Cmd+Shift+F / Ctrl+Shift+F) treats Simplified and Traditional Chinese as different strings — searching 萬維鋼 will not surface a note that only contains 万维钢. This plugin closes that gap by rewriting your query using Obsidian's native OR syntax before it hits the search engine.

It also bridges common Taiwan/Mainland term variants like 軟體軟件软件 via OpenCC's s2tw / tw2s mapping.

Both typing into the search box and programmatic search calls are covered. CJK input methods (注音 / 拼音 / 日文 / 한국어) are not disrupted — the plugin pauses rewriting during IME composition so the candidate window keeps working normally.

Where it works

  • ✅ Global search panel (Cmd+Shift+F / Ctrl+Shift+F) — both user typing and programmatic calls
  • ❌ Quick Switcher (Cmd+O) — use lazyloong/obsidian-fuzzy-chinese for that
  • ❌ Tag pane / backlinks pane — deferred to v2

What gets expanded

InputMatches
萬維鋼files containing 萬維鋼 or 万维钢
万维钢files containing 万维钢 or 萬維鋼
軟體files containing 軟體, 軟件, or 软件 (Taiwan variant only)
path:筆記/ 萬維鋼path: operator passes through; 萬維鋼 expanded
/萬維鋼/left as-is (you wrote a regex, plugin trusts you)
MITunchanged (no CJK)
unchanged (single CJK char threshold)

Under the hood, 萬維鋼 becomes (萬維鋼 OR 万维钢) — Obsidian's native OR operator, not a regex blob. Your input box keeps showing what you typed; only the underlying query gets expanded.

Settings

  • Enable cross-script search — master toggle.
  • OpenCC variantTaiwan (default, bridges Taiwan idioms like 軟體↔软件) or Basic (char-level only, fewer false positives).
  • Debug log to console — prints every rewritten query so you can see what's being sent to search.

Compatibility

  • Obsidian ≥ 1.5.0 required. Earlier versions exposed different search internals; this build was designed against the current internal API.
  • Desktop and mobile both supported (no isDesktopOnly).

Known limitations

  • Quick Switcher / tag pane / backlinks not covered. See "Where it works".
  • Negated terms (-廢文) are not expanded.
  • The Taiwan variant can produce false positives for terms with the same form but different meaning across regions (e.g. 程序 means "program" in Mainland but also "procedure" in Taiwan). If this bothers you, switch to Basic.
  • Hooks Obsidian internals (SearchView.setQuery prototype + SearchComponent.changeCallback per-instance). An Obsidian upgrade that renames these may temporarily break the plugin until updated.
  • Bundle size ~2 MB (OpenCC dictionaries). One-time cost; lazy-loading on first query keeps startup fast.

Install (manual, while pending community-store approval)

  1. Download main.js and manifest.json from Releases.
  2. Drop both into <your-vault>/.obsidian/plugins/cjk-cross-search/.
  3. Reload Obsidian and enable the plugin in Settings → Community Plugins.

Build from source

git clone https://github.com/sai1047976/obsidian-cjk-cross-search
cd obsidian-cjk-cross-search
npm install
npm run build

The build emits main.js in the repo root. Drop that plus manifest.json into your vault's plugin folder.

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.