markdownpdf.app: free PDF ↔ Markdown converter with OCR, running entirely in your browser. Your files are never uploaded. There is no signup and no watermark.
- PDF to Markdown: rebuilds headings, lists, tables, bold/italic and multi-column layouts from the PDF text layer. Scanned pages fall back to OCR automatically.
- Markdown to PDF: produces a real vector PDF with selectable text, tables, code blocks and links.
- Other converters: DOCX to Markdown, Markdown to DOCX, HTML ↔ Markdown, PDF tables to CSV, PDF to Obsidian, batch conversion.
- OCR: OCR PDF, image to text, PDF to text.
- For AI workflows: token counter, Markdown chunker, split PDF for AI.
- Markdown utilities: table generator, editor, text diff.
- PDF utilities: merge, split, organize, metadata, redact, unlock, JPG to PDF, PNG to PDF, PDF to JPG, PDF to PNG.
- Other formats: EPUB to PDF, PDF to EPUB, HTML to PDF.
- Continue with: every result can be sent straight into the next tool (PDF → Markdown → chunker, images → PDF → OCR…). The file is handed over through the browser's IndexedDB, never a server.
All conversion happens in the browser tab, using pdf.js for the text layer, tesseract.js for OCR, and marked plus jsPDF for Markdown to PDF. The OCR engine and fonts are self-hosted, so the PDFs never touch a server. That makes the tools usable for confidential documents, and it means they keep working once the page has loaded.
- Next.js (App Router, Turbopack) and Tailwind CSS 4. Every page is statically prerendered.
- The conversion engines live in
src/lib/and are lazy-loaded on the client. - Blog posts are Markdown files in
content/blog/, withtitle,description,dateand an optionalseoTitlein the frontmatter.src/lib/blog.tsparses them at build time. - JSON-LD (
WebApplication,HowTo,FAQPage,BlogPosting), plus a sitemap and robots.txt generated fromsrc/app/.
npm install
npm run dev # dev server (copies OCR/pdf.js assets into public/ first)
npm run build # production build
npm test # unit tests (Vitest)
npm run test:e2e # end-to-end tests (Playwright)Canonical URLs come from NEXT_PUBLIC_SITE_URL, which defaults to https://markdownpdf.app.
Found a PDF that converts badly? Open an issue and attach the file if you can share it, or use the contact page.