What this is
A PDF parser compiled to WebAssembly, running in this page. Your file is read into memory, converted, and forgotten when you close the tab. There is no upload and no queue. A few conversions are free without an account; a free account at auth.dudko.dev has many more, and a paid plan lifts the limit — the file still never leaves this tab, only the count does.
It reads headings from font sizes, keeps lists and tables, follows multi-column layouts in the right order, and decodes CJK fonts. Download .zip with images adds the pictures as PNG and JPEG files and the charts, diagrams and logos drawn with vectors as SVG, shows them under the Markdown that links to them, and saves the pair. It does not do OCR: a scanned document is reported as such so you know to run it through an OCR tool first.
Beyond this page
The same converter, three other ways — the module this page runs, reached differently. Each counts against the same allowance as the page does.
In your own code
npm i @dudko.dev/pdf-to-md-core— the module itself, in a browser or in Nodenpx @dudko.dev/pdf-to-md-cli file.pdf— on the command line, nothing to install
An HTTP API, for pipelines
POST /api/v1/convert takes the document and answers Markdown.
/api documents every option and has a form to try it in. It needs an API key from your
account, and answers on this hostname as well as at
pdf2md-api.dudko.dev.
MCP, so an assistant can do it
Claude and other MCP clients get the API explained and a ready-to-run request — options checked, a short-lived credential for your account included — to hand to whatever has the file. No document passes through the assistant, in either direction. Add it once:
- Copy the address —
- In Claude, open Settings → Connectors → Add custom connector and paste it in.
- Sign in when it asks. The connector gets a token of its own, good for this server and no other; the requests it builds spend the same allowance as this page. You can see it and take it away again at your account.