Obsimini
Lightweight wiki navigation for Markdown knowledge bases in VS Code. Turns a
folder of interlinked .md files into something you can actually browse:
clickable [[wiki links]], hover previews, a backlinks panel, source-reference
jumps, status-tag highlighting, and Obsidian-style text marks — with no lock-in. Optional Gemini-powered
translation uses your own API key.
Built for repos that use [[...]] links between notes, meeting summaries,
decision logs, and reference docs.
Select text in a Markdown editor or Wiki View and run:
- Obsimini: Add comment to selected text
- Obsimini: List local comments — choose a saved annotation to jump to its source
- Obsimini: Delete local comments
When the Wiki is a Git repository, comments are stored in
vvwiki-comments.json on the local-only vvwiki/vscode-comments branch. Without
Git, they are stored in .obsimini/vvwiki-comments.json under the workspace.
The source Markdown is not changed. The delete command removes whichever local
storage is in use; no remote is ever pushed. Wiki View and the Markdown
editor mark annotated text with a dotted underline; hover it to see the comment
in a floating card. The card provides Edit, Del, and Del all comments
actions.
Features
📖 Wiki View with source-mapped editing
Run Obsimini: Open Wiki View (or click the 📖 button in a Markdown editor's
title bar) to open a self-contained Wiki View in the current editor group.
Clicking a [[link]] navigates within the tab — with Back / Forward
buttons — while the currently displayed Markdown document remains the source of truth
and can be edited when its filesystem is writable.
Simple paragraphs (including hard-wrapped paragraphs), headings, one-level
blockquotes, and flat list items can be edited directly in the rendered view.
Enter continues a safe source-mapped line in paragraphs, quotes, and lists;
numbered lists continue with the next marker; consecutive empty markers such
as 7. and 8. remain independently editable. Plain text, common emphasis,
inline code, Markdown link labels, wiki-link aliases, autolinks, and task
checkboxes are source-mapped back to the original Markdown. The render toolbar
can also insert Markdown/Wiki links, turn simple paragraphs into blockquotes,
flat lists, or task items, switch existing flat list markers, and insert code
fences, tables, or horizontal rules at a line start. Section controls can add
an H2 section after the current section or delete the current heading section
(the deletion is undoable with VS Code Undo). IME input, paste, delete, and formatting toolbar actions
are supported.
Complex or ambiguous Markdown (tables, callouts, images, fenced code, nested
lists, hard-break paragraphs, and other complex multi-line blocks) stays
read-only in WYSIWYG mode; this restriction applies to the block, not to the
whole writable note. Safe one-level multiline continuations are handled
without rewriting unrelated source. Safe nested inline formatting is supported, while
links and their targets remain protected. Click its pencil affordance to open the original
section editor with the formatting toolbar, including local/HTTPS image
insertion and image drag-and-drop. There is no HTML-to-Markdown round-trip;
direct WYSIWYG edits still save through the live source buffer.
✨ Highlights and calmer reading layout
Both the built-in Markdown preview and Wiki View support Obsidian-style
highlights:
This is ==important text==.
This is also <mark>important text</mark>.
==…== is Obsidian-flavoured Markdown. <mark>…</mark> is standard semantic
HTML and is useful when the same note is also rendered elsewhere. Wiki View
accepts only this safe HTML tag (rather than arbitrary raw HTML). Wiki View
follows the active VS Code color theme automatically; use Preferences: Color
Theme to switch between dark and light modes. Quotes render
as softly coloured callout-style blocks, and tables, headings, code blocks, and
images have a clearer visual hierarchy.
When editing a block in Wiki View, select text and use == Mark for
Obsidian syntax or <mark> for the semantic HTML form in the insert toolbar.
∑ KaTeX math
Both readers render inline and display math with KaTeX:
The solution is $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$.
$$
\int_0^1 x^2\,dx = \frac{1}{3}
$$
Invalid formulas remain visible as escaped source with an error indicator, so a
rendering error never turns note content into executable HTML.
💬 Obsidian Callouts
Both readers recognise Obsidian-style callouts. Add - for an initially
collapsed callout or + for an initially expanded, user-toggleable one:
> [!WARNING]- Deployment note
> Check the migration status before releasing.
📈 Mermaid diagrams
Wiki View renders fenced mermaid diagrams offline, follows the active VS Code
color theme, and redraws diagrams when you switch between dark and light modes.
If parsing fails, it keeps the source code visible with an error message.
```mermaid
flowchart LR
Draft --> Review --> Publish
```
🔖 In-page section links
Wiki View supports ordinary Markdown fragment links. Headings automatically get
a stable fragment ID, so a link such as [Scope](#scope-of-this-document)
scrolls to that section. For a short, explicit ID (for example #b2), add a
standalone portable anchor directly above the target section:
<a id="b2"></a>
### B2 — Headset microphone audio
The Wiki View Back and Forward buttons also remember in-page section
jumps and restore the exact prior reading position.
🌐 Gemini translation
Translation is opt-in and uses your own Gemini API key. Run
Obsimini: Configure Translation Service from the Command Palette and paste
a key created in Google AI Studio.
The key is stored in VS Code SecretStorage, never in settings.json, the
workspace, or the Wiki View webview.
Run Obsimini: Toggle Hover Translation to enable or disable it. In Wiki
View, leave the pointer on a word or phrase for three seconds to show a
translation popup.
Run Obsimini: Set Translation Target Language to choose Traditional
Chinese, English, Japanese, Korean, or enter another language name/code.
Run Obsimini: Translate Current Section in a Markdown editor to translate
the heading section containing the cursor into a new Markdown tab. In Wiki
View, it translates the heading section where the pointer was last located.
Select text in any text editor or Wiki View, then run Obsimini: Translate Selected Text. Wiki View and all regular text editors show the result beside
the selection in a floating original/translation comparison view, where it can
be scrolled, copied, or exported as a Markdown/text file.
Run Obsimini: Translate Clipboard Contents to translate text copied from
any app. The same original/translation floating view opens at the cursor in a
text editor or in the active Wiki View.
Clipboard actions are also available without opening the Command Palette:
| Shortcut |
Action |
Ctrl+Alt+Shift+T |
Translate clipboard |
Ctrl+Alt+Shift+A |
Ask AI about clipboard |
Ctrl+Alt+Shift+E |
Explain clipboard |
Ctrl+Alt+Shift+R |
Rephrase clipboard |
Ctrl+Alt+Shift+S |
Summarize clipboard |
On macOS, replace Ctrl with Cmd. All five actions use the configured
Gemini key and target language; the generated result is shown alongside the
original text and can be copied or exported.
The default model is gemini-3.5-flash-lite, Gemini's low-cost Flash-Lite model.
🔗 Clickable [[wiki links]]
[[topics/motoko-overview]] and [[page|alias]] become clickable in both the
editor and the built-in Markdown preview (Ctrl/Cmd+Shift+V). Links resolve
two ways so mixed conventions keep working:
- verbatim path under your wiki root —
[[topics/page]] → topics/page.md
- otherwise by unique file name —
[[page]] → the one page.md in the tree
Unresolved links show in red in the preview so you can spot broken references.
Tip — where preview links open: clicking a [[link]] in the preview
follows VS Code's own setting markdown.preview.openMarkdownLinks. The default
"inPreview" navigates within the preview pane (great for browsing); set it to
"inEditor" if you'd rather each click open a real editor tab.
👁 Hover previews
Hover a [[link]] to see the top of the target page (YAML frontmatter is
skipped). Configure how many lines with obsimini.hover.previewLines.
↩ Backlinks panel
An Explorer view lists every page that links to the file you're viewing, with
the exact line — click to jump. Great for seeing how a topic is referenced.
📎 Source-reference jumps
If your notes cite sources like [來源: meeting-2026-07-09 @ 05:23] or
[source: report.pdf], Obsimini makes them clickable and opens the matching
file from a folder you choose (e.g. a meeting_transcript/ directory). Fully
regex-configurable — see obsimini.sourceLink.*.
🔎 Rendered location links
Wiki View follows the same compact location-link treatment as vvpipi: HTTP
URLs open in the browser, file:// URLs and source-looking paths (including
line ranges such as src/app.ts:12-20) open in VS Code or the OS, and function
calls or symbol:Name references jump through the document/workspace symbol
provider when available. Rendered links use the active VS Code theme, with
vvpipi-style dotted underlines and heading colours.
🏷 Status-tag highlighting
Labels such as ✅ decided, 🟡 pending, 🔄 evolving, ❌ dropped get a
colored badge so decision tables are scannable. Labels and colors are
configurable via obsimini.statusBadges (set to {} to disable).
Settings
| Setting |
Default |
Description |
obsimini.wikiRoot |
"" (workspace root) |
Folder containing your wiki; links resolve against it. |
obsimini.linkExtension |
.md |
Extension appended to link targets. |
obsimini.hover.previewLines |
30 |
Lines shown in hover previews. |
obsimini.statusBadges |
see below |
Label → hex-color map for highlighting. |
obsimini.sourceLink.enabled |
true |
Enable source-reference jumps. |
obsimini.sourceLink.pattern |
[來源: … @ …] |
Regex; capture group 1 = target file name. |
obsimini.sourceLink.targetFolders |
["meeting_transcript", "."] |
Folders searched for source files. |
obsimini.attachmentFolder |
assets |
Folder under the wiki root for locally inserted images. |
obsimini.translation.enabled |
false |
Enable pointer-rest translation in Wiki View. Toggle it with the Command Palette. |
obsimini.translation.targetLanguage |
zh-TW |
Target language code or name sent to Gemini. |
obsimini.translation.hoverDelay |
3000 |
Pointer-rest delay in milliseconds before translating. |
obsimini.translation.model |
gemini-3.5-flash-lite |
Gemini model used for translation. |
Example project settings (.vscode/settings.json):
{
"obsimini.wikiRoot": "wiki",
"obsimini.sourceLink.targetFolders": ["meeting_transcript"],
"obsimini.translation.targetLanguage": "zh-TW",
"obsimini.translation.hoverDelay": 3000
}
Default status badges:
{
"✅ decided": "#3fb950",
"🟡 pending": "#d29922",
"🔄 evolving": "#58a6ff",
"❌ dropped": "#f85149"
}
Roadmap
- Graph view — an interactive node-link map of your wiki (planned for a
future release).
Development
npm install
npm run watch # or: npm run build
# press F5 in VS Code to launch an Extension Development Host
Package a .vsix: npm run package.
License
MIT