Design review
Body copy sets in Fraunces at a comfortable measure. Emphasis reads as emphasis, and weight marks what matters. The heading above is the same typeface sized up, not a different font bolted on.
Paste any Markdown, including raw output from ChatGPT or Claude, and download a typeset, print-ready PDF. Free, instant, and private: your document never leaves the browser.
Convert ChatGPT to PDF →Convert Gemini to PDF →Convert Claude to PDF →
How it works
Any Markdown works: README files, notes, or an answer copied straight out of ChatGPT or Claude.
The right-hand sheet is your live proof: real typography, tables that behave, code that stays legible.
One click hands the sheet to your browser’s print engine. Pick “Save as PDF” and it’s on your desk.
Typeset quality
Every crop below is the real engine rendering real Markdown, not a screenshot. Here is how the sheet handles the parts most converters flatten: heading hierarchy, code, tables, and lists.
Body copy sets in Fraunces at a comfortable measure. Emphasis reads as emphasis, and weight marks what matters. The heading above is the same typeface sized up, not a different font bolted on.
export async function typeset(md: string) {
// highlighting is weight and shade, never hue
const html = await render(md)
return html.trim()
}
| Format | Domain | Status |
|---|---|---|
| topdf.md | ✓ | |
| Word | toword.md | soon |
| HTML | tohtml.md | soon |
Markdown in. Beautiful PDF out.
Privacy
Parsing, typesetting, and the PDF itself all happen with JavaScript running in your tab. There is no server in the loop: the text you paste is never uploaded, logged, or stored anywhere. Close the tab and it is gone.
Comparison
Markdown to PDF is not a new problem. Pandoc has handled it from the command line for years. VS Code has extensions that convert without leaving the editor. Upload sites will render a PDF too, if you do not mind sending your document to their server first. topdf.md is a fourth option: paste, proof, download, all inside the tab you already have open.
| Dimension | topdf.md | pandoc | VS Code extensions | Upload converters |
|---|---|---|---|---|
| Install required | None, runs in your browser | CLI, plus a LaTeX engine (e.g. xelatex) for PDF output | A VS Code extension (bundles its own Chromium) | None |
| Where your document goes | Never leaves your browser | Stays on your machine | Stays on your machine | Uploaded to their server |
| Typographic control | Print CSS, real typography by default | Full control via LaTeX templates | Depends on the extension's CSS | Varies by site |
| Best for | Instant, one-off documents, ChatGPT and Claude output | Batch conversion, CI pipelines, LaTeX-grade typesetting | Converting without leaving the editor | Quick jobs when you do not mind uploading |
Reach for pandoc if you need LaTeX-grade control, custom templates, or you are converting a batch of files in a script or CI job. topdf.md does not do batch conversion. Stay in a VS Code extension if you already live in the editor and just want a quick local export. topdf.md is built for the other case: no install, no upload, one document at a time, typeset the moment you paste it.
Paste your Markdown into the source pane and the typeset preview updates as you type. Press “Download PDF”, then choose “Save as PDF” in the print dialog. The whole conversion happens in your browser.
Yes. No signup and no page limits. Custom themes and a document API for AI agents are planned as paid extras, but the converter itself stays free.
No. Never. What you see in the proof pane is exactly what prints, with nothing added and no “made with” footer anywhere on the page.
No. Rendering and PDF generation run entirely in your browser; nothing is sent to a server, stored, or logged. Close the tab and the document is gone.
GitHub-flavored Markdown: headings, tables, task lists, strikethrough, blockquotes, footnote-style links, images by URL, and fenced code blocks with syntax highlighting.
The proof pane paginates automatically to the page size set in the print dialog, so there is no manual page-break syntax to learn yet. Free users get page numbers the same way as always: turn on “Headers and footers” in the browser's print dialog before saving. Pro adds real page numbers plus a custom header, footer, and logo in the Document panel, confirmed working in Chrome; Safari and Firefox don't support that yet, so those two fall back to the print dialog too.
Yes. It is a web page, not an app, so it runs in any modern browser on any device. Saving to PDF uses that browser's own print dialog, which looks a little different on Mac, Windows, and mobile but works the same way everywhere.