Nested Markdown Renderer

by joechen
5
4
3
2
1
Score: 50/100

Description

Render nested GFM tables and indented callouts correctly in Obsidian Live Preview.

Reviews

No reviews yet.

Stats

1
stars
101
downloads
0
forks
22
days
22
days
22
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
3
commits

Latest Version

22 days ago

Changelog

CSS and layout maintenance release.

Improvements

  • Preserve Obsidian's native CodeMirror list indentation by replacing only table content instead of the entire source line.
  • Remove all plugin text-indent overrides and !important declarations.
  • Remove the broad :has() selector to avoid unnecessary style invalidation.
  • Preserve table layout, nested indentation, source reveal, and callout rendering behavior.

Compatibility

  • Obsidian 1.12.7 or later.
  • Desktop only.

Install from the Obsidian Community directory by searching for Nested Markdown Renderer or opening Add to Obsidian.

README file from

Github

Nested Markdown Renderer

Build Release License: MIT

Render nested Markdown tables and indented callouts correctly in Obsidian Live Preview without changing note source.

Why

Obsidian Reading view can render GFM tables nested inside list items, but Live Preview may leave the same table as pipe-delimited source text. Indented callouts can similarly degrade into code blocks. Nested Markdown Renderer closes those two gaps while preserving immediate source editing.

Live Preview before the plugin

Live Preview with Nested Markdown Renderer

Features

  • Renders nested GFM tables as semantic HTML <table> elements.
  • Supports optional leading and trailing pipes, escaped pipes, alignment markers, and single-column tables.
  • Preserves inline Markdown, links, and integrations that process rendered tables.
  • Repairs indented callouts that appear as code blocks in Live Preview.
  • Keeps folded callouts folded.
  • Reveals the original Markdown when the cursor enters a table or the rendered table is clicked.
  • Never rewrites note content.
  • Works entirely offline and makes no network requests.

Supported syntax

- Comparison

	Feature | Live Preview | Reading view
	:--- | :---: | ---:
	Semantic table | Yes | Yes

Leading and trailing pipes remain optional, as defined by GFM. The table must be nested under a list item and its header and delimiter rows must have matching column counts.

Indented callouts use normal Obsidian syntax:

- Important detail

	> [!note]- Collapsed note
	> Callout content.

Installation

Community directory

  1. Open Settings → Community plugins in Obsidian.
  2. Select Browse and search for Nested Markdown Renderer.
  3. Install and enable the plugin.

You can also open the listing directly: Add to Obsidian.

BRAT

  1. Install the BRAT plugin.
  2. Run BRAT: Add a beta plugin for testing.
  3. Enter JoeChen2me/obsidian-nested-markdown-renderer.
  4. Enable Nested Markdown Renderer under Settings → Community plugins.

Manual installation

  1. Download main.js, manifest.json, and styles.css from the latest GitHub release.
  2. Place them in <vault>/.obsidian/plugins/nested-markdown-renderer/.
  3. Reload Obsidian and enable Nested Markdown Renderer.

Compatibility

  • Obsidian 1.12.7 or later.
  • Desktop only in the initial release.
  • Tested on macOS with Live Preview.

Reading view already renders these blocks correctly and is left untouched.

Limitations

  • The plugin only handles tables nested beneath list items. Top-level tables remain under Obsidian's native renderer.
  • Callout repair relies on Obsidian's current Live Preview DOM structure because no public preprocessing hook exists for this case.
  • Mobile support is intentionally disabled until dedicated mobile testing is complete.

Similar plugins

Indented Table improves the readability of pipe-delimited source with editor decorations. Nested Markdown Renderer instead renders a semantic table and also repairs nested callouts. The implementations are independent.

Privacy and security

Nested Markdown Renderer:

  • does not collect telemetry;
  • does not read or write files through Obsidian's Vault or Adapter APIs;
  • does not persist or transmit note content;
  • does not access the network;
  • does not execute remote code.

It only inspects the active CodeMirror document and rendered editor DOM.

Development

npm install
npm run check
npm run dev

npm run dev watches TypeScript sources and writes main.js at the repository root. Copy main.js, manifest.json, and styles.css into the plugin folder in a test vault, then reload the plugin.

License

MIT