✨ Become an AI-era PM — words → product → doAIPM.com
#MD SoloMD

v4.10.1

The editor where agents live.

v4.0 is the agent-native author release. The agent goes from "external tool you run a CLI for" to a first-class editor surface — works continuously, across multiple vaults, with full visibility, replay, and rollback. Everything below is in core. No plugin tax. ~15 MB still.

v4.10

4.10 — PlantUML + a preview width slider.

  • PlantUML diagrams (opt-in). ```plantuml fences render as diagrams in the preview and in live edit, through a configurable PlantUML server. Off by default — your notes never leave the machine unless you turn it on; point it at a self-hosted server to keep rendering on your own network.
  • Preview width is yours. The preview / reading column width is now a slider (480–1600px, was a fixed 760px). "Fit width" still stretches to the window.
  • Tables no longer trap the caret. In live edit, ↑/↓ used to teleport clear over rendered tables — and could skip whole paragraphs below them. The caret now walks every line, steps into a table (or math / Mermaid block) to edit its source, and the block re-renders when you leave.
  • Code-block line numbers, fixed. Numbered code blocks no longer double their line spacing, C-style /** */ comments no longer swallow the rest of the block into row 1, and the WYSIWYG editor now honors the same line-number setting as the preview.
  • Clicks stay clicks (4.10.1). Clicking right after a tab switch — while diagrams/images were still rendering — could select multiple lines instead of placing the caret. The caret now stays where you pressed, even when the layout shifts mid-click.

v4.9

4.9 — Android real folders + editor polish.

The 4.9 line makes SoloMD open and edit your real folders on Android — not a sandboxed copy. On Android 11+ (including Honor / Huawei Magic OS, where the all-files permission grants nothing) SoloMD now uses the Storage Access Framework: pick a folder once, then read and write the actual .md files in place, saved back through the system content provider.

  • Android folder vault (SAF). Open a real folder, edit files in place, full-width mobile layout.
  • Save As fixed. It was writing empty files on Android — now the content lands in the file you choose.
  • Find (Ctrl/⌘+F) scrolls as you type. The editor jumps to the first match while you type, like your browser — no more "found nothing" on long notes.
  • Live-edit arrow keys cross blocks. ↑/↓/←/→ now move the caret between paragraphs in the Windows block editor — and as of 4.9.6 they respect soft-wrapped lines, so ↑ in a long paragraph no longer teleports over it.
  • Line numbers on Windows (4.9.6). The "show line numbers" setting now works in the Windows editor, with a gutter that stays aligned under word wrap.
  • Export Mermaid diagrams as PNG (4.9.6). Click a diagram → Export PNG or Copy image, at 2× resolution with a theme-matched background.
  • Save dialog picks up your title (4.9.6). A never-saved note starting with # Heading pre-fills "Heading.md" — stop retyping filenames.
  • Linux launch fix. AppImage no longer aborts with EGL_BAD_PARAMETER on some Intel / Mesa setups.

v4.7

4.7 — Windows gets a brand-new editor.

Windows only. SoloMD on Windows now uses a completely rebuilt block editor in place of CodeMirror. WebView2's contentEditable dropped the first character of CJK / IME input and doubled punctuation (worst with Sogou) — a bug that could not be fixed inside CodeMirror because it lives in WebView2 itself. The new editor types each block through a native <textarea> on the OS-native IME path, so the dropped-character and doubled-punctuation problems are gone.

The new Windows editor keeps full feature parity: live Markdown preview, autocomplete & slash commands (/), focus & typewriter mode, smart list continuation, AI rewrite (Ctrl+J), in-document find & replace (Ctrl+F), clipboard image paste, task-checkbox toggle, undo / redo, Tab indent, spellcheck and word-wrap.

macOS, Linux, iOS and Android are unaffected — they keep the existing CodeMirror editor. Also in 4.7: the command palette no longer jumps when you hover or wheel-scroll the list (#93).

v4.9

4.9 — Android opens your real vault.

On Android, SoloMD's only freely-readable folder used to be a sandbox under /Android/data that no file manager can reach on an unrooted phone — so you could never point the app at your actual notes folder. 4.9 adds All-files access: grant it once and Open Folder lets you browse to a real vault anywhere on the device (Documents, a Syncthing / Dropbox folder, an SD card) and edit files in place — no copying into the sandbox. The file tree, search, version history and save all work against your real paths (#148, #151).

Also in 4.9, a sweep of reported bugs. The macOS window can be dragged by its title bar again (#153) — the drag call had been silently rejected by a missing permission ever since the unified title bar shipped; double-click to zoom is back too. The "File Changed on Disk" dialog no longer interrupts typing on Android (#148) — the app's own saves were mistaken for external edits because Android delivers file events seconds late; changes are now judged by the file's modification time instead. The update-available notice now opens the solomd.app download page (reachable in mainland China, with the Gitee mirror) instead of GitHub (#154), and the no-op "Reveal in Finder" menu item is hidden on phones.

4.8.11 — three reported bugs, fixed. Android can open files again (#148): files handed over by a file manager, "Open with", or the in-app picker arrive as content:// URIs that no filesystem call can read — they now import into the SoloMD folder (keeping the original filename, or naming from the doc's first heading) and open normally, mirroring the iOS Files-app flow. GitHub sync no longer pushes to main while pulling from master (#147) — a second device could get permanently stuck never seeing the first device's pushes; pull now normalizes the branch the same way push does, with a fallback for legacy master-only remotes. And closing a tab returns to the adjacent tab instead of jumping to the first one in the list (#149 — root cause contributed by the reporter, thanks!).

4.8.10 — quality-of-life sweep. Ctrl+A finally selects the whole document in the Windows live editor (it used to stop at the current paragraph), so select-all → copy / delete / type-over behaves like any other editor. Deleting a file or folder now moves it to the system Trash / Recycle Bin instead of erasing it permanently (#112), and single entries can be removed from the Recent-files list. A new “single newline = line break” setting keeps the preview, the Windows live editor and every export (PDF, DOCX, Pandoc) agreeing on what Enter means (#141). Font size & family now apply everywhere — live-edit blocks, the preview pane and reading mode (#143). Switching tabs keeps your cursor and scroll position (#144), “open at startup in reading mode” works again with restore-tabs off, the settings pages no longer share one scroll position, and the toolbar AI-rewrite button works on Windows (#126).

4.8.9 — iOS file opening, fixed for real. Opening a Markdown file from the Files app, AirDrop or another app no longer fails with "No such file or directory" (#139) — the share sheet handed over a percent-encoded file:// URL that was never decoded. Recent files survive app updates (iOS moves the app container on every update; stored paths are re-anchored automatically), Open Folder now pins the workspace to SoloMD's Documents folder, and the tab bar scrolls with a swipe. Also on desktop: local SVG previews stay visible across windows (#142, thanks @beihai23).

4.8.1 — fixes. Find & Replace is discoverable again (a command-palette entry; it always lived behind Ctrl+F, #137). Clicking a relative .md link inside a WSL vault no longer fails with “os error 3” (#138). A pinned reading-mode startup with restore-tabs off no longer opens a blank window (#128). The macOS app icon is now a proper rounded squircle with margin (#111). And an expired/revoked GitHub sync token now prompts you to reconnect instead of throwing a raw 401.

4.8.0image hosting (图床). Paste, drop or pick an image and SoloMD can now upload it to an external image host and insert the returned URL — instead of only copying it into a local folder, like Typora / MarkText. Five backends: PicGo (local server), a custom command (PicGo-Core / uPic / any script), SM.MS, S3-compatible (Aliyun OSS / Tencent COS / Cloudflare R2 / MinIO), and a GitHub repo + CDN. Plus “insert image from URL” and a “upload all local images in this note” command. Auto-upload on paste falls back to a local copy if the host is unreachable. Configure in Settings → Writing.

4.7.4Backspace / Delete are reliable again in the Windows editor. Each paragraph there is its own text box, so pressing Backspace at the very start of a block (or Delete at its very end) used to hit the box edge and do nothing — delete felt hit-or-miss. Those boundary presses now act on the whole document, joining paragraphs or removing the blank line just like a normal editor, with the caret and focus following along.

4.7.3PDF export no longer crashes on themes or content using modern CSS color functions (color(), oklch(), color-mix()), and a failed export no longer leaves the window frozen or zoomable (#115). Plus: split-view scroll sync works again on Windows — the editor and preview had stopped following each other after the 4.7 Windows editor rebuild.

4.7.2 — the file tree gets a resizable sidebar (drag the edge, 180–600 px), per-filetype icons, and middle-ellipsis truncation for long filenames; the macOS title bar no longer overlaps the in-app toolbar (#121). Plus a PDF export fix: body paragraphs and list items are no longer sliced in half across page breaks.

4.7.1 — live preview now renders bullet lists, task checkboxes and horizontal rules (not just headings) across macOS / Linux / iOS / Android; source mode is genuinely plain again (headings no longer enlarged when live-preview is off). Plus: file-tree copy path / relative path (#120) and a close-folder button (#118), a limit-editor-width readable column (#109), and the fit-width toggle now works in reading mode (#117).

v4.6

4.6 — the knowledge-graph half, built.

A full design-system + Vue component-library rebuild (warm-neutral surfaces, orange #ff9f40 accent) and a unified macOS title bar (traffic lights inlined into the toolbar) — plus the seven structural features that used to be the one thing a knowledge-graph editor like Tolaria did and SoloMD didn't. All on disk as plain .md / YAML. No new file format.

Properties inspector (⌘⇧I)

A dedicated frontmatter editor — date, relation, status and tag pickers — instead of hand-editing YAML. Writes straight back to the note's front-matter.

Type-driven sidebar

type:<Name> notes become first-class collapsible sidebar sections (types-as-lenses), each with a custom icon, color, order, and pinned properties.

Typed relationships

belongs_to / related_to / has frontmatter fields with automatic inverses — declare one side, the other resolves itself.

Relationship graph ("Neighborhood")

A per-note explorer of outgoing and inverse relationships — walk the graph one hop at a time from whatever note you're in.

Saved filtered views

Persistent sidebar views stored as .solomd/views/*.yml — filter by type, status, date, or regex, and they stay put across launches.

Inbox workflow

⌘E marks the current note organized and auto-advances to the next — a real inbox-zero loop for triaging captured notes.

tldraw whiteboards

Markdown-backed boards via a ```tldraw fence — durable in the note's .md, and cross-compatible with Tolaria's on-disk board format.

