Reference
Versions and upgrade notes
pdfplumber has had 76 releases on PyPI since 2015, and 0.11.10 is the current one. Most upgrades are drop-in. A handful changed results or renamed things, and those are the ones collected here, checked against the project's changelog and the package metadata on PyPI.
Short answer
The latest release is 0.11.10 (14 June 2026), with pdfminer.six 20260107. Check what you have:
import pdfplumber
import pdfminer
print("pdfplumber", pdfplumber.__version__)
print("pdfminer.six", pdfminer.__version__)pdfplumber 0.11.10
pdfminer.six 20260107Upgrade with python -m pip install -U pdfplumber. Every example on this site was run with the versions shown under each output.
Releases have slowed to a few a year, and the last three all update pdfminer.six, the parser underneath. That is a reason to upgrade on its own: two of those updates fixed security issues.
Which version should you be on?
| Your situation | Use | Why |
|---|---|---|
| Python 3.10 or newer | 0.11.10 | Current; includes both pdfminer.six security fixes |
| Python 3.9 | 0.11.8 | What pip resolves; has the first security fix but not the second |
| Python 3.8 | 0.11.5 | What pip resolves; no security fixes. Upgrade Python if you parse untrusted PDFs |
pdfplumber itself declares requires-python >= 3.8, but its newer pins of pdfminer.six and Pillow need newer Python, so pip quietly picks an older pdfplumber on old interpreters. We verified those resolutions in clean environments (install guide). The two security issues are described in the FAQ.
Changes that can break your code
Ordered newest first. Each line links to the release notes on GitHub.
| Version | Change | What to do |
|---|---|---|
| 0.11.7 | stroking_pattern and non_stroking_pattern removed from objects |
Stop reading those keys; the colour keys remain |
| 0.11.5 | PageImage.debug_tablefinder() argument renamed to table_settings= |
Rename the keyword, or pass the settings positionally |
| 0.11.0 | word["direction"] is now "ltr", "rtl", "ttb" or "btt" instead of 1 / -1; vertical_ttb and horizontal_ltr deprecated for char_dir and char_dir_rotated |
Compare with the strings; move to the new parameters |
| 0.10.0 | to_image() renders with pypdfium2 instead of Wand/ImageMagick; colours are tuples; Python 3.7 dropped; vestigial font and name object keys removed; PageImage.save() quantizes to 256 colours by default |
Remove ImageMagick setup; compare colours as tuples; pass quantize=False for photos (images) |
| 0.9.0 | Ligatures expanded by default (fi → fi); stricter word segmentation; curves now count as table edges |
Pass expand_ligatures=False to keep them; re-check table results on drawings with curves |
| 0.8.0 | In table extraction, keep_blank_chars must be passed as text_keep_blank_chars; curve["points"] deprecated for pts; layout=True text is padded to the page size |
Rename the setting; read pts |
Release history since 0.7
| Version | Date | pdfminer.six | Highlights |
|---|---|---|---|
| 0.11.10 | 2026-06-14 | 20260107 | pdfminer.six update; higher minimum Pillow (12.2.0) and pypdfium2 (5.9.0) |
| 0.11.9 | 2026-01-05 | 20251230 | pdfminer.six update with the fix for CVE-2025-70559 |
| 0.11.8 | 2025-11-08 | 20251107 | edge_min_length_prefilter table setting (dashed lines); pdfminer.six fix for CVE-2025-64512 |
| 0.11.7 | 2025-06-12 | 20250506 | Page.trimbox, bleedbox, artbox; pattern keys removed |
| 0.11.6 | 2025-03-27 | 20250327 | First pdfminer.six update in over a year; to_csv() uses minimal quoting; pdfminer errors on malformed PDFs are caught and wrapped |
| 0.11.5 | 2025-01-01 | 20231228 | CLI --format text; raise_unicode_errors option; name on image objects |
| 0.11.4 | 2024-08-18 | 20231228 | Type-hint fix for Python 3.8 |
| 0.11.3 | 2024-08-07 | 20231228 | Table.columns; extract_words(return_chars=True); unicode_norm; repair(setting=...); non-zero mediabox origins handled |
| 0.11.2 | 2024-07-06 | 20231228 | extra_attrs for dedupe_chars() |
| 0.11.1 | 2024-06-11 | 20231228 | page.close() also clears the text map cache; annotation fixes on rotated pages |
| 0.11.0 | 2024-03-07 | 20231228 | Right-to-left and vertical text parameters; curve["path"] and curve["dash"] |
| 0.10.4 | 2024-02-10 | 20221105 | x_tolerance_ratio; structure_tree; page.close() back; force_mediabox |
| 0.10.3 | 2023-10-26 | 20221105 | Marked content (mcid, tag); gs_path for repair |
| 0.10.2 | 2023-07-29 | 20221105 | PDF.path |
| 0.10.1 | 2023-07-19 | 20221105 | antialias for to_image() |
| 0.10.0 | 2023-07-16 | 20221105 (inferred) | pypdfium2 rendering; pdfplumber.repair() and open(repair=True); Page.find_table() |
| 0.9.0 | 2023-04-13 | 20221105 | extract_text_lines(); regex groups in search(); ligature expansion |
| 0.8.1 | 2023-04-08 | 20221105 | Fix for drawing rectangle fills with newer Pillow versions |
| 0.8.0 | 2023-02-13 | 20221105 | Text options accepted by table extraction; to_image(width=, height=) |
| 0.7.0–0.7.6 | 2022 | 20220524, then 20221105 |
Dates are the changelog’s. PyPI shows 0.11.10 as uploaded on 15 June 2026, because the upload happened after midnight UTC. PyPI’s metadata for 0.10.0 lists no dependencies at all; the releases on either side of it, 0.9.0 and 0.10.1, both pin 20221105.
Pin it
For applications, pin the version you tested with, so a future upgrade is a decision rather than a surprise:
python -m pip install pdfplumber==0.11.10Pinning pdfplumber also pins pdfminer.six, because each release requires one exact pdfminer.six version. Do not pin pdfminer.six separately to something else: pip will refuse the combination.