DecksMD
← All releases

DecksMD 2.2.0

Released 25 June 2026

Decks 2.2.0 Release Notes

🧩 Templates: render table rows your way

Decks 2.2.0 introduces table templates — design a card once, and every row of a tagged table renders through it. Write the template in plain HTML/CSS or Markdown, drop placeholders like {{Word}} where the column values should go, and bind it to your tables with a tag. Your vocabulary tables can become styled furigana cards, your formula tables can render proper math, your data tables can look exactly how you want — without touching the underlying notes.

Set a template folder under Settings → Templates, author a tagged template file, tag the heading above a table, and you're done. See the Templates guide for a full walkthrough.

How it works

  • One template, many rows. A single template binds to a whole table. Each row is merged into it independently, so a 200-row table is 200 cards that all share one design.
  • Author with code blocks. A template file uses fenced blocks decks-html-front, decks-html-back, decks-html-notes (and the decks-md-* variants) — pick HTML for full control or Markdown for simple formatting, per card face.
  • Bind by tag. A template declares its tag (frontmatter tags: or an inline #tag on its heading). Any table whose heading carries that tag — or whose deck frontmatter carries it — renders through the template. No tag match → the normal Front/Back/Notes columns are used, exactly as before.
  • Fill columns with placeholders. {{ColumnName}} pulls the cell by header (case-insensitive), and {{1}}, {{2}}, … pull by position. Unmatched placeholders simply resolve to nothing.
  • Sandboxed, theme-aware rendering. HTML faces render inside an isolated, sanitized Shadow DOM — <style> is allowed, <script> and inline event handlers are stripped. Cards automatically match your Obsidian light/dark theme, fonts, and colors, and update live when you switch themes.
  • A CSS layout API. Templates inherit a card frame by default (padding, centering, rounded bounds) and can override it through CSS variables — :host { --padding: 0; --align: flex-start; --bg: #1e1e1e; } — for anything from comfortable reading cards to edge-to-edge custom designs.
  • Images just work. Obsidian embeds (![[diagram.png]]), Markdown image links, and external image URLs all render inside HTML templates, scaled to fit the card.
  • Per-column editing. Editing a template-bound card shows one labeled input per table column, so you edit the data, not the markup.

Upgrading: existing decks are unaffected — templates are opt-in. Set a template folder to start using them.

Also on GitHub.