v3.6 — Live-edit blocks, plus 5 polish fixes
v3.6 closes a live-edit gap that has been awkward since v2.3: standalone image lines and GFM tables now render in place, source returning the moment the cursor enters. Bundled with that: five polish fixes rolled in from rapid feedback after v3.5.5 — AI settings routing, PNG export sizing, an optional watermark, folder-picker memory, and a Mac toolbar overflow fix.
🔨 #44 — Live-edit blocks for images and tables
In live-edit view (the toolbar's pen-on-paper icon), markdown
source is shown inline with formatting applied. Until v3.6, two
block-level kinds didn't render in place: a line containing only
 sat as raw source, and a GFM table
block read as plain pipe-separated text.
v3.6 adds a new CodeMirror 6 block-decoration extension at
app/src/lib/cm-live-blocks.ts:
-
A line whose entire content is an image
(
with no surrounding prose) collapses to an actual<img>element. Image source flows through the sameresolveImageSrcpath the Preview pane uses, so relative paths resolve against the workspace + the active note's directory. -
A header row plus separator (
|---|/|:---:|) plus at least one body row collapses to a real<table>, rendered through the same markdown-it pipeline as Preview.
Both widgets unmount the moment the cursor enters any line inside the matched block range. No view-mode switch needed — edit, see source; move on, see render. The decoration is rebuilt on doc change, selection change, or viewport scroll, so feedback feels instantaneous.
Why a strict whole-line match for images rather than inline? Because replacing inline images would split a paragraph in the middle of a sentence and break the natural reading flow of the source. Live-edit's whole point is to keep the source one cursor-move away — surprise inline collapses fight that.
✅ Five polish fixes
All small individually, but they were stacking up after v3.5.5:
- AI button → wrong settings location. Clicking
the toolbar AI button when AI was disabled used to open the
Settings panel on the default Basics tab — not where
the AI toggle actually lives. The
solomd:open-settingsevent now carries an optionaldetail.section, and AI entry points (toolbar + AI rewrite overlay) pass'integrations'so users land directly on the AI block. - Image export crop-to-content. Short notes
used to export with empty space below them — html2canvas was
capturing more than the rendered article's bounding box. Fix:
pass explicit
width / height / windowWidth / windowHeightfromgetBoundingClientRect()so the canvas matches the rendered DOM exactly. - "Created with SoloMD" watermark — now a setting.
Previously hardcoded as a footer on every PNG export.
Reasonable default for a free MIT app, but it should be
opt-out, not forced. New setting
imageExportBranding(default ON) is toggleable in Settings → Export; when off, exports skip the footer + use tighter bottom padding so short notes don't carry phantom space. - Folder picker remembers last workspace.
useFiles.openFolder()now passesdefaultPath: workspace.currentFolderto the Tauri folder dialog. Without it, the OS picker reopened at the system default each time, ignoring the workspace SoloMD already had loaded. - Mac narrow-window toolbar overflow. When the
window was narrow enough that the toolbar's natural width
exceeded it, right-side buttons (AI / Sponsor / Settings)
were silently clipped.
.toolbaris nowoverflow-x: autowith a hidden scrollbar +flex-shrink: 0on every child group; right-edge buttons stay reachable via two-finger swipe at any window width.
📥 Download
Download v3.6.0 → All releases
Existing v3.0.x+ users see the in-app update prompt within 24h.
On Mac, brew upgrade --cask solomd works too.
CLI / MCP server are bumped to 3.6.0 in lockstep.
What's next — v3.7
iPad and Mac App Store resubmission gates are next on the list. Beyond that, v4 continues the agent-endpoint thrust (CLI + MCP + BYOK) — keep an eye on Discussions for direction.