sdking1k downloadsRich tables with merges, styles, and choice columns, wikilinks inside fenced code blocks.
🔀 Merge · 🎨 Style · 🏷️ Type · 🔗 Wikilink · ↕️ Reorder · ↔️ Resize · 📐 Math · 📋 Lists
Why? · Demo · Format · Features · Install · 中文
Follow on WeChat for more Obsidian plugins & tools
Obsidian only. The
rich-tablefenced code block is rendered by the plugin — it won't display in standard Markdown editors or GitHub previews.
Rich, interactive tables for Obsidian — with cell merges, inline editing, wikilink autocomplete, typed columns, drag-to-reorder, math formulas, lists, images, and more.
| Feature | Native tables | Rich Table |
|---|---|---|
| Cell merging | ✗ | ✓ |
| Click-to-edit cells inline | ✗ | ✓ |
[[wikilink]] autocomplete in cells |
✗ | ✓ |
| Math formulas (KaTeX) in cells | ✗ | ✓ |
| Lists, bold, italic, links, images in cells | ✗ | ✓ |
| Multi-line cell content | ✗ | ✓ |
| Typed columns (status, priority…) | ✗ | ✓ |
| Per-cell style (bg color, font size…) | ✗ | ✓ |
| Column alignment (left / center / right) | ✗ | ✓ |
| Table title & footer notes | ✗ | ✓ |
| Drag to reorder rows / columns | ✗ | ✓ |
| Drag to resize column width / row height | ✗ | ✓ |
| Insert / hide / delete rows & columns | ✗ | ✓ |
| Row filtering by value | ✗ | ✓ |
| Per-table lock | ✗ | ✓ |
⬆️ Upgrading from v0.x? — v1 → v2 migration: the upgrade banner on old-format tables, converting in one click or keeping the old format read-only.
1 · Quick start from template — or a blank table
An empty rich-table code block shows one button per built-in template (currently a full-featured Demo and a Cornell Notes layout) plus Insert blank table, which opens a Word/Sheets-style size picker — hover an 8×6 grid to preview and click to confirm a row/column count, or type exact numbers for anything past the visible grid. Hovering any button live-previews that option below; with nothing hovered, the default template previews. Templates are auto-discovered from src/templates/*.yaml (same pattern as themes) — no code changes needed to add one.

2 · Merge cells — drag-select → Merge in popup

3 · Typed columns & cell style — click to pick value, double-click to set style

4 · Drag to reorder & row/column ops — ⠿ handle + double-click menu

5 · Drag to resize — column header right edge · row bottom edge

6 · Title & footer — click to edit, Shift+Enter for multi-line

7 · Column filtering — filter rows to focus on what matters

8 · Rich cell content — math · bold/italic · links · images · lists · multi-line
🎬 Demo GIF coming soon
9 · Copy/paste interop with Excel & Markdown — paste values pasted from Excel/Sheets straight into a cell (detected via clipboard HTML); copy a selection out as an Excel-compatible table or as a Markdown table, from the selection/cell/header menus
🎬 Demo GIF coming soon
10 · Row sorting — column selector popup: one-time sort or live auto-sort with a header indicator

11 · Summary/aggregate rows — Sum/Average/Min/Max/Count via the Σ icon or column selector popup; per-row remove and reorder

12 · Collapse/expand table — fold-icon button hides/shows the body while keeping the title and header row visible

13 · Table lock — 🔒 icon disables all graphical editing for that table

14 · Auto-fit all — ⊞ icon fits every column width and row height to its content in one click

15 · Theme picker — 🎨 icon switches between built-in themes (academic, grid, plain)

16 · Split cell — double-click a plain cell → split into 2 rows/columns; other cells in that row/column keep their current shape
🎬 Demo GIF coming soon
```rich-table
---
version: 2
title: Project tracker
columns:
- id: c_000000
name: Task
width: 200
- id: c_000001
name: Status
type: task-status
width: 110
rows:
- id: r_000000
cells:
c_000000: "**Design** — architecture review"
c_000001: done
- id: r_000001
cells:
c_000000: Build
c_000001: pending
- id: r_000002
cells:
c_000000: |-
- Write tests
- Fix edge cases
c_000001: todo
merges:
- anchor: r_000000.c_000000
end: r_000001.c_000000
styles:
- target: header
bold: true
bg: "#e8f0fe"
- target: r_000000.c_000001
bg: "#f0fdf4"
footer: "Updated weekly · click any cell to edit"
---
<!-- Generated by Rich Table. Do not edit below — data source is the YAML front-matter above. -->
| Task | Status |
| ----------------------------- | ------- |
| **Design** — architecture ... | done |
| Build | pending |
| - Write tests<br>- Fix edge.. | todo |
```
The YAML front-matter is the only data source. The pipe table below the <!-- Generated … --> comment is a read-only mirror regenerated on every write-back and can be safely ignored.
Cell content supports full Obsidian Markdown: **bold**, *italic*, [[wikilinks]], [links](url), , - lists, $math$, <br> for line breaks.
Style targets (v2 ID-based):
| Target | Meaning |
|---|---|
header |
Entire header row |
header.c_xxx |
Single header cell |
r_xxx |
Entire data row |
c_xxx |
Entire column (including header) |
r_aaa:r_bbb |
Row range |
c_aaa:c_bbb |
Column range |
r_aaa.c_aaa:r_bbb.c_bbb |
Rectangle range |
r_xxx.c_yyy |
Single data cell |
Upgrading from v0.x? Tables written in the old format automatically show an upgrade banner. Click Convert to new format for one-click migration, or Keep old format to continue reading without converting.
Add theme: to the YAML front-matter to apply a built-in visual theme:
theme: academic # LaTeX booktabs style — three horizontal rules, no grid lines
theme: grid # Excel "All Borders" style — full grid, bold outer frame + header rule
theme: plain # Colorful gradient header + animated border
| Theme | Description |
|---|---|
| (none) | Default — no special styling |
academic 📐 |
Inspired by LaTeX's booktabs package: toprule / midrule / bottomrule, no vertical lines, no cell backgrounds |
grid 🔲 |
Full grid on every cell, a bolder outer frame, and a bolder rule separating the header from the data |
plain 🙂 |
Animated rainbow border, gradient header with breathing effect, cursor-reactive row glow |
Themes are purely visual — they never affect data or layout.
Quick customization without a theme: for a small tweak (not a full theme), set one of these CSS variables on .bt-render-root in an Obsidian CSS snippet — no selectors needed:
| Variable | Controls | Default |
|---|---|---|
--bt-border-outer |
Table's outer edge | none |
--bt-cell-border (+ -top/-right/-bottom/-left) |
Gridlines between cells | none |
--bt-cell-bg |
Data cell background | transparent |
--bt-header-bg |
Header cell background | theme default |
.bt-render-root {
--bt-header-bg: #223;
--bt-cell-bg: #fafafa;
--bt-border-outer: 2px solid #888;
}
A manually-set per-cell style (via the style panel) always wins over both themes and these variables.
| Feature | |
|---|---|
| Editing | |
Single-click any cell to edit — text, [[wikilinks]], bold, italic |
✅ |
[[ triggers Obsidian's native file & heading autocomplete |
✅ |
| Shift+Enter for line breaks inside the cell editor | ✅ |
| Double-click / right-click menu — insert, delete, hide rows & columns; merge cells; set style; change column type | ✅ |
| Column alignment (left / center / right) — in the double-click header menu | ✅ |
| Keyboard navigation — arrow keys between cells, Tab to advance | 🔜 |
| Paste values from Excel / Sheets — Ctrl+V into a cell, detected via clipboard HTML | ✅ |
| Rich cell content | |
Math formulas — inline KaTeX: $E=mc^2$ |
✅ |
Full Markdown: bold, italic, ==highlight==, [[wikilinks]], external links |
✅ |
Images — inline  or ![[local.png]]; drag image edge to resize |
✅ |
Lists — lines starting with - render as compact bullet lists |
✅ |
Multi-line — <br> tag or Shift+Enter in the editor |
✅ |
| Typed columns | |
| Colored pill badges; single-click to pick value from dropdown | ✅ |
Built-in types: task-status · priority · boolean · rating · effort · approval |
✅ |
| Custom types defined in Settings → Rich Table | ✅ |
| Row filtering — funnel icon on each column header; click to open a checkbox panel and filter by value | ✅ |
| Filter status bar — "Showing X of Y · Clear" unified with sort / aggregate info | 🔜 |
| Row sorting — via the column selector's popup menu: one-time (reorders rows once) or live (auto-sorts, shown by an indicator until cleared) | ✅ |
| Summary rows — Sum / Average / Min / Max / Count, table-wide (toggle via the Σ icon in the left control column, or the column selector's popup menu); one row per active statistic at the table's bottom, computed over currently-visible rows, columns without meaningful data left blank. Each summary row gets its own selector cell (remove) and drag grip (reorder) | ✅ |
Custom formulas — type Excel-style syntax (=SUM(A1:B3)); cell references get converted to this table's own stable row/column IDs on entry, so they survive inserts/reorders instead of drifting like raw A1 coordinates would. Same-sheet first; cross-sheet references are a separate, later phase |
🔜 |
| Styles | |
| Per-cell bg color, text color, and font size — via panel or YAML | ✅ |
| Row / column selector strips — hover to reveal, click or drag to style entire rows/columns | ✅ |
| Per-table lock — click the 🔒 icon at the top-left corner to disable / re-enable all editing | ✅ |
Themes — set theme: academic (booktabs), theme: grid (full grid + bold outer/header rules), theme: plain (colorful gradient + animated border) |
✅ |
| Custom cell padding (top / bottom / left / right) | 🔜 |
| Collapsible table — fold-icon button in the top-left corner shows/hides the table body, keeping the title and header row visible | ✅ |
| Conditional formatting — auto-apply styles based on cell value rules | 🔜 |
| Progress bar column type | 🔜 |
| Merges | |
| Cell merging — drag-select → Merge in popup, or declare in YAML | ✅ |
| Split a plain cell into 2 rows or 2 columns — double-click menu; other cells in that row/column keep their current shape (merged or not) | ✅ |
| Copy selection to Excel / Sheets or as a Markdown table — selection/cell/header menus | ✅ |
| Merge / style state preserved when copying to Excel | 🔜 |
| Table structure | |
| Hover selector strips to reveal ⠿ drag grips; drag to reorder rows / columns | ✅ |
| Hover selector strips to reveal resize seams; drag to resize, double-click to auto-fit | ✅ |
| Auto-fit-all button (top-left ⊞) — one click to auto-fit every column and row | ✅ |
| Hover bottom / right edge → + strips to append rows / columns | ✅ |
| Hide and show rows / columns | ✅ |
| Freeze header row / first N columns | 🔜 |
| Row grouping — collapsible groups | 🔜 |
| Views — alternate ways to browse the same rows/columns, switched via the layout-grid icon (or a Kanban/Calendar board's own icon column) | |
| Kanban board — group rows into lanes by any choice-typed column; drag a card to another lane to change its value | ✅ |
Calendar — place rows on a month grid by any date-typed column; drag an event to reschedule it, undated rows list in an Unscheduled tray below |
✅ |
| Multi-sheet — Excel-style tab bar at the bottom once a table has 2+ sheets | |
| Left-toolbar button converts a single-sheet table into a multi-sheet workbook; each sheet has its own columns/rows/merges/styles/views | ✅ |
| Tabs: click to switch, click-again/double-click to rename, drag to reorder, right-click for rename / tab color / delete | ✅ |
| Title & annotations | |
| Table title above, footer notes below — click to edit inline | ✅ |
| Cell comments — floating notes shown on hover | 🔜 |
| Excel interop | |
Open/edit an external .xlsx file directly (e.g. excel: path/to/file.xlsx in the front matter) — same editing UI as a normal code-block table, backed by the actual spreadsheet file |
🔜 |
| Issue | Workaround |
|---|---|
Reading mode: v2 tables remain interactive — In Obsidian reading view, v2-format tables still show hover strips and allow editing. The allowReadingViewEdit setting has no effect on v2 tables. v1 tables (awaiting upgrade) are correctly read-only. |
Use the 🔒 lock button to prevent accidental edits in reading mode. |
Community plugin browser (recommended):
Or: Open in Obsidian
Manual: copy main.js, manifest.json, styles.css to <vault>/.obsidian/plugins/rich-table/
Minimum Obsidian version: 1.8.7
Open Settings → Rich Table to configure the plugin.
| Setting | Default | Description |
|---|---|---|
| Allow editing in reading view | Off | When off, all interactive behaviour (hover strips, click-to-edit, panels, dropdowns) is disabled in Obsidian's reading view. Live preview / source mode is always interactive. |
| Single-click to edit | Off | When on, a single click on a cell enters edit mode immediately (no delay), and the style panel opens with Ctrl/Cmd+click instead of double-click. When off (default), single click enters edit after a short delay and double click opens the style panel. |
| Custom types | — | Define custom choice-column types with labels and colors. |
A SKILL.md is included for use with Claude Code. Once installed, Claude agents can create and modify rich-table blocks directly in your vault — adding rows, applying styles, defining merges — without you having to remember the syntax.
cp SKILL.md ~/.claude/skills/rich-table/SKILL.md
Then ask Claude: "Create a project tracker table in my note using rich-table".
AGPL-3.0 — derivatives must be open-sourced under the same license.
For commercial licensing: [email protected]
Rich Table is free and open-source under the AGPL-3.0 license. If this plugin has improved your workflow, you can support its ongoing development with a voluntary donation. Every contribution helps fix bugs, add new features, and maintain compatibility with future Obsidian updates.
| WeChat Pay | Alipay |
|---|---|
![]() |
![]() |
Thank you for your support! 🙏
Issues and feature requests: GitHub Issues