Skip to content

PDFluent SDK 1.1.0

Latest

Choose a tag to compare

@jasperdew jasperdew released this 17 Oct 14:05

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 status

The 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, plus encryptPdf/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 --json envelope names the exact failure.
  • Block is #[non_exhaustive] and gained confidence and grid; struct literals stop compiling. Use Block::new(kind, page, bbox, text, index).
  • pdf-syntax and pdf-interpret move to 0.6.0; crates pinned to 0.5.x must move. (pdfluent-lopdf also moves, 0.39.5 to 0.39.6, with no API change.)

Behaviour changes to check

  • Words are joined by default: Safety rules, not S 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-text ends every page with a form feed; --no-page-breaks restores the blank-line join.
  • PdfDocument::outlines() returns page None for an entry with no destination; 1.0.0 returned Some(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-sdk as its source. @pdfluent/node, @pdfluent/extract, pdfluent-extract and the two integrations link its issue tracker; pdfluent-extract and @pdfluent/extract link https://pdfluent.com/sdk/pricing/ for the commercial licence [B56].
  • @pdfluent/sdk-wasm names 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.

  1. Mode: quality=balanced with 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