Rich Table

by sdking
5
4
3
2
1
New Plugin

Description

Rich tables with merges, styles, and choice columns, wikilinks inside fenced code blocks. - This plugin has not been manually reviewed by Obsidian staff.

Reviews

No reviews yet.

Stats

stars
downloads
0
forks
0
days
NaN
days
NaN
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
0
commits

Latest Version

Invalid date

Changelog

README file from

Github

Obsidian-only plugin. The rich-table fenced code block is a custom Obsidian renderer — it will not display in standard Markdown editors, GitHub previews, or any non-Obsidian environment.

Rich, interactive tables for Obsidian — with cell merges, inline editing, wikilink autocomplete, typed columns, title & footer, drag-to-reorder, and more. Everything that native Obsidian tables and most community table plugins simply can't do.


Why Rich Table?

Obsidian's built-in tables are plain GFM — no merges, no types, no interactive editing. Most community table plugins work around the same limitation. Rich Table takes a different approach: a dedicated fenced code block that gives you a spreadsheet-like experience inside your notes.

Pain point Native tables Rich Table
Cell merging (rowspan / colspan)
Inline click-to-edit
[[wikilink]] autocomplete in cells
Typed columns (status, priority…)
Per-cell style (bg, color, font size)
Table title & footer notes
Drag to reorder rows / columns
Add / hide / delete rows & columns

Demo

1 · Quick start from template — empty block → insert template → edit title

Quick start demo

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

Merge cells demo

3 · Typed columns & cell style — click to switch value, double-click to set bg / font size

Typed columns and style demo

