docling.rs について
docling.rsは、エージェント、開発者、RAGパイプライン向けのRust製ドキュメント変換プロジェクトです。PDF、Officeファイル、HTML、スキャン画像、音声などを処理し、CLI、ライブラリ、サーバーから構造を保ったMarkdownなどを出力します。
主な機能
- 01Markdown、JSON、HTMLなどへの変換
- 02PDFのレイアウト、表、OCRの処理
- 03Officeファイル、HTML、スキャン、音声の処理
- 04CLI、ライブラリ、ブラウザー、HTTPサーバーでの実行
- 05AIエージェントへの変換ツール提供
活用シーン
- 01スキャンPDFを構造化テキストに変換
- 02RAGパイプライン向けに文書やチャンクを準備
- 03AIエージェントに文書変換ツールを提供
MCP 対応
`docling-rs mcp`コマンドでAIエージェント向けのMCPサーバーを実行できます。Markdown、JSON、チャンクなどを出力する`convert_to_markdown`と`convert`ツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx docling-rs-mcpDOCLING_RS_CACHE_DIRWhere `docling-rs-mcp --download-models` puts the PDF/image models and the server finds them (default ~/.cache/docling.rs).DOCLING_RS_OCR_LANGOCR language for scans: en (default), ch, or a BCP-47 tag.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
3掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| to | string | いいえ | 出力形式:md(デフォルト)、json(docling の DoclingDocument)、 html、text、latex、chunks(JSON 形式の RAG チャンクレコード)、vtt、pandoc (Pandoc の JSON AST)。 |
| uri | string | はい | ドキュメント:http: または https: URL、file: URI、data: URI、または パス(相対パスはサーバーの根目录を基準に解決されます)。 |
| images | string | いいえ | md/html/pandoc 出力内の画像:プレースホルダー(デフォルト)または埋め込み(data: URI)。 |
| options | object | いいえ | 変換オプション。docling.rs の共通オプションセット(docs/OPTIONS.md)。例: {"pages": "1-5"}、{"text_layer_only": true}(デジタル PDF、最速)、 {"ocr_lang": "ch"}、{"force_full_page_ocr": true}、 {"do_picture_ocr": true}(Office ファイル内の画像を OCR 処理)、 {"password": "…"}、{"compact_tables": false}。フォームから送信する場合のように、値をテキスト("true"、"1.5") として指定することもできます。 |
詳細
docling.rs
docling.rs は、PDF、Office 文書、HTML、スキャン文書、音声などのドキュメントを、Markdown、docling JSON、その他 LLM や RAG パイプラインが読み取れる形式に変換します。IBM の docling を Rust に移植したもので、単一の静的バイナリからバイト単位で同じ出力を生成します。Python も PyTorch も不要です。
PDF からテキストを取り出すのは簡単です。しかし、見出しの順序や表の形式、スキャンページの読み取りなど、その構造を保つには、レイアウト解析、表認識、OCR が必要です。docling はそのためのモデルと、それに対応する Python スタックを備えています。docling.rs は同じモデルを単一のバイナリで実行します。PDF は Python 版 docling より 4.3 倍高速で、RAM 使用量は半分未満。Office と HTML は 20~60 倍高速で、表のセル再現率は MarkItDown の 0.31 に対して 0.94 を達成しています (数値、 手法)。
MarkItDown からの移行をお考えですか?
pip install docling-rs を実行して、インポートを 1 つ置き換えるだけです。
from docling_rs.markitdown import MarkItDown を使えば、変換可能なすべての形式を含め、API はそのままに、実際のレイアウト解析、表、OCR を利用できます。ガイド、
実測値の比較。
Marker からの移行をお考えですか?
pip install docling-rs を実行して、インポートを置き換えるだけです。
from docling_rs.marker.converters.pdf import PdfConverter を使えば、create_model_dict、text_from_rendered、JSON ブロックツリー、チャンク、marker_single の CLI と出力レイアウトなど、API はそのままです。docling のレイアウト解析、TableFormer、OCR を利用でき、PyTorch も推論サーバーも不要です。
ガイド、実測値の比較。
MinerU から移行しますか?
pip install docling-rs を実行してインポートを差し替えるだけで、
from docling_rs.mineru.parser import parse — MinerU 4 の SDK をそのまま使えます。
ParseResult、markdown()、Middle JSON、Content Lists、Structured
Content、save() のレイアウト、mineru-kit parse に加え、その背後では
docling のレイアウト解析、TableFormer、OCR が動作します。DocVortex や llama.cpp は不要です。
ガイド、実測比較。
インストール
# CLI + models (Linux x64/arm64/s390x + macOS arm64 prebuilt; builds from source elsewhere)
curl -fsSL https://raw.githubusercontent.com/docling-project/docling.rs/master/scripts/install/install.sh | bash
docling-rs example.pdf # Markdown on stdout
# or from crates.io; --cli puts the models where the installed binary looks
cargo install docling-cli
curl -fsSL https://raw.githubusercontent.com/docling-project/docling.rs/master/scripts/install/download_dependencies.sh | sh -s -- --cli
pip install docling-rs # Python — drop-in for docling's, MarkItDown's, Marker's and MinerU's APIs
npm install docling.rs # Node.js / Bun
cargo add docling # Rust library
# containers, models baked in (-cuda variants for NVIDIA)
docker run --rm -v "$PWD:/data" ghcr.io/docling-project/docling-rs paper.pdf
docker run -p 127.0.0.1:5001:5001 ghcr.io/docling-project/docling-rs-serve
Office、HTML、Markdown、メールにはモデルは不要です。PDF、画像、音声には
ONNX モデル(レイアウト、OCR、TableFormer、Whisper。1 GB 未満)が必要です。
install.sh、--cli、コンテナーにはモデルが含まれています。pip の場合は、
python -c "import docling_rs; docling_rs.download_models()" を一度実行してください。npm
またはチェックアウトの場合は、変換を行う場所で download_dependencies.sh を実行します
(詳細)。Windows の場合は
docs/WINDOWS.md を参照してください。
▶ ブラウザーで試す — OCR も含め、コンバーターが wasm として動作します。デバイスの外にデータが送信されることはありません。
使い方
docling-rs report.pdf > report.md # Markdown (streamed page by page)
docling-rs report.pdf --to json # docling JSON; also html, text, latex, dclx, chunks, images
docling-rs --input ./docs --output ./out # a directory tree; --jobs N in parallel
docling-rs https://example.com/paper.pdf # URLs, data: URIs and stdin (`-`) too
docling-rs https://www.youtube.com/watch?v=ID # a YouTube video: title, description, caption transcript (--to vtt keeps the timing)
docling-rs --help # every flag: OCR, page ranges, images, enrichment, redaction …
from docling_rs import DocumentConverter # was: from docling.document_converter import …
doc = DocumentConverter().convert("report.pdf").document
print(doc.export_to_markdown())
import { convertFileAsync } from 'docling.rs'
const { content } = await convertFileAsync('report.pdf', { to: 'markdown' })
use docling::{DocumentConverter, SourceDocument};
let result = DocumentConverter::new().convert(SourceDocument::from_file("report.pdf")?)?;
println!("{}", result.document.export_to_markdown());
curl -F [email protected] 'localhost:5001/v1/convert?to=md' # the server; OpenAPI at /openapi.yaml
どの環境でも同じオプション、同じ出力を利用できます。すべてのオプションについては
docs/OPTIONS.md を参照してください。
主な特長
- Python版doclingからの移行:
from docling_rs import DocumentConverter;result.documentは本物のDoclingDocumentです (移行ガイド)。 - doclingが対応するすべての形式に加え、いくつかの追加形式にも対応 — ステータスの表に記載されている各形式は、稼働中のdoclingで検証済みです (適合性)。
- doclingが提供するすべての出力形式に対応: Markdown(docling形式、またはより厳格な方言)、 docling JSON、HTML、プレーンテキスト、DocLang、LaTeX、Pandoc AST(→ pandoc経由でDOCX、EPUB、 Typstなどに変換)、WebVTT字幕、RAGチャンク、ページ画像 (出力形式)。
- あらゆる言語から利用可能: Rust、Python、Node.js / Bun、ブラウザー(wasm、 完全なクライアントサイド処理)、C、C++、C#、Go、Java、Swiftは単一のCヘッダー経由で利用できます。 任意のHTTPクライアントやシェルからも利用できます (統合)。
- docling-serveのドロップインサーバー: Open WebUIはこれをDoclingのコンテンツ抽出エンジンとして使用します。Docling Server URL を
http://<host>:5001に設定するだけで、n8n、Dify、LangChainのクライアントも変更なしで動作します (docling-rs serve、 Open WebUIの設定)。 - AI エージェント(MCP):
docling-rs mcpを使うと、Claude Desktop、Claude Code、 Cursor、VS CodeからMarkItDownのconvert_to_markdownツールに加え、JSONやチャンクなどに対応するconvertを利用できます —uvx docling-rs-mcp、またはclaude mcp add docling -- docling-rs mcpを実行してください(MCP サーバー)。 - LangChain:
pip install "docling-rs[langchain]"— Rustエンジン上でlangchain-doclingのDoclingLoaderを利用できます。インポートを1か所変更するだけです (詳細)。 - AutoGen:
pip install "docling-rs[autogen]"—DoclingIndexerはページ情報を保持する チャンクを使って任意のAutoGenメモリを構築し、DoclingConvertToolはエージェントによるドキュメントの読み取りを可能にします (詳細)。 - 独自形式への対応: docling.rsが読み込めない形式、または独自の方法で読み込みたい形式のバックエンドを、
Rust、Python(
@docling_rs.register_backend(extensions=["rtf2"])、MarkItDownのregister_converterやプラグイン)またはNode.jsから、組み込み形式より優先して登録できます (プラグイン可能なバックエンド)。 - RAG:
docling-rag— REST APIとWeb UIを使って、チャンク分割、埋め込み、検索ができます (RAGサブシステム)。 - さまざまな環境で実行可能: Linux x64 / arm64 / s390x、macOS(Apple Silicon)、 Windows向けのビルド済み版(CLI、wheel、npm)、ソースからのIntel Mac向けビルド、amd64およびarm64向けコンテナーに対応しています。NVIDIA CUDAとTensorRT、DirectML(ビルド済みWindows CLI)、CoreML、ブラウザーのWebGPUをオプションの高速化機能として利用できます(デフォルトでは無効) (GPU、 IBM Z)。
Claude Codeと_TENET_(ミニマルなAI駆動型開発フレームワーク)を用いて開発されました。
ステータス
docling のパイプラインにあるすべての形式に加え、docling が対応していない形式もいくつか変換できます。拡張子のないファイルや不明な拡張子のファイル、stdin、アップロード、data: URL は、内容に基づいて形式を判定します(InputFormat::detect、docling_rs.detect_format、detectFormat:パッケージ、OLE ファイル、PDF、画像、音声、動画、iWork、XML、JSON、ノートブック、メッセージなど)。拡張子に基づく処理に失敗したファイルも、内容を確認して実際の形式として変換し、警告を表示します。
| カテゴリー | 形式 |
|---|---|
| テキストとマークアップ | Markdown、AsciiDoc、HTML、MHTML、LaTeX(複数ファイルの arXiv プロジェクト、数式、表);プレーンテキストとソースコード(.py、.yaml、.log など、あらゆるテキストファイル。コードブロックまたは段落として変換)、汎用 JSON/JSON Lines と XML(コードブロックとして保持);RSS/Atom/RDF フィード(.rss、.atom、.rdf、または拡張子のない .xml:フィードのタイトル、各項目の見出し、日付、本文);Jupyter ノートブック(.ipynb:Markdown セル、カーネルの言語によるコードセル、リクエストに応じた出力) |
| ワープロ | DOCX、Word 97–2004 .doc(および Word 6/95、1.x/2.0)、ODT、OpenOffice/StarWriter、AbiWord、WordPerfect、MS Works、EPUB、RTF |
| プレゼンテーション | PPTX、PowerPoint 97–2003、ODP、OpenOffice/StarImpress |
| スプレッドシート | XLSX、XLSB、Excel 97–2004、ODS、CSV/TSV、dBase、DIF、SYLK、Lotus 1-2-3、Quattro Pro、MS Works |
| 図表・Apple iWork | Visio、SVG・Pages、Numbers、Keynote |
| PDF と画像 | PDF(レイアウト、TableFormer、OCR)、PNG、JPEG、TIFF、BMP、WebP、GIF、HEIC(オプトイン)、METS/GBS スキャン、DjVu |
| XML・docling ネイティブ | JATS、USPTO、XBRL、DocLang・docling JSON、DocTags、DCLX |
| メール・字幕・メインフレーム | .eml、Outlook .msg・WebVTT・COBOL コピーブック経由の EBCDIC レコード |
| 音声・動画 | WAV、MP3、M4A、AAC、OGG、FLAC;MP4、AVI、MOV、MKV、WebM、MPEG — ローカルの Whisper または Parakeet による処理に加え、動画からシーンフレームを抽出;YouTube の watch URL — 動画のタイトル、説明、キャプションの文字起こしをタイムスタンプ付きの項目として変換(言語は --asr-lang で指定) |
各バックエンドの処理内容を含むすべての拡張子については、
docs/MIGRATION.md を参照してください。
ffmpeg のインストール(オプション — 動画のフレームサンプリングにのみ使用)
PATH に ffmpeg ≥ 4.x があれば動作します。docling.rs はバイナリをシェルから呼び出して出力を解析するため、開発用ヘッダーやライブラリは必要ありません。
- Debian/Ubuntu:
sudo apt-get install ffmpeg - Fedora:
sudo dnf install ffmpeg-free(または RPM Fusion のffmpeg) - Alpine:
apk add ffmpeg - macOS:
brew install ffmpeg - Windows:
winget install ffmpeg(またはchoco install ffmpeg、またはscoop install ffmpeg)。ダウンロードした zip からインストールする方法 (gyan.dev / BtbN)も利用できます。 展開したbin\フォルダーをPATHに追加するか、PATHの設定を省略してDOCLING_FFMPEGに実行ファイルのパスを指定します。set DOCLING_FFMPEG=C:\tools\ffmpeg\bin\ffmpeg.exe
ffmpeg -version で確認できます。DOCLING_FFMPEG は、どの OS でも使用するバイナリを上書きします。docling-rs-serve の Docker イメージには、ffmpeg がプリインストールされています。
最小限のデコード専用ビルド(--disable-everything --enable-…)も利用できます(#853)。docling.rs に必要なのは、file プロトコル、コンテナー用のデマルチプレクサー(mp4/mov/m4v 用の mov、mkv/webm 用の matroska、avi、mpeg)、各トラックの動画デコーダー(h264、hevc、vp8、vp9、av1、mpeg4、mpeg2video など)とそのパーサー、select、metadata、fps、scale、showinfo フィルター、png と wrapped_avframe エンコーダー、image2 と null マルチプレクサーです。音声コンポーネントは使用しません。文字起こしは Rust でデコードされ、シーンスキャンでは動画ストリームのみが処理されます。コンポーネントが不足すると、ffmpeg はシーンスキャンに失敗し(Encoder not found、Invalid argument)、動画は文字起こしのみとして変換されます。メッセージは DOCLING_RS_DEBUG=1 で確認できます。
MarkItDown は、同じ種類のドキュメントを LLM 向けに Markdown に変換します。横並びで測定した結果は次のとおりです。MarkItDown 0.1.8
(markitdown[all])と docling.rs 2.33.0(リリースビルド)を、GPU なしの 4 vCPU で、このリポジトリのテストコーパスと MarkItDown 独自の OCR テストセットに対して測定しました
(scripts/conformance/markitdown_compare.py)。
| コーパス(ファイル数) | MarkItDown、ウォーム | docling.rs、ウォーム | コールド CLI 呼び出し、MarkItDown / docling.rs | 単語 F1 | 表セル再現率 | 見出し再現率 |
|---|---|---|---|---|---|---|
| DOCX (38) | 4.22 s | 0.44 s | 1102 / 14 ms | 0.93 / 1.00 | 0.81 / 1.00 | 0.78 / 1.00 |
| PPTX (8) | 0.30 s | 0.02 s | 974 / 6 ms | 0.81 / 0.97 | 0.62 / 1.00 | 0.86 / 1.00 |
| XLSX (14) | 0.87 s | 0.15 s | 849 / 7 ms | 0.60 / 0.95 | 0.78 / 0.98 | — ¹ |
| HTML (32) | 0.34 s | 0.05 s | 900 / 6 ms | 0.98 / 1.00 | 0.89 / 1.00 | 0.96 / 1.00 |
| CSV (9) | 0.04 s | 0.01 s | 900 / 4 ms | 1.00 / 1.00 | 0.78 / 1.00 | — |
| EPUB (1) | 0.06 s | 0.01 s | 897 / 10 ms | 0.99 / 1.00 | — | 1.00 / 1.00 |
| PDF (18)、完全なレイアウト + 表 + OCR | 7.6 s | 38.4 s | 984 / 830 ms | 0.63 / 0.997 | 0.31 / 0.94 | 0.00 / 0.91 |
PDF (18)、テキストレイヤーのみ(--text-layer-only) | 7.6 s | 0.5 s | — | 0.63 / 0.97 | 0.31 / 0.00 | 0.00 / 0.00 |
精度は Python docling の正解データに対して評価されるため、構造上 docling.rs に有利です。処理時間は正解データに左右されません。画像に描画されたテキスト(MarkItDown 独自の OCR テストセット)は、LLM を使わない MarkItDown の 0.00~0.33 に対し、docling.rs のローカル OCR では 1.00 の精度で読み取れます。手法、注意事項、および OCR の完全な比較については、docs/MARKITDOWN.md をご覧ください。
Marker との適合性
Marker(datalab の marker-pdf)は、レイアウトモデルと OCR を使用して、PDF および PDF に変換した Office ファイルを LLM 向けの Markdown に変換します。横並びで測定した結果は次のとおりです。Marker 2.0.0(marker-pdf[full]、CPU でのデフォルトの fast モード、OCR に llama.cpp を使用)と docling.rs 2.46.2(リリースビルド)を、このリポジトリのテストコーパス(scripts/conformance/marker_compare.py)で、vCPU 4 基、GPU なしで比較しました。
| コーパス(ファイル数) | Marker、ウォーム | docling.rs、ウォーム | CLI のコールド呼び出し、Marker / docling.rs | 最大 RSS、Marker(クライアント + サーバー) / docling.rs | 単語 F1 | 表セル再現率 | 見出し再現率 |
|---|---|---|---|---|---|---|---|
| PDF(18)、完全なレイアウト + 表 + OCR | 1312 s | 41 s | 22.0 s / 1.0 s | 10.5 GB / 3.1 GB | 0.93 / 0.997 | 0.41 / 0.94 | 0.66 / 0.91 |
PDF(18)、テキストレイヤーのみ(--text-layer-only) | 1312 s | 0.44 s | — | — / 79 MB | 0.93 / 0.97 | 0.41 / 0.00 | 0.66 / 0.00 |
| DOCX(38) | 654 s(1 件失敗) | 0.56 s | 23.4 s / 15 ms | 8.6 GB / 41 MB | 0.89 / 1.00 | 0.57 / 1.00 | 0.73 / 1.00 |
| PPTX(8) | 3.4 s(3 件失敗) | 0.02 s | 21.8 s / 9 ms | 2.6 GB / 20 MB | 0.49 / 0.97 | 0.41 / 1.00 | 0.43 / 1.00 |
| XLSX(14) | 164 s(2 件失敗) | 0.24 s | 22.8 s / 10 ms | 12.9 GB / 53 MB | 0.64 / 0.95 | 0.57 / 0.98 | — ¹ |
| HTML(32) | 1514 s | 0.06 s | 29 min ² / 8 ms | 8.8 GB / 21 MB | 0.94 / 1.00 | 0.50 / 1.00 | 0.84 / 1.00 |
| EPUB(1) | 10.5 s | 0.02 s | 60.7 s / 13 ms | 6.8 GB / 19 MB | 0.98 / 1.00 | — | 1.00 / 1.00 |
失敗したファイルのスコアは 0 です。¹ 見出しが含まれている正解データは XLSX 1 件のみです。 ² HTML ファイルの中央値は Marker で OCR が必要です。コールド呼び出しでは、最初に llama.cpp サーバーを起動し、1.2 GB の OCR モデルを読み込みます。
精度は Python 版 docling の正解データを基準に採点しているため、構造上 docling.rs に有利です。実行時間とメモリは正解データに左右されません。Marker は Office ファイル、HTML、EPUB を PDF にレンダリングし、そのレンダリング結果にビジョンモデルを実行して読み取ります。CPU では、テキストチェックでフラグが立ったページごとに、pip install marker-pdf ではインストールされない llama.cpp サーバー内の 1.2 GB の視覚言語 OCR モデルが使われます(このモデルがないと、PDF 4 件、DOCX 9 件、HTML 10 件、EPUB 1 件が完全に失敗します)。最大 RSS には Marker のクライアントと推論サーバーが含まれます。Marker の balanced モード(公開されているベンチマークで使用)は GPU が必要です。手法、注意事項、API 対応表については、docs/MARKER.md をご覧ください。
MinerU との適合性
MinerU(OpenDataLab)は、PDF、画像、Office ファイルを、LLM 向けに flash(テキストレイヤー、モデルなし)、basic(ONNX によるレイアウト/表/OCR モデル)、standard、advanced(llama.cpp 経由の視覚言語モデル)の4段階で Markdown と JSON に変換します。横並びでの測定結果 — MinerU 4.0.12 と docling.rs 2.46.2(リリースビルド)、4 vCPU、GPU なし — は、このリポジトリのテストコーパス
(scripts/conformance/mineru_compare.py)を使用しています。
| コーパス(ファイル数) | MinerU flash、ウォーム | MinerU basic、ウォーム | docling.rs、ウォーム | コールド CLI 呼び出し、MinerU flash / basic / docling.rs | ピーク RSS、MinerU flash / basic / docling.rs | 単語 F1(flash / basic / docling.rs) | 表セル再現率 | 見出し再現率 |
|---|---|---|---|---|---|---|---|---|
| PDF(18)、完全なレイアウト+表+OCR | 22.3 s | 123 s(+モデル読み込み 67 s) | 44.0 s | 3.6 s / 6.5 s / 1.2 s | 1.4 GB / 4.6 GB / 3.1 GB | 0.87 / 0.74 / 0.997 | 0.28 / 0.44 / 0.94 | 0.57 / 0.58 / 0.91 |
PDF(18)、テキストレイヤーのみ(--text-layer-only) | 22.3 s | — | 0.69 s | — / — / — | — / — / 80 MB | 0.87 / — / 0.97 | 0.28 / — / 0.00 | 0.57 / — / 0.00 |
| DOCX(38) | 6.36 s | flash のみ | 0.59 s | 2355 ms / — / 15 ms | 179 MB / — / 41 MB | 0.97 / — / 1.00 | 0.82 / — / 1.00 | 0.96 / — / 1.00 |
| PPTX(8) | 0.21 s(1件失敗) | flash のみ | 0.05 s | 2199 ms / — / 9 ms | 122 MB / — / 20 MB | 0.79 / — / 0.97 | 0.91 / — / 1.00 | 1.00 / — / 1.00 |
| XLSX(14) | 0.68 s | flash のみ | 0.19 s | 978 ms / — / 14 ms | 140 MB / — / 55 MB | 0.83 / — / 0.95 | 0.77 / — / 0.98 | — ¹ |
| HTML(32) | 0.89 s | flash のみ | 0.10 s | 2015 ms / — / 10 ms | 157 MB / — / 21 MB | 0.94 / — / 1.00 | 0.81 / — / 1.00 | 0.96 / — / 1.00 |
| EPUB(1) | 0.09 s | flash のみ | 0.02 s | 1909 ms / — / 16 ms | 99 MB / — / 19 MB | 1.00 / 1.00 | — | 1.00 / 1.00 |
失敗したファイルのスコアは0です。¹ 見出しを含む XLSX の正解データは1件のみです。
精度は Python docling の正解データを基準に採点しているため、構造上 docling.rs に有利です。所要時間とメモリ使用量は、この正解データに左右されません。MinerU は Office ファイル、HTML、EPUB を flash のみで解析します。CPU では basic がモデルを使用する段階です。MinerU の standard 段階(llama.cpp 経由の 1.2 B 視覚言語モデル)は、この CPU で1ページに138 sかかったため、表には含めていません。手法、注意事項、API 対応表については、
docs/MINERU.mdをご覧ください。
Python docling との適合性
各宣言形式を稼働中のライブラリと比較しています。Markdown はバイト単位、JSON は構造的に比較します(origin/version と再エンコードされた画像バイトを除き、すべてのキーと値を比較します)。最新の検証結果は docling 2.129.0 です
(scripts/conformance/full_conformance.py。✅ all はすべてのファイルが一致したことを示します)。
| 形式 | ファイル数 | Markdown | JSON | 形式 | ファイル数 | Markdown | JSON |
|---|---|---|---|---|---|---|---|
| DOCX | 38 | ✅ all | ✅ all | iWork Pages | 1 | ✅ all | ✅ all |
| HTML | 32 | ✅ all | 31 | iWork Keynote | 5 | ✅ all | ✅ all |
| PPTX | 8 | ✅ all | ✅ all | EBCDIC | 3 | ✅ all | ✅ all |
| XLSX | 14 | 13 ² | 13 ² | JATS | 7 | ✅ all | ✅ all |
| ODF | 7 | ✅ all | ✅ all | DocLang | 15 | ✅ all | ✅ all |
| CSV | 9 | ✅ all | 6 | AsciiDoc | 5 | ✅ all | ✅ all |
| Markdown | 11 | ✅ all | 6 | USPTO | 9 | ✅ all | ✅ all |
| DeepSeek-OCR Markdown | 3 | ✅ all | n/a | EPUB | 1 | ✅ all | ✅ all |
| WebVTT | 4 | ✅ all | ✅ all | LaTeX | 8 | ✅ all | 7 ¹ |
Email (.eml) | 2 | ✅ all | ✅ all |
¹ 1706.03762:1 つの tabular のセルでは、一貫した row_span/col_span が設定されています。上流ではスパンをオフセットのみに記述しています。PDF の図には画像ペイロードがありません(上流では pypdfium2 でレンダリングされます)。
² xlsx_02_sample_sales_data:20 個の日付セルは、docling PR #4628 の数値書式ルール(#634)に従って出力されます。このルールは、リリース済みの docling ではまだ適用されません。
差分と該当するファイルの詳細は、docs/MIGRATION.md をご覧ください。
PDF/画像のパイプラインは、決定論的なスナップショットベースラインで固定されており、
docling のグラウンドトゥルースとの照合で評価されています。
docs/PDF_CONFORMANCE.md
パフォーマンス
各形式につき 1 つのフィクスチャを、公開済みの Python docling と Rust リリースバイナリで処理しています
(scripts/test/performance.sh)。docling ÷ docling.rs で、数値が大きいほど
Rust の優位性が高いことを示します。
| ファイル | サイズ | ピークメモリ比 | CPU 比 | ウォーム変換の高速化倍率 |
|---|---|---|---|---|
picture_classification.pdf(PDF) | 208 KB | 6.5× 少ない | 0.8× | 10.6× |
docx_rich_tables_01.docx(DOCX) | 3.1 MB | 39× 少ない | 1.2× | 19× |
wiki_duck.html(HTML) | 240 KB | 57× 少ない | 1.3× | 47× |
elife-56337.nxml(JATS XML) | 180 KB | 59× 少ない | 1.2× | 10× |
xlsx_04_inflated.xlsx(XLSX) | 168 KB | 51× 少ない | 0.9× | 18× |
powerpoint_with_image.pptx(PPTX) | 80 KB | 55× 少ない | 1.2× | 3.1× |
wiki.md(Markdown) | 8 KB | 57× 少ない | 1.2× | 1.2× |
csv-comma.csv(CSV) | 4 KB | 64× 少ない | 1.2× | 0.6× † |
† 4 KB の CSV はマイクロ秒で変換されるため、Rust 自体のプロセス起動が測定値を左右します。エンドツーエンドでは 870× 高速です。
宣言形式では、docling の約 750 MB(これらの形式でも torch をインポートします)に対して数 MB のメモリしか使用せず、エンドツーエンドで 300~870× 短時間で処理が完了します。PDF のピークメモリは 2.4 GB に対して 0.37 GB で、エンドツーエンドの変換は 28.5× 高速です。処理時間の内訳と、効果がないことを確認した要因については、次をご覧ください。
docs/PDF_CONFORMANCE.md
Integration — お使いの言語から docling.rs を利用する
1 つのエンジンに複数のインターフェースがあり、どこから利用してもオプションと出力は同じです。
| 使用言語・環境 | 使用するもの | インストール |
|---|---|---|
| Rust | docling クレート | cargo add docling |
| シェル/CI ジョブ | バッチモードも含む docling-rs CLI | リリースバイナリ · cargo install docling-cli · ghcr.io/docling-project/docling-rs |
| HTTP に対応するもの | docling-serve、OpenAPI 3.1 | ghcr.io/docling-project/docling-rs-serve · cargo install docling-serve |
| Node.js / Bun / Electron | N-API アドオンの docling.rs | npm i docling.rs (docling.rs-cuda) |
| Python | docling、MarkItDown、Marker、MinerU の API を提供する docling-rs | pip install docling-rs (docling-rs-cuda) |
| LangChain / LlamaIndex | DoclingLoader(langchain-docling の API) · DoclingReader(llama-index-readers-docling の API) | pip install langchain-docling-rs · pip install llama-index-readers-docling-rs |
| ブラウザー/Tauri/PWA | 完全にクライアント側で動作する docling.rs-wasm | npm i docling.rs-wasm |
| C、C++、C#、Go、Java、Swift、Zig | docling.h を 1 つ提供する docling-ffi | リリースアーカイブ docling-ffi-<tag>-<target> |
すでに Cargo を使っているなら Rust、スクリプトやバッチジョブには CLI、 複数のサービスで 1 つのウォームなパイプラインを共有するなら serve、 プロセス内で使うなら Node / Python、ドキュメントをユーザーのマシンから外部に出せない場合は wasm、 C を呼び出せるものには FFI をお使いください。
Rust API
use docling::{DocumentConverter, SourceDocument};
let converter = DocumentConverter::new();
let result = converter.convert(SourceDocument::from_file("input.md")?)?;
println!("{}", result.document.export_to_markdown()); // Markdown
println!("{}", result.document.export_to_json()); // docling DoclingDocument JSON
すべての変換オプションは、どのインターフェースからも同じ方法で設定できる、シリアライズ可能な 1 つの構造体 docling::ConvertOptions にまとめられています(docs/OPTIONS.md)。
ライブラリーガイドでは、出力形式、エラー処理、チャンク分割、画像抽出、ストリーミング、OCR、PDF の設定、リモート VLM パイプライン、独自のバックエンドの登録について説明しています(#680)。
HTTP 変換 API — docling-rs serve
docling-serve は、リクエスト間で共有される 1 つのウォームな PDF/画像パイプラインを使って、HTTP 経由でコンバーターを公開します(同じ PDF の再処理ではモデルの読み込みを省略します)。ストリーミング Markdown、バッチ処理、ZIP 入力、非同期ジョブ、GET / で利用できる対話型テストフォーム、GET /openapi.yaml で利用できる OpenAPI 3.1 の仕様を提供します。また、Python 版 docling-serve のルートも提供するため、Open WebUI、n8n、Dify、LangChain のクライアントをそのまま利用できます。
docker run -p 127.0.0.1:5001:5001 ghcr.io/docling-project/docling-rs-serve
curl -F [email protected] localhost:5001/v1/convert # Markdown
curl -F [email protected] 'localhost:5001/v1/convert?to=json' # docling JSON
curl -F [email protected] -F [email protected] localhost:5001/v1/convert # a batch
リクエストオプション、サーバーフラグ、非同期ジョブ、docling-serve のルート、Open WebUI の設定については、crates/docling-serve/README.md をご覧ください。コンテナーとサイジングについては、docs/DEPLOYMENT.md をご覧ください。
MCP サーバー — docling-rs mcp
docling-rs mcp は、デフォルトの docling-rs バイナリとイメージに含まれる Model Context Protocol サーバーです。エージェントは MarkItDown の convert_to_markdown(uri) ツールを利用できます。ツール名と仕様は同じなので、コマンドを変更するだけで markitdown-mcp の構成を切り替えられます。さらに、convert(uri, to, options) と list_input_formats() も利用できます。
{
"mcpServers": {
"docling": { "command": "docling-rs", "args": ["mcp", "--root", "/Users/me/Documents"] }
}
}
claude mcp add docling -- docling-rs mcp --root ~/Documents # Claude Code
uvx docling-rs-mcp --root ~/Documents # the same server from PyPI
ローカルファイルの読み取りは --root の配下に制限されます。URL の取得には --allow-url-fetch が必要です。
公式 MCP レジストリ
および Smithery に掲載されています。PyPI ランチャー、Docker、Streamable HTTP(--http)、セキュリティモデル、メモリーの動作については、
crates/docling-cli/README.md をご覧ください。
RAG サブシステム
crates/docling-rag はドキュメントをチャンクに分割し、
それらを埋め込み(Ollama、Gemini、またはローカルの ONNX モデルを使用)、保存し
(SQLite + sqlite-vec または PostgreSQL + pgvector)、検索します。ハイブリッド検索、
複数クエリ検索、HyDE 検索、評価ハーネス、REST API、組み込みの検索 UI を備えています。
ブラウザーで — docling-wasm
宣言型コンバーターと PDF テキストレイヤーは WebAssembly にコンパイルされます。
npm i docling.rs-wasm を実行し、convert(bytes, filename, to) を呼び出すと、完全に
クライアント側で実行されます。サーバーは不要で、gzip 圧縮後のモジュールは約 3.4 MB、
ブラウザー内 OCR もオプションで利用できます。詳細とデモページ:
crates/docling-wasm。
Node.js、Python、C
- Node.js / Bun — npm の
docling.rsは ビルド済みの N-API アドオンです。同期・非同期変換、ストリーミング、チャンク分割、ZIP バッチ、ウォーム状態のPipelineを利用できます。 - Python — PyPI の
docling-rs(NVIDIA 用のdocling-rs-cuda)は、docling のDocumentConverterと本物の docling-coreDoclingDocument、MarkItDown の API、LangChain および AutoGen との統合を提供します。 - C ABI —
docling-ffi:C、C++、C#/.NET、Go、 Java、Swift、Zig 向けの単一ライブラリと単一のdocling.h。公開されているすべての リリースでビルド済みです。
コンテナーにデプロイする
| イメージ | 内容 |
|---|---|
ghcr.io/docling-project/docling-rs-serve | HTTP API。モデルを組み込み済み(linux/amd64、linux/arm64) |
ghcr.io/docling-project/docling-rs | CLI。エントリーポイントは docling-rs、作業ディレクトリは /data |
…-serve-cuda · …-rs-cuda | CUDA 13 + cuDNN 9 対応の同等イメージ(linux/amd64) |
Compose ファイル(スタンドアロン、Caddy TLS、CUDA)、環境変数、サイズ設定、
オブザーバビリティについては、docs/DEPLOYMENT.md を
参照してください。
ML モデルの取得
PDF/画像パイプラインには ONNX モデル(RT-DETR レイアウト、PP-OCR、TableFormer)が
必要で、音声には Whisper が必要です。download_dependencies.sh は
このリポジトリの
リリースからモデルを取得し、
./.models に保存します。各インターフェースはこの場所を参照します(--cli の場合は
代わりに、cargo でインストールしたバイナリの隣に保存します)。
scripts/install/download_dependencies.sh # from a checkout
curl -fsSL https://raw.githubusercontent.com/docling-project/docling.rs/master/scripts/install/download_dependencies.sh | sh # anywhere
すべてのアセットとオプション(ASR プリセット、エンリッチメントモデル、PII
マスキング用 NER、INT8、フォント)、GPU 実行プロバイダー、環境変数による
オーバーライドについては、docs/MODELS.md を参照してください。
ビルド済み ONNX Runtime のない IBM Z などのターゲットについては、
docs/IBMZ.md を参照してください。
コントリビューション
バグ報告とプルリクエストを歓迎します。ビルドおよびテスト用コマンド、適合性 ワークフロー、変更時に従うべき規約については、 CONTRIBUTING.md を参照してください。
ライセンス
上流の docling と同じ MIT ライセンスです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。