Design-system UI + unified title bar

A warm-neutral surface palette with an orange #ff9f40 accent, rebuilt on a proper Vue component library, and a unified macOS title bar that inlines the traffic lights into the toolbar.

The five pillars (v4.0)

Each is in core. Toggleable via a setting. Built to play nicely with your existing notes — no schema migration, no new file format, no required cloud account.

1 · Inline Agent Panel

Right-side first-class panel (peer to Outline / Backlinks / Tags / History). Streamed chat-with-vault routed through the in-process MCP surface and your existing 14-provider AI stack. [[wikilink]] citations resolve to real notes; tool-call cards expand inline showing every read/write the agent makes. Reply too long? Insert and Copy buttons drop it into the active editor — replaces selection if any, else inserts at the cursor. Run history persists as plain markdown under .solomd/agent-runs/ — grep-able, git-trackable.

2 · Agent Recipes / Scheduled Runs

Declarative agent jobs as YAML in your vault: <workspace>/.solomd/agents/*.yml. Triggers: schedule (cron), on-save, on-commit, on-tag-add, manual. Safety rails are non-negotiable: every run gets its own AutoGit branch agent/<recipe>/<run-id>, writes are reviewable via accept / reject UI before merging, and a per-run write-cap (default 5, hard ceiling 50) prevents runaway loops. Rejected runs have the branch hard-deleted — zero residue. Ships with an 11-recipe cookbook (weekly review, daily summary, TODO extraction, translation, citation cleanup, CJK proofread agent, …) — install one, edit it, run it.

3 · Agent Trace View

Every run (Panel chat OR Recipe) emits a trace.jsonl per step: prompt / model_call / tool_call / tool_result / git_commit / done. Step cards expand to show args, results, token counts, cost estimate, AutoGit branch refs. Replay-from-step button rewinds the run to step N and re-executes from there with edited inputs — the path to self-correcting recipes. New MCP tool read_agent_trace(run_id) exposes traces to other agents.

4 · Workspace Federation

solomd-mcp --workspace path1 --workspace path2 --workspace path3 — one MCP session, many vaults. Tool signatures gain an optional workspace parameter; default = first passed (fully back-compat with single-workspace clients). AutoGit branches stay isolated per workspace. Settings → Integrations adds an MCP profiles UI: name a bundle of vaults, copy the Claude Desktop config snippet with one click.

5 · Ollama first-class

We do NOT bundle a local LLM runtime — Ollama already does that well. v4.0 polishes the integration: auto-detect at localhost:11434 (green status indicator in Settings → AI), one-click install hint when not found, three model presets (rewrite → qwen2.5:7b · quick → qwen2.5:1.5b · cjk → qwen2.5:14b), recommended pull from inline UI when no models installed. Recipes can specify provider: local (alias of ollama) for cheap autonomous loops with zero cloud cost. Your notes never leave the machine — true today via BYOK Ollama; v4.0 makes it discoverable.

🛡️ Safety rails (the bit nobody else does)

  • AutoGit branch sandbox. Every recipe run starts on its own branch. Your main stays untouched until you click Accept. A rejected run leaves nothing in your history — branch deleted, file tree reverted.
  • Per-run write cap. A model that asks to write 50 files when the cap is 5 gets refusals at the 6th tool call. No half-applied state, no surprise mass-edits.
  • Refuses to start on a dirty workspace. If you have uncommitted edits when a recipe fires, it errors out cleanly instead of sweeping your work-in-progress into an agent commit.
  • Path-traversal hardening. Both the in-process tool surface and every Tauri command that joins user-supplied run_id / path arguments now reject .. segments and absolute paths upfront. The agent literally can't write outside its workspace.
  • Replayable trace. Every step on disk in line-delimited JSON. Suspicious behavior in the panel? Walk the trace, find the bad step, replay from N–1 with edited inputs.

Quality bar

  • First-run wizard. New install meets the Agent Panel within 60 seconds — guides you through BYOK key entry OR Ollama setup. Re-launchable from Help.
  • Recipe cookbook (11 starters). Settings → Recipes → Browse cookbook. Weekly review, daily summary, TODO extraction, translation pass, citation cleanup, CJK proofread agent, link-rot detector, frontmatter normalizer, outline-to-blog, refactor pass, weekly tag triage. Install one, edit the prompt, run it.
  • Public REST API (localhost only, token auth). Same surface as MCP for clients that don't speak MCP yet — Alfred / Raycast / n8n / your own scripts.
  • BYOK cost meter. Per-provider running tokens-spent counter, opt-in. Settings → Integrations.
  • Localization. ja / ko translations scaffolded for README + iPad metadata. en/zh remain the full-coverage UI languages.

UX polish you'll notice on day one

  • IME composition guard everywhere. Pinyin users typing Chinese, Japanese kana mode, Korean Hangul — pressing Enter to commit a candidate no longer fires "send" in chat / "rename" in file tree / "open" in command palette and search. Fixed across 7 input surfaces.
  • Insert / Copy on assistant replies. Two buttons under each completed reply. Insert respects the current editor selection (replaces it) or falls back to cursor insertion. Copy is plain clipboard.
  • Window UX on macOS. Launch activation timing is right — SoloMD becomes frontmost on cold start instead of opening behind Finder. Restored window position stays inside the current monitor work area; bad saved state from a now-disconnected secondary monitor recenters cleanly instead of opening off-screen.
  • Stuck "streaming…" with no error. Fixed. A misconfigured provider (e.g. Ollama with a model that isn't pulled) used to hang the panel forever. Now you see a red error banner with the actual response from the backend, and the Send button comes back.

What v4.0 explicitly skips (and why)

Saying "no" is part of the product. These were considered and consciously not shipped:

  • Bundled local LLM runtime. Ollama already covers this; re-implementing violates "write less code we maintain forever." BYOK provider stays the path.
  • Online recipe marketplace. Server ops + moderation = off-mission. Cookbook ships in-tree.
  • Multi-user / team agents. Violates "one window, one writer." This product is for the single author; collaboration belongs to a different product.
  • Copilot-style ghost-text autocomplete. Different brand. Ghost-text dilutes the writer's voice; our agents work at vault granularity instead, with batched reviewable writes.

Upgrade notes

  • No file-format changes. Your existing .md files, AutoGit history, sync setup, BYOK keys all carry over untouched.
  • Agent Panel auto-enables on first launch. v3.6.x users had a hidden showAgentPanel: false from the v4-beta scaffolding period; a one-time migration flips it on so you actually see the marquee feature. Toggle off via ⌘⇧P → View: Toggle Agent Panel if you don't want it.
  • Settings layout adds Recipes and Cost meter tabs under Integrations. Existing settings keep their previous tabs.
  • The MCP server (solomd-mcp) gained a --workspace flag (repeatable). Older MCP clients with a single workspace argument keep working unchanged; the federation behavior is opt-in.

🔮 What's next

The 5 pillars + quality bar are the headline drop. The v4.x and beyond open directions on the roadmap: a sandboxed scripting API, a CLI v2 (rewrite / commit / semantic search / recipe-trigger from terminal), and the long-deferred "should SoloMD become a business?" question (paid sync — original v3.0 question, still unanswered, no engineering until decided).

Thanks to everyone who filed issues, opened PRs, and ran the v4-beta builds through real vaults during the quiet phase. v4.0 shipped because dogfooding caught the bugs that integration tests didn't. Earlier: browse the blog →

Comments & feedback

Comments live on GitHub Discussions — sign in once with your GitHub account.

Comments load from GitHub Discussions. If you see this message instead, the maintainer has not finished the one-time giscus.app setup yet — see web/COMMUNITY-SETUP.md.

Open on GitHub Discussions →