4 · Wikilink autocomplete[[ triggers file suggest, # for headings

Wikilink autocomplete demo

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

Reorder and ops demo

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

Title and footer demo


Format

```rich-table
---
title: Project tracker
columns:
  - { name: Task,     width: 200 }
  - { name: Status,   type: task-status }
  - { name: Owner }
  - { name: Priority, type: priority, align: center }
merges:
  - A3:A4
styles:
  - { target: "1:1", bold: true, bg: "#e8f0fe" }
  - { target: "B*",  bg: "#e6f4ea" }
  - { target: "D2",  size: 14, color: "#c0392b" }
footer: "Updated weekly · click any cell to edit"
---
| Task     | Status  | Owner        | Priority |
| -------- | ------- | ------------ | -------- |
| Design   | done    | [[Alice]]    | high     |
| Build    | pending | [[teammate]] | medium   |
| Test     | todo    |              | low      |
| Deploy   | todo    |              | low      |
```

Coordinate system

Excel-style, 1-indexed. Row 1 = header row.

Notation Meaning
A1 Column A, row 1 (header)
A1:B3 Cell range
B* Entire column B
*2 Entire row 2
1:3 Row range

Features

Add a table title above and notes below using YAML fields. Both support inline Markdown (bold, italic, wikilinks). Click either to edit inline.

title: My Project Board
footer: "* estimates only · last updated 2025-01"

Multiple footer lines via YAML array. Shift+Enter adds a line break while editing.

Cell merging

Define any rectangular merge region in YAML. During interactive editing, drag across cells and click Merge in the popup. The plugin automatically expands to the minimum valid bounding box if a new merge partially overlaps an existing one.

Inline editing

Single-click any cell to open an inline editor. Supports plain text, wikilinks, bold/italic, and all inline Markdown. Enter saves; Escape cancels.

Type [[ inside any cell editor to trigger Obsidian's native file suggest:

  • [[filename — file search
  • [[filename#heading — heading links
  • [[filename#^blockid — block references
  • [[filename|alias — link aliases

Typed columns

Attach a type to any column. Values render as colored pill badges. Single-click a cell to choose from the dropdown — no typing needed.

Built-in types:

Type Values
task-status todo · pending · done · cancel
priority high · medium · low
boolean yes · no
rating ★ through ★★★★★
effort XS · S · M · L · XL
approval approved · pending · rejected

Custom types can be defined in Settings → Rich Table.

Double-click panel

Double-clicking any cell (or right-clicking a header) opens a unified panel with three sections:

  1. Cell operations — insert/delete/hide rows & columns; unmerge merged cells. For merged cells the range covers all spanned rows/columns automatically.
  2. Style — set background color, text color, and font size with live preview. Cancel to restore; Apply to persist. Clear format removes all cell-level styles.
  3. Change type — header cells only; cascading submenu to switch the column type.

Ctrl+drag to select a range without opening the panel (for visual inspection). When the popup does appear after dragging, it also shows Merge cells as the first action.

Style rules

Apply styles in YAML to any target: single cells, ranges, entire rows, or columns.

styles:
  - { target: "1:1",   bold: true, bg: "#f0f4ff" }
  - { target: "B*",    bg: "#e6f4ea" }
  - { target: "A2:A5", color: "#555", size: 13 }

Supported properties: bg, color, bold, italic, size (px).

Drag to reorder

Six-dot drag handles appear on hover — top of header cells for columns, left side of data cells for rows. Merge regions fully contained within the moved row/column travel with it; cross-boundary merges stay in place.

Edge strips

Hover near the bottom edge of the table to reveal a + strip for appending a new row. Hover near the right edge to append a new column.


Installation

Recommended — community plugin browser:

  1. Open Settings → Community plugins → Browse.
  2. Search for Rich Table and install.
  3. Enable the plugin.

Or install directly: Open in Obsidian

Manual install: copy main.js, manifest.json, and styles.css to <vault>/.obsidian/plugins/rich-table/.

Minimum Obsidian version: 1.8.7


License

Licensed under AGPL-3.0. Derivatives must be open-sourced under the same license.

For commercial licensing, contact: [email protected]

Support & feedback

Issues and feature requests: GitHub Issues


Known issues

  • Hidden column indicator width: the ▶N indicator column expands to fill available space in some themes due to theme CSS overriding width on th elements.

Planned

Interaction & editing

  • Keyboard navigation: arrow keys move between cells; Tab advances to the next editable cell.
  • Bulk paste from CSV / Excel: paste clipboard table data directly into the grid.
  • Column resize by drag: drag the column border to resize width, written back to columns[].width.

Data & display

  • Row sorting: click a column header to sort rows; sort state optionally persisted in YAML.
  • Row filtering: filter rows by column value (e.g. show only status = done); toggle without losing data.
  • Aggregate footer row: automatic SUM / COUNT / AVG for numeric and choice columns, rendered below the table.
  • Conditional formatting: rule-based automatic styles — e.g. red background when priority = high and status ≠ done.
  • Progress bar column type: renders a filled bar based on a 0–100 numeric value.
  • Color scale: gradient background across a numeric column from min to max, like Excel color scales.

Annotations

  • Cell comments: double-click to attach a floating note to any cell; rendered as a small corner badge; shown on hover. Comment text and position saved in YAML.
  • Arrow annotations (advanced): SVG overlay with ellipse highlight on the annotated cell, Bezier arrow to a freely draggable comment box outside the table.

Structure

  • Row-direction tables (direction: row): attach types to rows instead of columns.
  • Row grouping: collapsible row groups with a toggle, defined by a group: column or YAML.
  • Custom choice type UI: visual add/remove UI for custom types, replacing the raw-JSON textarea.

Claude Code skill

A SKILL.md is included for use with Claude Code. Once installed, Claude agents can create, read, and modify rich-table blocks directly in your vault — adding rows, applying styles, defining merges, and more — without you having to remember the syntax.

Install the skill:

# Copy to your Claude skills directory
cp SKILL.md ~/.claude/skills/rich-table/SKILL.md

Then ask Claude: "Create a project tracker table in my note using rich-table" and it will generate the block automatically.


Development

npm install
npm run dev        # watch mode — rebuilds on change
npm run build      # production build (tsc + minified main.js)
npm run lint       # ESLint with obsidianmd rules

Deploy to vault after build:

cp main.js manifest.json styles.css "<vault>/.obsidian/plugins/rich-table/"

Star history

Star History Chart