MarkPDF — Beautiful PDFs from Markdown

You're looking at a live preview. Edit the Markdown on the left, watch it render on the right — then export a pixel-perfect PDF in one click.


Why MarkPDF?

Most tools make you choose between power and simplicity. LaTeX is precise but brutal. Word is familiar but ugly. Google Docs exports look like they were designed in 2008.

MarkPDF is different. You write in plain Markdown. We handle the typography, spacing, page breaks, and print-ready layout — automatically.

No installation. No account. No ugly output.


Five Themes. One for Every Document.

Each theme is crafted around a specific use case — font, spacing, hierarchy, and color all tuned together.

Theme Font Style Best For
Slate Manrope Clean, minimal Technical docs, notes
Paper Lora Editorial, warm Essays, reports, books
Dusk JetBrains Mono Dark, elegant Code-heavy documents
Ivory Shippori Mincho Japanese minimalism Portfolios, proposals
Executive Playfair Display Corporate, sharp Business reports, decks

Switch themes using the selector above — the preview updates instantly.


Syntax Highlighting Out of the Box

MarkPDF renders code blocks with full syntax highlighting for 180+ languages. No configuration needed.

// A type-safe theme system — clean, readable, professional
interface Theme {
  name: string;
  font: string;
  accent: string;
}

function renderDocument(markdown: string, theme: Theme): string {
  const html = parseMarkdown(markdown);
  return applyTheme(html, theme);
}
# Works with any language — Python, Rust, Go, SQL, you name it
def export_pdf(content: str, theme: str = "slate") -> bytes:
    html = render_markdown(content)
    return chromium.print_to_pdf(html, theme=theme)
// Rust renders beautifully too
fn fibonacci(n: u64) -> u64 {
    match n {
        0 => 0,
        1 => 1,
        _ => fibonacci(n - 1) + fibonacci(n - 2),
    }
}
-- SQL queries, clean and readable
SELECT u.name, COUNT(o.id) AS total_orders, SUM(o.amount) AS revenue
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.created_at >= '2024-01-01'
GROUP BY u.name
HAVING SUM(o.amount) > 1000
ORDER BY revenue DESC;
# Shell commands render cleanly too
curl -X POST https://markpdf.app/api/export \
  -H "Content-Type: application/json" \
  -d '{"html": "...", "theme": "executive"}'

LaTeX Math — From Simple to Complex

MarkPDF supports full KaTeX rendering for publication-quality math. Inline and block, simple and complex.

Inline Math

The quadratic formula x=b±b24ac2ax = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} renders inline with your text. So does Euler's identity eiπ+1=0e^{i\pi} + 1 = 0, or a simple integral 01x2dx=13\int_0^1 x^2\,dx = \frac{1}{3}.

Block Equations

The Fourier Transform and its inverse:

f^(ξ)=f(x)e2πiξxdx\hat{f}(\xi) = \int_{-\infty}^{\infty} f(x)\, e^{-2\pi i \xi x}\,dx

Maxwell's Equations in differential form:

E=ρε0B=0×E=Bt×B=μ0J+μ0ε0Et\begin{aligned} \nabla \cdot \vec{E} &= \frac{\rho}{\varepsilon_0} \\ \nabla \cdot \vec{B} &= 0 \\ \nabla \times \vec{E} &= -\frac{\partial \vec{B}}{\partial t} \\ \nabla \times \vec{B} &= \mu_0 \vec{J} + \mu_0 \varepsilon_0 \frac{\partial \vec{E}}{\partial t} \end{aligned}

A matrix equation with the Schrödinger equation:

it(ψ1ψ2ψn)=(H11H12H1nH21H22H2nHn1Hn2Hnn)(ψ1ψ2ψn)i\hbar \frac{\partial}{\partial t} \begin{pmatrix} \psi_1 \\ \psi_2 \\ \vdots \\ \psi_n \end{pmatrix} = \begin{pmatrix} H_{11} & H_{12} & \cdots & H_{1n} \\ H_{21} & H_{22} & \cdots & H_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ H_{n1} & H_{n2} & \cdots & H_{nn} \end{pmatrix} \begin{pmatrix} \psi_1 \\ \psi_2 \\ \vdots \\ \psi_n \end{pmatrix}

