Disclaimer
Is this project open source? Yes
Is this project completely free? Yes
Is this project vibe-coded beyond the author’s ability to comprehend how it works? Yes and it works.
Community Directory: community.obsidian.md/plugins/interlinear
Hey everyone ![]()
I just got my plugin Interlinear into the community store and wanted to share it here.
The itch: I keep a lot of foreign-language stuff in my vault — articles, papers, highlights. Reading them always turned into the same dance: copy a paragraph, alt-tab to a translator, paste, read, tab back, lose my place, repeat. By the end my attention was completely shredded.
So I built Interlinear. Open a foreign-language note in reading view, hit one button, and it renders the translation right next to the original, paragraph by paragraph — bilingual, or translation-only.
The part I care about most (and figured this crowd would too):
- It never modifies your notes. Translations are injected into the render layer only. Close the note, reopen it, and the file on disk is byte-for-byte identical — nothing gets written into your markdown.
- It never auto-translates. Opening or switching notes does nothing. It only runs when you actually click the button (or run the command). No surprise API calls.
- BYOK, zero telemetry. Your API key lives in the plugin’s local
data.jsonand goes nowhere except the endpoint you point it at. The plugin doesn’t phone home.
A few other bits:
-
One click translates the whole note (with live progress like
7/20); click again to toggle back to the original. -
Toggle bilingual ↔ translation-only instantly — no re-translating. In translation-only mode you can hover a line (or tap on mobile) to peek at the original. Handy if you’re actually using this to study the language.
-
A few display styles to match your theme — border, quote block, muted text, dashed underline, plus a “learning mask” geared toward language practice — all live-switchable.
-
It skips what shouldn’t be translated: code blocks, math, image-only blocks, bare URLs, and anything already in your target language.
-
Translations are cached (content-hash keyed), so reopening a note after a restart is free.
Backends: DeepSeek by default, but it’s an OpenAI-compatible interface under the hood — so OpenAI, SiliconFlow, a local Ollama model, or any custom endpoint all work. There’s a “Test connection” button in settings.
Honest limitations: reading-view only for now (no editing / Live Preview), and lists/tables get translated as a single block. It’s an early version — solid for my daily reading, but plenty of room to grow.
Install: it’s in the community plugin store now → Settings → Community plugins → Browse → search “Interlinear”. Source and details on GitHub: github.com/linyp/obsidian-interlinear
Would love feedback — feature ideas, weird edge cases, whatever you’ve got. Thanks for taking a look ![]()