MDBridge - Markdown Compatibility Enhancement

approved

by lee

GFM rendering, Notion import, LaTeX enhancement, and standard Markdown export for Obsidian. - This plugin has not been manually reviewed by Obsidian staff.

35 downloadsUpdated 23d agoMIT

MDBridge

GFM rendering, Notion import, LaTeX enhancement, and standard Markdown export for Obsidian.

Features

Free Features

  • GFM Strikethrough — Render ~~strikethrough~~ syntax in all contexts including tables
  • GFM Task Lists — Interactive checkboxes with click-to-toggle state persistence
  • GFM Footnotes — Enhanced footnote rendering with hover preview and styled backlinks
  • GFM Definition Lists — Render Term: definition syntax as styled <dl> elements
  • LaTeX Enhancement — Block ($$...$$) and inline ($...$) formula rendering powered by KaTeX
  • Chemical Equations — mhchem syntax support for chemistry formulas (e.g., \ce{H2O})

Pro Features

  • Notion Import — Convert Notion HTML exports to Obsidian-compatible Markdown
    • Callout blocks → Obsidian callouts
    • Toggle blocks → Nested lists
    • Database tables → Markdown tables
    • Automatic UUID cleanup in filenames
  • Standard Markdown Export — Export Obsidian notes to standard Markdown
    • Wikilinks → Standard Markdown links
    • Plugin metadata stripping
    • Task list normalization
    • Format cleanup (line endings, whitespace, trailing newlines)
  • Batch Operations — Import/export entire folders or vaults

Installation

From Obsidian Community Plugins

  1. Open Obsidian Settings → Community Plugins
  2. Click "Browse" and search for "MDBridge"
  3. Click "Install" then "Enable"

Manual Installation

  1. Download the latest release from GitHub Releases
  2. Extract main.js, manifest.json, styles.css, and styles/ into your vault's .obsidian/plugins/mdbridge/ folder
  3. Enable the plugin in Obsidian Settings → Community Plugins

Usage

GFM Rendering

All GFM features are enabled by default. Toggle them in Settings → MDBridge:

  • Strikethrough: ~~deleted text~~
  • Task Lists: - [ ] Todo / - [x] Done
  • Footnotes: [^1] references with [^1]: definition
  • Definition Lists: Term\n: Definition
  • LaTeX: $E = mc^2$ (inline) or $$\int_0^1 x^2 dx$$ (block)
  • Chemistry: Use ```chem code blocks with \ce{2H2 + O2 -> 2H2O}

Notion Import (Pro)

  1. Export your Notion pages as HTML
  2. Run the command "MDBridge: Import from Notion export"
  3. Select the exported folder
  4. Notes are converted and saved to your specified target folder

Markdown Export (Pro)

  • Export current file: "MDBridge: Export current file to standard Markdown"
  • Export entire vault: "MDBridge: Export to standard Markdown"

Exports convert Obsidian-specific syntax to standard Markdown for cross-tool compatibility.

Configuration

Access settings via Settings → MDBridge:

SettingDescriptionDefault
StrikethroughRender ~~text~~ in all contextsOn
Definition listsRender GFM definition listsOn
LaTeX formula enhancementKaTeX rendering for mathOn
Interactive task listsClick checkboxes to toggleOn
Show completion datesAppend date when task checkedOff
Footnote enhancementImproved footnote renderingOn
Hover previewShow footnote content on hoverOn

Development

Prerequisites

  • Node.js 18+
  • npm

Setup

npm install

Build

npm run build    # Production build
npm run dev      # Development build with watch mode

Test

npm test             # Run all tests
npx jest --verbose   # Run with verbose output

Project Structure

mdbridge/
├── src/
│   ├── main.ts          # Plugin entry, lifecycle, commands
│   ├── renderer.ts      # GFM rendering (strikethrough, footnotes, task lists, def lists)
│   ├── latex.ts         # LaTeX/KaTeX rendering (block/inline math, chemistry)
│   ├── importer.ts      # Notion HTML → Markdown conversion
│   ├── exporter.ts      # Obsidian → Standard Markdown export
│   ├── settings.ts      # Settings panel UI
│   ├── license.ts       # Pro feature gating
│   ├── import-modal.ts  # Import folder selection modal
│   ├── export-modal.ts  # Export folder selection modal
│   └── types.ts         # Shared types and defaults
├── __tests__/
│   ├── renderer.test.ts    # GFM rendering tests
│   ├── latex.test.ts       # LaTeX/KaTeX tests
│   ├── importer.test.ts    # Notion import + edge cases + license tests
│   ├── exporter.test.ts    # Markdown export + edge cases + E2E pipeline
│   └── settings.test.ts    # Settings and license integration tests
├── styles/             # KaTeX CSS (auto-copied on build)
├── styles.css          # Plugin styles
├── manifest.json       # Obsidian plugin manifest
├── esbuild.config.mjs  # Build configuration
├── CHANGELOG.md        # Version history
├── LICENSE             # MIT license
└── package.json

Troubleshooting

LaTeX formulas not rendering

  • Ensure "LaTeX formula enhancement" is enabled in Settings → MDBridge
  • Check that the styles/katex.min.css file exists in your plugin folder
  • Try reloading the plugin (disable then re-enable)
  • Use $...$ for inline and $$...$$ for block formulas

Notion import shows "No HTML files found"

  • Export your Notion pages as HTML (not Markdown or CSV)
  • The source folder must contain .html files
  • Nested folders are searched recursively

Wikilinks not converted during export

  • Enable "Convert wikilinks" in the export modal
  • Wikilinks inside code blocks are intentionally preserved
  • Path-style wikilinks ([[Folder/Note]]) are supported

Free tier import limit

  • Free tier allows up to 5 files per import
  • Upgrade to Pro for unlimited imports
  • Pro activation: Settings → MDBridge → License → Enter key

Plugin not loading after install

  • Check that main.js, manifest.json, and styles.css are all present
  • Verify minAppVersion in manifest matches your Obsidian version
  • Check the developer console (Ctrl+Shift+I) for error messages

Tech Stack

  • TypeScript 5.x — Primary language
  • Obsidian Plugin API — Plugin framework
  • KaTeX — LaTeX/chemistry rendering
  • turndown.js — HTML → Markdown conversion (import)
  • esbuild — Build tooling
  • Jest — Unit testing (118 tests across 5 suites)

License

MIT — See LICENSE for details.

Changelog

See CHANGELOG.md for version history.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.