Bayesian inference — the foundation of modern statistics:

P(θD)=P(Dθ)P(θ)P(Dθ)P(θ)dθP(\theta \mid D) = \frac{P(D \mid \theta)\, P(\theta)}{\int P(D \mid \theta')\, P(\theta')\, d\theta'}

A summation with limits — the Taylor series for exe^x:

ex=n=0xnn!=1+x+x22!+x33!+e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots

Navier-Stokes — the equations that govern fluid dynamics:

ρ(vt+vv)=p+μ2v+ρg\rho \left( \frac{\partial \vec{v}}{\partial t} + \vec{v} \cdot \nabla \vec{v} \right) = -\nabla p + \mu \nabla^2 \vec{v} + \rho \vec{g}

Diagrams with Mermaid

Architecture diagrams, flowcharts, and sequence diagrams — all from plain text.

flowchart LR
  Draft[Write Markdown]
  Theme[Pick Theme]
  Preview[Live Preview]
  Pdf[Export PDF]
  Draft --> Theme --> Preview --> Pdf
sequenceDiagram
  participant User
  participant Editor
  participant Renderer
  participant PDF Engine

  User->>Editor: Write Markdown
  Editor->>Renderer: Parse & render HTML
  Renderer-->>Editor: Live preview
  User->>PDF Engine: Click Export
  PDF Engine-->>User: Download PDF
graph TD
  A[Input: Markdown] --> B{Has Math?}
  B -- Yes --> C[KaTeX Rendering]
  B -- No --> D[Standard Parse]
  C --> E[Merge HTML]
  D --> E
  E --> F{Has Mermaid?}
  F -- Yes --> G[SVG Diagrams]
  F -- No --> H[Final HTML]
  G --> H
  H --> I[Themed PDF]

Advanced Tables

Tables support alignment and complex data:

Metric Q1 2024 Q2 2024 Q3 2024 Change
Revenue 12,45012,450 |18,320 $24,100 +93%
Users 1,204 3,871 8,502 +606%
Churn 4.2% 3.1% 2.4% -43%
NPS 42 58 71 +69%

Everything You'd Expect — Done Right

Ordered lists stay ordered across page breaks:

  1. Open the editor — no signup, no friction
  2. Write or paste your Markdown
  3. Pick a theme that fits the document
  4. Click Export PDF — done

Unordered lists for feature sets, comparisons, anything:

Nested lists work naturally:


Blockquotes for Emphasis

Good design is not about decoration — it's about removing everything that doesn't need to be there.

Note: Blockquotes support full Markdown formatting inside them — including bold, italic, code, and even math like i=1ni=n(n+1)2\sum_{i=1}^{n} i = \frac{n(n+1)}{2}.


Inline Formatting

Text can be bold for key terms, italic for titles and emphasis, strikethrough for changes, and monospace for code and variables.

Combine them freely: a critical warning stands out. A config.value in a sentence reads naturally.

Links work too: visit MarkPDF or reference a specific section.


Horizontal Rules

Use --- to create clean section dividers. They adapt to each theme's accent color and style.


Headings Hierarchy

Third Level — Subsections

Fourth Level — Details

Fifth Level — Fine Print

The full heading hierarchy renders with proper sizing, weight, and spacing in every theme.


Who Uses MarkPDF?

Developers who need to ship technical documentation that doesn't look like a GitHub README.

Consultants who write proposals in Markdown but deliver PDFs to clients.

Researchers who want clean, readable papers without fighting LaTeX — but with full math support.

Students who need to submit well-formatted assignments with equations and diagrams.

Anyone who values their time and wants beautiful output without the overhead.


Get Pro Access

The preview is free, unlimited, and instant. Three themes (Slate, Paper, Ivory) export to PDF for free — other themes require a Pro license.

Click Export PDF above to unlock — no account needed, just a license key delivered by email.


Made with MarkPDF · markpdf.app