moranrs191 downloadsAll-in-one Markdown table workflow: floating toolbar, visual grid editor, and merged-cell support with MultiMarkdown ^^ / || syntax.
English | 简体中文
All-in-one Markdown table workflow for Obsidian. Combines the most useful pieces of three popular table plugins into a single, modern UI:
Table Extended uses the same parser hook for source rendering. Running both plugins together is not supported: Table Master will warn you on load and you should disable the others.
When the cursor enters a GFM table the floating toolbar appears above the first row:
All table operations are also available from the editor's right-click menu when the cursor is inside a table.
Run the command Open grid editor (or click the grid button on the toolbar) to launch a Modal that displays the table as an Excel-like grid.
Shift-click, to select a rectangular range| Stage | Direct Products | ATP Yields |
| ------------------ | --------------- | ---------- |
| Glycolysis | 2 ATP ||
| ^^ | 2 NADH | 3-5 ATP |
| Pyruvate oxidation | 2 NADH | 5 ATP |
| **30-32** ATP |||
^^ — the cell merges with the row directly above (rowspan)|| extends the previous cell by one column; ||| by two, and so on (colspan)The parser also accepts every other Table Extended construct:
[Caption text] or [Caption text][label] immediately above or below<tbody> sections by inserting a single blank line inside the body\If you prefer maximum portability, set Merged-cell output format to HTML and Table Master will write a regular <table> with colspan / rowspan attributes instead.
Live Preview applies merges by toggling rowspan / colspan attributes and hiding placeholder cells in Obsidian's existing table widget — cell text is left untouched, so the widget remains compatible with normal Obsidian editing. Multi-line cells, captions, and inline markdown re-rendering remain Reading View only.
Tab / Shift-Tab move between cells and Enter jumps to the next row (creating one if needed). Disable in settings if it interferes with your workflow.
Run Design new table in grid editor… to be asked for rows / columns / header presence first, then drop straight into the grid editor. Hit Apply to insert the finished table at the cursor — no need to be inside an existing table beforehand.
Copy a range from Excel, Google Sheets, Numbers, or any web page that contains an HTML <table>, then run Paste table from clipboard (also available as a button on the floating toolbar when the cursor is in a table):
text/html clipboard payload is parsed; colspan / rowspan are preserved and translated to MultiMarkdown placeholders.Alt+Enter, <br> in HTML, <p>/<div>/<li> blocks) are emitted as a single GFM row with <br> between segments. Reading view + Live Preview both upgrade those <br> tokens to real line breaks, so a multi-line cell still wraps visually while merge structure (rowspan/colspan) stays intact.git clone <repo> obsidian-table-master
cd obsidian-table-master
npm install
npm run build
Copy main.js, manifest.json, and styles.css into <vault>/.obsidian/plugins/table-master/, then enable the plugin in Obsidian.
npm run dev
esbuild watches src/ and rebuilds main.js on change. Combine with the hot-reload plugin for an instant feedback loop.
Every action is exposed as a command and can be bound to a hotkey from Settings → Hotkeys.
| ID | Description |
|---|---|
insert-row-above |
Insert row above |
insert-row-below |
Insert row below |
insert-col-left |
Insert column to the left |
insert-col-right |
Insert column to the right |
delete-row |
Delete row |
delete-col |
Delete column |
move-row-up |
Move row up |
move-row-down |
Move row down |
move-col-left |
Move column left |
move-col-right |
Move column right |
align-left/center/right/none |
Align column |
merge-up |
Merge with cell above |
merge-down |
Merge with cell below |
merge-left |
Merge with cell to the left |
split-cell |
Split merged cell |
format-table |
Re-pad table cells |
sort-asc / sort-desc |
Sort by column |
open-grid-editor |
Open the visual grid editor on the table at the cursor |
design-new-table |
Open the grid editor with a fresh empty table and insert on apply |
toggle-floating-toolbar |
Show/hide the floating toolbar |
new-table |
Insert a new empty table |
import-table-from-clipboard |
Paste an Excel / web table from the clipboard |
^^ for rowspan, trailing || for colspan; same as Table Extended) or raw HTML (colspan / rowspan attributes on a <table>)position: fixed so a custom theme can't hide them; non-focused tabs auto-hide their own toolbar):Pop up at click position when clicking a table (default): the toolbar stays hidden until you click inside a table, then springs up at the click point and stays there until you click outside any table.Follow mouse inside table; top-left otherwise: always visible while the editor is focused. Trails the mouse pointer whenever it's hovering a table; falls back to the top-left of the editor when not.Always at the editor's top-left: pinned at the top-left of the editor pane regardless of where you click.npm test # run unit tests for parser / serializer / ops
npm run build # type-check and bundle for production
Architecture is layered so logic is decoupled from Obsidian:
src/
table/ pure model + parser + serializer + ops (no Obsidian deps)
editor/ editor mutations driven from the cursor
ui/ floating toolbar, context menu, modal grid editor
render/ reading-view post-processor + live-preview view plugin
i18n/ en / zh dictionaries
settings.ts settings tab
main.ts plugin entry
Inspired by:
All three are MIT-licensed; this plugin is also MIT.