DecksMD
← All releases

DecksMD 1.12.4

Released 24 May 2026

Changes

Spatial cards — follow-ups to 1.12.3

Editing spatial cards now works

The Edit button in the Flashcard Manager previously failed silently for spatial cards (the writer had no code path for them). Spatial cards are now first-class in the editor:

  • Opening a spatial card in the editor shows three fields: Front, Back, and Hint — each editable independently.
  • Saving rewrites all three sites in one operation: the canvas from-node text (front), the to-node text (back), and the edge label (hint). Other nodes, other edges, and per-node fields (x, y, color, etc.) are byte-preserved.
  • Trailing #tags on the from-node text are preserved across edits. Edit the front text and your tags stay put.
  • Stale-detection covers all three sites: if the from-node, to-node, or edge label changed in the canvas while the manager was open, the save is refused with a clear "Refresh and try again" message instead of clobbering the canvas.
  • Cards whose back contains a ==cloze== highlight on a spatial edge are intentionally out of scope for in-place editing (they'd need to choose between siblings); the manager's edit button is disabled for them with a tooltip pointing the user to edit on the canvas directly.

Filter by Spatial in the Flashcard Manager

The Flashcard Manager's Type filter now has a fifth option: Spatial. Pair it with a deck-tag filter (deckTag = #decks/canvas) to slice a canvas deck down to just its graph cards. Localized in all 13 supported languages.

Under the hood

  • FlashcardWriter.FlashcardEdits gains a "spatial" variant with front, back, and hint payloads.
  • New applySpatialCanvasEdit helper locates the edge by card.edgeId in the canvas JSON, validates from-node / to-node existence, runs the three stale checks, then rewrites all three values and re-serializes with tab indentation (matching Obsidian's own format).
  • 12 new integration tests cover the happy paths, tag preservation, three stale-detection variants, missing edgeId, deleted edge, and the two empty-field validation rejections.

Also on GitHub.