Bureautique et PDF en Markdown, depuis un cœur Rust
anydoc est une bibliothèque Rust de Firecrawl, sous licence MIT, qui convertit des documents bureautiques et des PDF en Markdown GitHub, prêt pour un LLM ou un index RAG. Le même cœur est publié en crate, en module natif pour Node.js avec une CLI, en wheel Python et en paquet WebAssembly qui convertit dans le navigateur. Il n'appelle ni modèle de ML ni service externe, et tourne sans Python.
MarkItDown, le convertisseur de Microsoft, fait ce travail en Python 3.10 à 3.14, et Markdownify MCP l'installe dans un environnement virtuel Python pour le servir à un agent. anydoc lit moins de choses (ni image seule, ni audio, ni HTML), mais un service en Rust ou en Node.js l'intègre sans faire entrer Python dans sa chaîne.
Le comparatif des outils open source d'OCR et de conversion de documents place anydoc face aux moteurs OCR et aux modèles de vision, qui lisent ce qu'il laisse de côté : les pages scannées.
Les .doc binaires passent, les pages scannées sont signalées
- Les vieux formats Office aussi :
.doc,.pptet.xlsbinaires à côté de.docx,.pptx,.xlsx,.xlsbet des variantes à macros, plus OpenDocument, RTF, EPUB, CSV et PDF. - Le format lu dans les octets, pas dans l'extension : un fichier mal nommé passe quand même. Seul le CSV, sans marqueur, se désigne par son extension ou une option.
- Un modèle de document commun : chaque parseur remplit la même structure, rendue par un seul moteur Markdown. Tableaux à cellules fusionnées, numérotation des listes et notes de bas de page sortent pareil d'un format à l'autre, et les équations passent en LaTeX.
- Excel lu en interne : depuis la v0.2.0, un lecteur maison remplace la dépendance calamine ; dates, devises et arrondis sortent identiques en
.xlsx,.xlsbou.xls. - Des erreurs qui se trient :
NeedsOcrliste les pages scannées,EncryptedouMalformeddisent pourquoi un fichier n'est pas sorti, et la CLI rend le code 3 si une page demande de l'OCR. Un traitement par lot écarte le fichier et passe au suivant.
Scans lus par Firecrawl seulement, dernier commit le 28 août
Pas d'OCR en local, et l'option part chez l'éditeur. anydoc lit les PDF qui contiennent du texte, avec la bibliothèque pdf-inspector de Firecrawl ; une page scannée fait échouer la conversion. L'option --ocr hosted (CLI, Node et Python ; le crate Rust et le WebAssembly ne l'ont pas) envoie alors le document entier, pas seulement les pages en cause, à Firecrawl Parse. Parse compte un crédit par page, et son offre gratuite en donne 1 000 par mois (tarifs lus le 7 octobre 2026). Les images intégrées à un Word ou à un PowerPoint ne sont pas lues non plus : seul leur texte alternatif passe.
La CLI demande Node.js 20, et il n'y a pas d'image Docker officielle. La CLI est un script Node.js qui charge le module natif, un document par appel. Les binaires précompilés couvrent macOS, Linux (glibc et musl) et Windows x64, pas Windows ARM. Le wheel exige Python 3.10 ou plus et s'installe sous le nom firecrawl-anydoc, anydoc étant pris sur PyPI par un autre paquet. La demande d'image Docker (#11) est ouverte depuis le 5 août 2026, sans réponse des mainteneurs.
Un benchmark maison, impossible à refaire tel quel. Le README classe anydoc devant six autres convertisseurs, MarkItDown compris, sur 100 documents. Les notes viennent d'un LLM juge, et le corpus, non redistribuable, n'est pas dans le dépôt.
Deux mois d'âge, aucun commit depuis le 28 août. Le dépôt date du 3 août 2026, et ses quatorze versions, de la v0.1.1 à la v0.2.4, sont toutes sorties entre le 4 et le 27 août. Un développeur signe 118 des 130 commits. Au 7 octobre, 64 pull requests et 40 tickets attendent, dont un docx signalé comme tronqué sans message d'erreur (#187) et des tableaux PDF multicolonnes écrasés en une seule colonne (#173).
