Production-quality Markdown to PDF rendering engine for Node.js.
md2pdf is a high-fidelity Markdown-to-PDF rendering engine. It leverages the Unified ecosystem (Remark/Rehype) for robust AST manipulation and utilizes Playwright to drive headless Chromium. This ensures that the generated PDF perfectly reflects modern web standards, complete with professional typography, precise margins, and correct pagination.
For detailed release notes and changelogs, please visit the GitHub Releases page.
- High-Fidelity Rendering: Utilizes Chromium via Playwright for native print CSS capabilities.
- Unified Pipeline: Built entirely on remark and rehype ASTs for robustness.
- Professional Typography: Modular CSS system optimized for readability and print with Inter and JetBrains Mono.
- Syntax Highlighting: Integrated shiki plugin for syntax highlighting across 20+ languages.
- GitHub Flavored Markdown: Natively supports GFM tables and strikethrough.
- Table of Contents: Auto-generate hyperlinked TOC with depth configuration.
- Footnotes: Full support for footnotes with bidirectional backlinks.
- Document Metadata: Automatically extracts YAML frontmatter to inject native PDF metadata properties.
- Headers, Footers & Page Breaks: Inject custom HTML headers/footers with dynamic page numbers and control pagination manually or automatically.
- Mermaid Diagrams: Native diagram generation and execution.
- Math Rendering: LaTeX equations support via KaTeX.
- Obsidian Compatibility: Support for wiki links, callouts, and embeds.
- Configuration and Theming: Advanced CLI options and custom CSS themes.
- Plugin System: Extensible architecture for custom rendering logic.
# Install globally
npm install -g @amitdevx/md2pdf
# Or use locally within a project
npm install @amitdevx/md2pdfGenerate a PDF from a single Markdown file:
md2pdf README.mdSpecify a custom output path and generate a Table of Contents:
md2pdf input.md --output custom.pdf --tocEmbed the rendering engine directly in your Node.js applications:
import { convert } from '@amitdevx/md2pdf';
const result = await convert({
input: 'README.md',
output: 'README.pdf',
paper: 'A4',
margin: '20mm',
toc: true
});
console.log(`Render time: ${result.renderTimeMs}ms`);git clone https://github.com/amitdevx/md2pdf.git
cd md2pdf
npm install
npx playwright install chromiumPlease refer to docs/contributing.md for our guidelines, branch naming conventions, and coding standards.
MIT License. See LICENSE for details.