# What changed in unstructured

> 33 changes in unstructured 0.18 to 0.27 from its official release notes, upgrade guides and advisories: 4 breaking, 3 security, 1 new APIs and options. Each one cited. Sources checked 2026-10-28. HTML: https://unstale.sh/pypi/unstructured/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## unstructured 0.27

### Breaking changes

- A line break in a quoted CSV or TSV cell is read as whitespace rather than a literal \n. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- CSV and TSV cells are now read as held in the file. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)
- Text is classified as an email address only when all of it is an email address. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)
- A line break is now read as a newline instead of a vertical tab. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)

### New APIs and options

- Element metadata exposes the DOCX paragraph style name. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)

### Performance

- PDF partitioning avoids reading every page with pdfminer just to determine whether the PDF has text. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Decode buffers are freed sooner when restoring original elements, reducing how long they remain allocated. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)
- Image buffers are freed sooner during figure extraction, reducing how long they remain allocated. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)

### Behavior and default changes

- Addresses in Alabama and Wyoming are recognized. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- GIF frames are charged at the canvas size Pillow decodes them at. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Chunk combine thresholds are measured in tokens when max_tokens is set. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Text is translated chunk by chunk instead of as a single whole. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)

### Fixes and other changes

- Analysis bounding-box overlays are rendered at the pdf_image_dpi used for partitioning. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Bounding boxes are compared correctly for elements without a page number. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- A box nested within another is recognized when the tolerance is zero. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- A bulleted list following its lead-in line is retained as list items. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- combine_text_under_n_chars is capped at new_after_n_chars. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- An empty text body returns no elements. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- TSV partitioning honors infer_table_structure. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Files with the .markdown extension are detected as Markdown rather than plain text. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- _mean ignores unmeasured scores, matching its sibling functions. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- An attached email is partitioned instead of raising AssertionError. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- The Cc, Bcc, and Message-ID headers are read regardless of letter case. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Commas inside quoted sender or recipient names are preserved. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Cell text such as N/A and None is preserved instead of being emptied. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Text extraction honors explicitly specified encodings. (0.27.35) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.35)
- Empty entries in an address group are now dropped. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)
- The encoding argument is now honored when partitioning JSON. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)
- The encoding argument is now honored when partitioning NDJSON. (0.27.34) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.34)
- Very large split elements are no longer repeated in every chunk. (0.27.33) — [release notes](https://github.com/Unstructured-IO/unstructured/releases/tag/0.27.33)

## unstructured 0.24

### Security

- unstructured: Stored XSS via unescaped HTML generation (0.24.1) — [security advisory](https://github.com/advisories/GHSA-V5MQ-3XHG-98M9)
- unstructured: Server-Side Request Forgery in the URL-based partitioning (0.24.0) — [security advisory](https://github.com/advisories/GHSA-4MVJ-M6J5-PMF7)

## unstructured 0.18

### Security

- Unstructured has Path Traversal via Malicious MSG Attachment that Allows Arbitrary File Write (0.18.18) — [security advisory](https://github.com/advisories/GHSA-GM8Q-M8MV-JJ5M)
