Skip to content

anydoc

Any document in. Markdown out.

Turn Word, PowerPoint, Excel, PDF, and 10 more office formats into clean, well-structured GitHub-Flavored Markdown. Open-source Rust library, fully local, millisecond-fast — files never leave your device.

anydoc

Convert Documents Online

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

WordPPTExcelPDFEPUBRTFCSVODF

anydoc

What is 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.

Read the full introduction →

anydoc

Supported Formats

14 formats covered — the widest support among comparable converters

Word

Word Processing

.doc · .docx · .docm — from a 2003-era .doc to yesterday's .docx, with headings, lists, tables, and footnotes intact.

PowerPoint

Presentations

.ppt · .pptx · .pptm · .pps · .ppsx · .ppsm · .pot — slides convert to Markdown with speaker notes preserved.

Excel / CSV / RTF

Spreadsheets & Text

.xls · .xlsx · .xlsm · .xlsb · .csv · .rtf — merged cells, headers, and multiple sheets become clean Markdown tables.

PDF / EPUB / OpenDocument

Publishing & Open Formats

.pdf · .epub · .odt · .ods · .odp — text-based PDFs convert locally, no OCR service required.

anydoc

Core Capabilities

What this framework actually brings to the table

🧩 One model, every format

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.

⚡ Millisecond conversion

Pure Rust, no ML models, no external services. Median conversion time is under 5ms — an order of magnitude faster than the next-fastest converter.

🕵️ Format detected from bytes, not extensions

Detection reads the file content itself (PDF headers, RTF open groups, OLE stream names, ZIP mimetype) — mislabeled files still convert correctly.

🛡️ Safe by design

Fixed safety limits on decompression, nesting depth, and node count guard against zip bombs. Ships with snapshot tests, mutation testing, and per-format fuzzing.

🔗 Five bindings, one API

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.

🤖 Agent-ready

Published as an Agent Skill — one command lets Claude Code, Codex, or Cursor read your office documents directly.

anydoc

How Conversion Works

From file to Markdown in four steps

1

Give it a document (path or bytes)

Pass a file path, or hand over in-memory bytes. The CLI can even read from stdin for pipeline-friendly workflows.

2

Detect the format from content

The real format is probed from the bytes themselves — extensions are not trusted. Unrecognized input returns a clear Unsupported error.

3

Parse into a unified document model

Word or PDF, everything lands in the same Document model. Embedded images keep their raw bytes and media types on the model.

4

Render to Markdown

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

Why anydoc

Compared against markitdown, pandoc, LibreOffice, and friends — the gap is an order of magnitude

📊 Broadest format support

14/14 formats — the only one of seven converters with full coverage. markitdown covers 6, pandoc 5, docling 4, and mammoth just 1.

🚀 Speed that leaves rivals behind

Official benchmark: 4.4ms median conversion, 81 overall score. The second-fastest, markitdown, sits at 134.8ms with a score of 33.

🔒 Fully local, zero dependencies

No LibreOffice install, no OCR service, no ML models. The WebAssembly build runs entirely in the browser — files don't even leave the device.

See the full benchmark →

anydoc

Quick Start

From your first command to all five bindings

anydoc

FAQ

Common questions about formats, privacy, performance, and licensing.

What is anydoc?

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.

Which formats are supported?

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.

Are my files uploaded anywhere?

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.

How fast is conversion?

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.

How does it compare to markitdown?

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.

Do scanned PDFs work?

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.

Is it open source? Can I use it commercially?

Fully open source under the MIT License — use, modify, and sell freely. The repository is at github.com/firecrawl/anydoc.

Which languages can I use it from?

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

Drop a document in,
take Markdown out.

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.