SoloMD v2.0 — From Markdown editor to PKM workspace
The biggest release since 1.0. Six new features, designed together as a single cut, after a survey of every major Markdown editor on the market (Obsidian, Logseq, iA Writer, Ulysses, Bear, Zettlr, Joplin, Notesnook, Standard Notes, NotePlan, Heynote, Reflect, Apostrophe, AppFlowy, Anytype, MiaoYan).
Two credibility holes closed: wikilinks + backlinks and spell-check. Two differentiators added: inline AI rewrite (BYOK) and Pandoc + academic citations. Plus: a Bases-style table view of every note in your workspace, daily notes + tag panel for PKM workflows.
✨ New features
🔗 Wikilinks + Backlinks (F1)
Type [[Welcome]] in any markdown doc. Cmd/Ctrl+click jumps to the target note (or creates it if missing). The new Backlinks panel in the right sidebar shows every other note that links here, with three lines of context per match. Autocomplete on [[ lists every note in your workspace, ranked by stem and title.
🔤 Spell-check (F2, opt-in)
Hunspell-powered red-wavy underline for misspelled English words. Right-click a misspelling for top-5 suggestions / "Add to dictionary" / "Ignore once". Latin-only (CJK runs are skipped — single-character "words" aren't spellable). User dictionary stored at <config>/user-dict-en.txt. Off by default (~3 MB dict on first enable).
📅 Daily Notes + 🏷 Tags panel (F3)
Cmd+D opens today's daily note (<workspace>/Daily/2026-04-25.md by default), creating it from your template if missing. Settings let you customize the folder, filename format (YYYY-MM-DD.md), and template ({{date}} {{day}} {{previous}} {{next}} tokens substituted). The Tags panel stacks under Backlinks in the right sidebar, indexing every #tag across the workspace — click any tag to filter. # autocomplete in the editor lists existing tags.
🤖 Inline AI rewrite (F4, BYOK, opt-in)
Select text, press Cmd+J, pick an action (Rewrite / Shorten / Expand / Translate to EN / Translate to ZH / Explain / Custom prompt). The selection streams into a side-by-side diff overlay; Cmd+Enter accepts, Esc rejects, "Re-roll" regenerates.
13 providers wired in — pick a vendor in Settings, enter your key once, switch model freely:
- 🇺🇸 OpenAI · Anthropic Claude · Google Gemini · xAI Grok · Mistral · Groq
- 🇨🇳 DeepSeek · 通义千问 Qwen (DashScope) · 智谱 GLM · Moonshot Kimi · 火山方舟 / 豆包 · 硅基流动 SiliconFlow
- 💻 Ollama (local, no key needed)
For vendors with multiple lineups, the model field carries hints — e.g. DeepSeek shows deepseek-chat / deepseek-reasoner / deepseek-coder; Qwen shows qwen-plus / qwen-coder-plus / qwq-plus; 豆包 shows doubao-1-5-pro / doubao-pro-coder / doubao-1-5-thinking-pro. Each provider's key is stored in your OS keychain (macOS Keychain / Windows Credential Manager / libsecret on Linux), never in localStorage. You can keep multiple vendors' keys simultaneously.
Off by default — opt-in via Settings → AI rewrite.
📄 Pandoc export + @citekey citations (F5)
Export to EPUB / ODT / LaTeX / RTF in addition to the existing PDF / DOCX / HTML / PNG. Pandoc is detected on PATH (not bundled — keeps the installer at ~15 MB).
For academic writing: pick a .bib or .csl-json file in Settings → Bibliography, optionally pair with a .csl style. Type @ in any markdown doc and an autocomplete dropdown lists matching citation keys with author + year + title preview. Pandoc handles the actual bibliography generation on export with --citeproc.
📊 Bases-style properties table (F6)
A new view that renders every note in your workspace as a table — columns are inferred from YAML front-matter keys (any key seen in 2+ files becomes a column). Filter, sort, and save views. Click a row to open the note. Open via the command palette: "Workspace: Properties Table (Bases)".
Pure additive — uses the same workspace index that powers wikilinks / backlinks / tags, so no extra setup.
🐞 Fixes
- Local images on Windows now display reliably (#22) — the
convertFileSrcURL builder was fragile to mixed\//separators and unresolved.//../segments. NewnormalizePathhelper canonicalizes paths before encoding. Fix is platform-agnostic; Linux and macOS got fewer silent failures along the way.
⌨️ New shortcuts
| Key | Action |
|---|---|
Cmd/Ctrl+D
| Open today's daily note |
Cmd/Ctrl+J
| AI rewrite the selection (when enabled) |
Cmd/Ctrl + click [[link]]
| Jump to wikilink target |
[[, #, @
| Autocomplete in markdown documents |
🛠 Architecture / under the hood
- Workspace index (Rust): a notify-watched in-memory + on-disk-cached index of every
.mdfile in your workspace. Front matter, wikilinks, tags, headings, summary all extracted and made queryable. Powers F1, F3, F6 with sub-millisecond lookups. - CodeMirror 6 extensions registry: 6 markdown-only extensions (wikilinks, tags, citations, AI rewrite, spellcheck + theme, focus mode) compose cleanly without overlap. Single combined
autocompletion()source list dispatches by trigger character. - Streaming AI proxy (Rust):
reqwest+futures-utilSSE consumer with per-requestAtomicBoolcancellation. Three wire formats (OpenAI / Anthropic / Ollama), all 13 providers slot into one of them. - Cargo deps added:
notify,serde_yaml,sha2,once_cell,spellbook,keyring,reqwest,futures-util,async-stream. Installer size effectively unchanged (~15 MB).
🪶 Quality bar (every feature meets all of these)
- Bilingual UI (en + zh)
- Settings panel control
- Help dialog entry
- No console errors at idle
- Built-in fallbacks (missing pandoc / no API key / no workspace folder all show readable empty states, never crashes)
🙏 Thanks
- @beihai23 — preview-mode
Cmd+Fsearch (#21) and toolbar polish, both shipped in v1.3.0 - @luckylew23 — reported the Windows local-image bug (#22)
- All early supporters listed at solomd.app/thanks
Full changelog: v1.3.1...v2.0.0