anydoc
A local converter powered by @firecrawl/anydoc-wasm. Drop a document in, get Markdown out — everything runs in your browser.
Drop a document here, or click to browse
Conversion runs locally in your browser — files are never uploaded
anydoc
An open-source conversion engine from Firecrawl — and the engine behind Firecrawl Parse
anydoc is an open-source Rust library with one job: turn messy office documents into clean, LLM-ready Markdown. Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, PDF — 14 formats, one consistent output standard.
No LibreOffice, no OCR services, no ML models. Pure Rust, with a median conversion time under 5 milliseconds per document. In the official benchmark of 100 real documents across 14 formats, anydoc was the only converter to handle every format — and it outscored markitdown, pandoc, and docling by a wide margin.
Every format parses into the same document model and renders through the same Markdown serializer, so headings, nested lists, merged table cells, and footnotes come out identically — whether from a .doc written in 2003 or yesterday's .pptx.
Deliberately tuned for LLM consumption: headers, footers, and page numbers are stripped by design, while footnotes, speaker notes, merged cells, and nested lists are preserved. Images and embedded objects render as alt text, with the raw bytes kept on the document model.
anydoc
14 formats covered — the widest support among comparable converters
.doc · .docx · .docm — from a 2003-era .doc to yesterday's .docx, with headings, lists, tables, and footnotes intact.
.ppt · .pptx · .pptm · .pps · .ppsx · .ppsm · .pot — slides convert to Markdown with speaker notes preserved.
.xls · .xlsx · .xlsm · .xlsb · .csv · .rtf — merged cells, headers, and multiple sheets become clean Markdown tables.
.pdf · .epub · .odt · .ods · .odp — text-based PDFs convert locally, no OCR service required.
anydoc
What this framework actually brings to the table
All formats parse into a single document model and render through one Markdown serializer. Escaping, tables, heading anchors, and footnote behavior are consistent across formats — fix a bug once, all formats benefit.
Pure Rust, no ML models, no external services. Median conversion time is under 5ms — an order of magnitude faster than the next-fastest converter.
Detection reads the file content itself (PDF headers, RTF open groups, OLE stream names, ZIP mimetype) — mislabeled files still convert correctly.
Fixed safety limits on decompression, nesting depth, and node count guard against zip bombs. Ships with snapshot tests, mutation testing, and per-format fuzzing.
Node.js, Python, Rust, browser (WebAssembly), and CLI — the same API everywhere: convert from a path or from bytes, or stop at the document model to keep embedded assets.
Published as an Agent Skill — one command lets Claude Code, Codex, or Cursor read your office documents directly.
anydoc
From file to Markdown in four steps
Pass a file path, or hand over in-memory bytes. The CLI can even read from stdin for pipeline-friendly workflows.
The real format is probed from the bytes themselves — extensions are not trusted. Unrecognized input returns a clear Unsupported error.
Word or PDF, everything lands in the same Document model. Embedded images keep their raw bytes and media types on the model.
One serializer produces GitHub-Flavored Markdown: heading anchors, bold/italic/strike, nested and task lists, tables, block quotes, and footnotes in a single pass.
💡 Need the embedded assets? Stop at toDocument instead of converting straight to a string.
anydoc
Compared against markitdown, pandoc, LibreOffice, and friends — the gap is an order of magnitude
14/14 formats — the only one of seven converters with full coverage. markitdown covers 6, pandoc 5, docling 4, and mammoth just 1.
Official benchmark: 4.4ms median conversion, 81 overall score. The second-fastest, markitdown, sits at 134.8ms with a score of 33.
No LibreOffice install, no OCR service, no ML models. The WebAssembly build runs entirely in the browser — files don't even leave the device.
anydoc
From your first command to all five bindings
Install the CLI, convert your first document, and learn the common flags.
Read the guide →All five bindings — Node, Python, Rust, WASM, CLI — on one page.
Read the guide →How to debug all ConvertError codes, and what to do about scanned PDFs.
Read the guide →anydoc
Common questions about formats, privacy, performance, and licensing.
anydoc is an open-source Rust library by Firecrawl that converts 14 office document formats — Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, and PDF — into clean GitHub-Flavored Markdown. It's the conversion engine behind Firecrawl Parse.
14 in total: .doc/.docx/.docm (Word), .ppt/.pptx/.pptm/.pps/.ppsx/.ppsm/.pot (PowerPoint), .xls/.xlsx/.xlsm/.xlsb (Excel), .odt/.ods/.odp (OpenDocument), .rtf, .epub, .csv, and .pdf. Formats are detected from file content, so mislabeled files still convert.
No. anydoc converts fully locally: the Rust/Python/Node builds run on your machine, and the browser build uses WebAssembly right inside the page — files never leave your device. The converter on this site works the same way.
In the official benchmark, median conversion time is 4.4ms per document. Pure Rust, no ML models, no service calls — conversion is just a local parse.
In Firecrawl's official benchmark of 100 real documents across 14 formats: anydoc covers all 14 (markitdown: 6), at 4.4ms median vs 134.8ms, with an overall score of 81 vs 33. The gap is an order of magnitude. See the benchmark page.
Text-based PDFs convert locally via the built-in pdf-inspector. Pure image/scanned PDFs need OCR — anydoc returns Unsupported. Firecrawl Parse layers OCR on top of the same conversion pipeline.
Fully open source under the MIT License — use, modify, and sell freely. The repository is at github.com/firecrawl/anydoc.
Rust (anydoc), Node.js (@firecrawl/anydoc), Python (firecrawl-anydoc), browser (@firecrawl/anydoc-wasm), CLI (npx @firecrawl/anydoc), plus an Agent Skill for Claude Code / Codex / Cursor. See the install page.
Try It & Install
Convert a file in your browser first, or install anydoc into your project or your AI agent.
14 formats, millisecond conversion, fully local —
from today on, any document is something your AI can read.