Repository navigation
PDFluent SDK 1.1.0 · 2026-10-17 · commit 38f09b5b8b2a3cd6bd1d1b9a843b1e14d7f6b2fb
PDFluent SDK 1.1.0 adds structured extraction to every channel. Every binding returns Markdown, blocks and Docling JSON; Rust, Python, Node and the CLI add words with boxes, and Python, Node and the CLI add chunks for retrieval pipelines [B51]. The release also adds an optional balanced quality that runs a layout model and a table-structure model locally, stored-image extraction on the document API [B53], a compat layer that follows part of the PyMuPDF API, and a CLI. The compat layer's coverage is partial and behaviour can differ in places; it is an independent implementation, not PyMuPDF. Structured extraction ships as Preview: output quality is still improving and the API may change in a minor release. Plain-text extraction is not Preview.
Install
cargo add pdfluent
pip install pdfluent
npm install @pdfluent/node
npm install @pdfluent/sdk-wasm
dotnet add package PDFluent
# Maven: com.pdfluent:pdfluent:1.0.0 (1.1.0 follows shortly)The pdfluent CLI is in the assets below; the Python and Node packages do not install it.
pdfluent models install layout tables
pdfluent models statusThe CLI checks every model file against size and SHA-256 pins compiled into the binary. install is the only command that downloads anything; nothing downloads automatically at run time. Model package: models-v1.
Highlights
balanced(Preview): the layout model regions each page and the table-structure model structures tables, run locally through ONNX Runtime 1.23.2 [B49, 2026-10-10], loaded at run time and never linked. Native only, never WebAssembly.fast(default): the engine alone, pure Rust, no models, runs everywhere including WebAssembly.- Rust:
extract_markdown,extract_blocks,extract_docling,extract_words,extract_text_pages,page_images/extract_image_data/decode_image_pixels,keep_ligatures(bool). - Python:
extract_markdown,extract_blocks,extract_docling,extract_words,page_images/extract_image_data/decode_image_pixels,progress,ocr_function=,pdfluent.chunks.iter_chunks. - Node:
extractMarkdown,extractBlocks,extractDocling,extractWords,pageImages/extractImageData/decodeImagePixels,iterChunks. - WebAssembly:
extractMarkdown,extractBlocks,extractDocling, plusencryptPdf/decryptPdf,addWatermark,extractImages,signPdf. - Java, in the 1.1.0 source:
extractMarkdown,extractBlocks,extractDocling,pageImages/extractImageData/decodeImagePixels. - .NET:
ExtractMarkdown,ExtractBlocks,ExtractDocling,PageImages/ExtractImageData/DecodeImagePixels/ExtractImages. - C API:
pdf_document_extract_markdown,pdf_document_extract_blocks_json,pdf_document_extract_docling_json,pdf_page_images_json/pdf_image_extract_data/pdf_image_decode_pixels. - CLI, eight archives:
extract(--format md|json|chunks|text|words,--quality fast|balanced),merge,split,pages,compress,protect,unprotect,watermark,convert,redact,sign,validate,info,inspect,extract-text,doctor,models,completions, global--json[B52]. - Error messages point at
https://pdfluent.com/errors/[B55].
Table results
| Dataset | Pages / documents | Metric | vs Docling | vs pymupdf4llm | Claim |
|---|---|---|---|---|---|
| FinTabNet (financial reports) | 120 / 67 | TEDS | +0.150 [+0.119; +0.183] | +0.132 [+0.106; +0.158] | [A38, 2026-10-14] |
| PubTables-1M (scientific articles) | 120 / 55 | TEDS | +0.087 [+0.055; +0.128] | +0.081 [+0.046; +0.127] | [A39, 2026-10-14] |
In balanced mode with the table model, PDFluent scored higher than both Docling and pymupdf4llm on FinTabNet and PubTables-1M [A38, A39, 2026-10-14].1 On ParseBench tables (100 pages from 32 documents, ParseBench's own scorer on each tool's Markdown), it is ahead of pymupdf4llm on both metrics: table record match +0.314 [+0.181; +0.452], GriTS +0.186 [+0.101; +0.275] [A40, 2026-10-14].1
Breaking changes
- CLI exit codes: 0 ok, 1 usage, 2 input error, 3 processing error. Before: 2 usage, 3 missing file, 4 malformed PDF, 5 policy opt-in, 6/7/70 stub/IO/unknown. The
--jsonenvelope names the exact failure. Blockis#[non_exhaustive]and gainedconfidenceandgrid; struct literals stop compiling. UseBlock::new(kind, page, bbox, text, index).pdf-syntaxandpdf-interpretmove to 0.6.0; crates pinned to 0.5.x must move. (pdfluent-lopdfalso moves, 0.39.5 to 0.39.6, with no API change.)
Behaviour changes to check
- Words are joined by default:
Safety rules, notS a f e t y; decimals read joined (18.90). - A textless scan without OCR returns one figure marker instead of empty output.
- Typographic ligatures (U+FB00–FB06, U+FB13–FB17) come out as letters;
keep_ligatures(true)restores the code points. pdfluent extract-textends every page with a form feed;--no-page-breaksrestores the blank-line join.PdfDocument::outlines()returns pageNonefor an entry with no destination; 1.0.0 returnedSome(0).- Plain-text extraction can be slightly slower on some documents: the engine now places combining marks after the glyph they mark, a small per-glyph cost.
Packages
- Every 1.1.0 package names
github.com/pdfluent/pdfluent-sdkas its source.@pdfluent/node,@pdfluent/extract,pdfluent-extractand the two integrations link its issue tracker;pdfluent-extractand@pdfluent/extractlinkhttps://pdfluent.com/sdk/pricing/for the commercial licence [B56]. @pdfluent/sdk-wasmnames its repository again [B57].- Java: 1.1.0 on Maven Central follows shortly; 1.0.0 remains available.
Assets
| Asset | SHA-256 |
|---|---|
| CLI archives (8 targets) | see SHA256SUMS |
| C API tarballs | see SHA256SUMS |
| SHA256SUMS | 361d2492be37bad7d9fb26bf84f1c0b1b063e59ea65c92423c0f2824690972b0 |
Full changelog: CHANGELOG.md.
PyMuPDF and MuPDF are trademarks of Artifex Software, Inc. PDFluent is an independent product of Innovation Trigger B.V. and is not affiliated with or endorsed by Artifex.
-
Mode:
quality=balancedwith the table-structure model. We measured our side on 2026-10-14 on a 1.1.0 pre-release build with the same extraction code, and Docling 2.126.0 and pymupdf4llm 1.28.2 on 2026-10-08 on the identical pages. The pages come from each dataset's development (tuning) split, which we used while building the table work, so our side is an upper bound, not an independent held-out test. Each number is ours minus theirs, with a 95% interval from a paired per-document bootstrap. The table-structure model we ship is Microsoft's Table Transformer v1.1-all, which Microsoft trained on PubTables-1M and FinTabNet.c. We have not checked whether our sample pages fall inside its training data, so the FinTabNet and PubTables-1M results may favour us for that reason too. Table structure only, on these three samples. Reproducible with pdfluent-bench (coming). ↩ ↩2