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.3Fixed
ParseResult.save()and.export()raisedUnicodeEncodeErroron 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.mcpbextension were never affected; both write UTF-8 explicitly.
Project
- Releases are gated on the test suite, and the
uv.lockrelock PR is opened automatically.
0.2.2 — 9 August 2026
pip install docslicer==0.2.2MCP: 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
readcosts 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_countis populated for every format, counted on the same basis asChunk.token_count, so blocks can be budgeted against directly.docslicer --no-chunkingreturned 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
docslicercommand-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.lockhas 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
.mcpbfrom 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
uvserver type (manifest 0.4). - Fixed
extension/uv.lockto resolvedocslicerfrom PyPI rather than a vendored wheel path.
0.2.0 — 25 July 2026
First public release on PyPI.
pip install docslicer==0.2.0Parsing
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_allfor folders: yields(source, result)pairs and never aborts the batch on a single failure.DocumentParserfor 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(exacttiktokencounts),ocr,crypto(password-protected Office files), andparquet.
Watch releases on GitHub to be notified of new versions.