Home

Changelog

Every published release of DocSlicer, newest first. Versions follow semantic versioning: while DocSlicer is pre-1.0, minor versions may contain breaking changes — see Installation for how to pin.


0.2.3 — 9 August 2026

pip install docslicer==0.2.3

Fixed

  • ParseResult.save() and .export() raised UnicodeEncodeError on Windows for documents containing characters outside cp1252 — those JSON writes omitted an explicit encoding and fell back to the platform default. Present since 0.2.0, surfaced by the Windows CI job added in 0.2.2. The MCP server and the .mcpb extension were never affected; both write UTF-8 explicitly.

Project

  • Releases are gated on the test suite, and the uv.lock relock PR is opened automatically.

0.2.2 — 9 August 2026

pip install docslicer==0.2.2

MCP: read returns what you asked for

read previously assembled a section from chunks. Chunks are a lossy unit to read a heading from — the chunk builder merges small sections together and attributes the result to just one of the headings it absorbed. In practice a merged heading came back empty while its neighbour came back carrying text that wasn't its own.

Sections are now rendered from blocks, which belong to exactly one heading. Consequences:

  • A heading that was merged away returns its own text instead of nothing.
  • Token costs in the outline are a plain sum over blocks, so what a read costs matches what the outline advertised. Merged headings no longer show one section as expensive and its neighbours as empty.
  • Text ahead of the first heading is included when a short document is served whole — on a short document that is regularly the part worth reading.
  • [Page X] markers are placed at every page turn rather than per chunk, so a citation resolves to the page the figure is actually on.

MCP: asking for a section and its subsection no longer duplicates it

Requesting a heading and another nested beneath it rendered the second twice — once inside its parent and once alone. The outline is what shows the nesting, so the duplication was invisible in the request. Nested headings are now folded into the ancestor and reported back under already_included.

MCP: cached parses are invalidated by version

doc_id now includes the DocSlicer version, so a release that adds a field is never served a cached record from before that field existed.

Library

  • Block.token_count is populated for every format, counted on the same basis as Chunk.token_count, so blocks can be budgeted against directly.
  • docslicer --no-chunking returned an empty list. It stops the pipeline before chunks exist, but the CLI serialized chunks regardless — it now emits blocks, which is what the flag was always documented to produce.
  • The README documents the docslicer command-line entry point for the first time.

Project

  • CI runs the test suite across Python 3.10–3.14 on Linux, macOS, and Windows, builds and metadata-checks the distributions, and fails if extension/uv.lock has drifted from the declared version — the drift that had to be fixed by hand after 0.2.1.

Known issue in this release. ParseResult.save() and .export() raise UnicodeEncodeError on Windows for documents containing characters outside cp1252. Fixed in 0.2.3.


0.2.1 — 8 August 2026

DocSlicer's MCP server, packaged as a one-click Claude Desktop extension.

pip install 'docslicer[mcp]==0.2.1'
  • MCP server with parse, get_outline, read, search, to_markdown.
  • Claude Desktop / Cowork extension — download the .mcpb from the release and double-click it. You pick the folder DocSlicer may read and write during install; no Python needed.
  • Extension migrated to the MCPB uv server type (manifest 0.4).
  • Fixed extension/uv.lock to resolve docslicer from PyPI rather than a vendored wheel path.

0.2.0 — 25 July 2026

First public release on PyPI.

pip install docslicer==0.2.0

Parsing

  • parse_document — one entry point for every supported format, auto-detected from the file extension and magic bytes.
  • Format-specific parsers — parse_pdf, parse_docx, parse_pptx, parse_html — for when you know the format and want a mismatch to fail loudly.
  • parse_all for folders: yields (source, result) pairs and never aborts the batch on a single failure.
  • DocumentParser for reusing one configuration across many calls.

Structure

  • Blocks — headings, paragraphs, and tables as atomic units, with bounding boxes and page numbers.
  • Chunking — heading-aware grouping sized to an embedding model's context window, instead of a fixed character split.
  • Hierarchy — the document's heading tree, for navigating by structure rather than by page.
  • Tables in three representations: markdown, jsonl, and melted.
  • Charts in DOCX and PPTX recovered as data rather than pixels — series, categories, values, and axis titles.

Packaging

  • Python 3.10+, pure-Python wheel, no system dependencies for the base install.
  • Optional extras: html (Playwright rendering), llm (exact tiktoken counts), ocr, crypto (password-protected Office files), and parquet.

Watch releases on GitHub to be notified of new versions.