v2.3 — Semantic search, WYSIWYG live edit, Windows portable
Two major feature drops + two reported-bug rollups. The big one: Local RAG / semantic search ships with no model file download, no network call, off by default. Plus a Typora-style WYSIWYG live edit mode, a 10× Windows file-tree speedup, and a Windows portable .zip build for users who'd rather not run an installer.
🔍 Local RAG — search your notes by meaning
Press ⌘⇧F (or Ctrl+Shift+F). New panel. Type a natural-language query. Results rank by semantic similarity, not just keyword match. Search "deployment" and you can also surface paragraphs about "rolling out", "shipping", "release".
- 100% on-device. No model file download — we ship a deterministic hashed character-trigram embedder that runs entirely in our Rust process. The whole indexer is a few hundred lines.
- Off by default. Enable in Settings → Semantic search. Zero overhead when off; no scanning, no index file.
-
Index lives at
<workspace>/.solomd/embeddings.sqlite— a plain SQLite file you cansqlite3 .schemainto. Auto- gitignored when AutoGit is on. - Privacy summary: query text → local embedding fn → local SQLite scan → ranked results. The query text never touches a network socket. See the full writeup in /security § 5.
This is the biggest field-wide gap in note-taking apps right now — Obsidian, Tolaria, MarkText all lack semantic search. Built-in, not a plugin.
✍️ WYSIWYG live edit mode
Toolbar between Split and Preview, you'll see a new pen-on-paper icon. Click it (or cycle with Ctrl+Shift+P) to enter live edit mode — markdown formatting renders inline as you type:
# Headingrenders as a larger bold heading; the#is hidden until your cursor enters the line.**bold**renders as bold; the asterisks reappear when you click in.- Italic, strikethrough, inline code, links, blockquotes, fenced code blocks — same caret-aware reveal.
- Same buffer, same file. Not a separate preview pane — formatting is in the editor itself.
It's the fourth view mode (edit / split / liveEdit / preview), so you can toggle in and out without losing state. Welcome doc updated with a live-edit demo to try every supported syntax.
⚡ Windows file-tree speedup (~10×)
Reported on Win11: opening a folder with a few thousand notes was
painfully slow. Root cause: the per-entry e.metadata() call
on Windows triggers a separate
GetFileInformationByHandle syscall per entry. We were
making thousands of stat syscalls when the directory scan already had
the type info cached.
Switched to e.file_type(), which reuses the bulk
FindFirstFile traversal's cached entry type — no
per-entry stat. Effect on Windows: ~5–10× faster on large folders, especially
with antivirus on-access scanning. Also added a "Loading…" spinner +
truncation hint at 10,000 entries.
📦 Windows portable .zip
Requested by issue #27:
a no-installer Windows build. Each release now produces
SoloMD_<version>_x64-portable.zip alongside the
existing .msi / .exe. Just unzip and run SoloMD.exe — no
admin, no registry writes, runs from a USB stick.
Requires Microsoft Edge WebView2, which is preinstalled on Windows 10 and 11. The zip ships with a short README pointing at Microsoft's installer URL in case you need it.
🛠 Bug rollups
- Win11 file-tree crash on toggle
(#25)
— fixed in v2.2.1; root cause was a synchronous
list_dirTauri command blocking the main thread on slow filesystems (OneDrive placeholders, network drives, antivirus). Now async + spawn_blocking. - Windows local images not displaying
(#22)
— fixed back in v2.0; mixed-slash paths now go through a
normalizePathhelper before reachingconvertFileSrc.
🤖 Engineering: the dev-bridge
New internal piece — not user-facing — but worth flagging. Until v2.3,
we had a solomd-dev-mcp internal MCP server that could
drive everything behind the Tauri IPC layer (settings,
workspace state, AutoGit, file IO). It couldn't drive the actual Vue
UI — clicks, DOM reads, event dispatch — because Tauri's WKWebView
on macOS doesn't natively expose Chrome DevTools Protocol.
v2.3 adds a tiny #[cfg(debug_assertions)]-gated localhost
JSON-RPC bridge that runs only in the dev build. Bearer-token
auth, 127.0.0.1 only, port + token written to
~/Library/Application Support/app.solomd/dev-bridge.{port,token}.
dev-mcp gains 6 new tools: solomd_dev_eval / click / text /
dispatch / url / wait_for. Verified zero footprint in release
binaries (nm | grep dev_bridge returns 0 matches).
Closes the last gap in the global rule "every client project ships with CLI + MCP for self-test". Claude can now click your buttons, read your DOM, and dispatch keyboard events — same loop a real user would use, but driven from outside.
📥 Download
Download latest → All releases
What's next
v2.4: a real Notion-style narrative homepage section + GitHub Discussions integration is landing right after this post (separate layer on top of the v2.3 surfacing pass). Beyond that: Mac App Store resubmission, mobile sync via the same AutoGit pattern, and CRDT real-time sync on the v3 horizon.