Skip to content
dialegein

pikepdf

Python wrapper around qpdf for reading, repairing and structurally editing PDFs.

Jobs Protect Merge Edit Compress

Since 2017

Operated by James R. Barlow

Visit pikepdf

Opens the vendor's own site.

Jobs covered

Open a task to see exactly what the vendor documentation supports.

Protect Browse all protect tools

protecting PDFs with pikepdf, where the API documentation exposes Pdf.save with an Encryption object carrying owner and user passwords, allow-oriented Permissions for accessibility, extraction, annotation, assembly, form and other modifications and low- and high-resolution printing, and EncryptionMethod values rc4, aes, aesv3, none and unknown, plus JobBuilder.encrypt, JobBuilder.decrypt and opening password-protected files.

The qpdf manual explains that the security restrictions placed on PDF files are enforced solely by the software opening them, that a modified reader can ignore them, and that password protection has separate user and owner password semantics. The scope records the documented encryption, owner and user password, permission and decryption controls in the Python library, makes no universal reader-enforcement guarantee, asserts no particular cryptographic strength beyond the documented method names, and does not claim a specific encryption level where the API documentation does not state one

Merge Browse all merge tools

merging and assembling documents with pikepdf, where the pages documentation documents splitting a PDF into single-page PDFs, merging or concatenating several PDFs, reversing page order, copying pages from other PDFs, emplacing pages, reordering pages without breaking links by removing and reinserting the page, copying pages within a PDF, and using page ranges. The scope records the documented page-level split, merge, concatenate, copy, insert, extend, reverse and reorder operations and makes no claim about preserving signatures, forms, links or annotations beyond the documented page-copy behaviour

Edit Browse all edit tools

editing PDF structure with pikepdf, where the documentation exposes the object model for dictionaries, arrays, streams and page trees, page rotation, page boxes, metadata access and editing for XMP and DocumentInfo, annotations, AcroForm fields and form copying, attachments, outlines and the sanitiser helpers for JavaScript, embedded files, external access, thumbnails, search indexes, multimedia, capture data, private application data and collections.

The scope records the documented object, page, annotation, form, metadata, attachment and sanitiser operations in the Python library, makes no general text-editor, OCR, trust-preserving or conversion claim, and leaves redaction explicitly unsupported as the project states

Compress Browse all compress tools

optimising PDFs by removing unreferenced resources, recompressing streams and optimising images

Where your files are processed

No server involved

An in-process Python extension that compiles qpdf into the wheel. There is no hosted component at all. That is a property of the library itself: what an application built with it does with your file depends on that application, not on this.

Architectural: an in-process Python extension that compiles qpdf into the wheel. There is no hosted component, so files are opened and written on the local filesystem only.

What it does

pikepdf is a Python library, current version 10.17.0, for creating, reading, manipulating and repairing PDFs through a Pythonic wrapper around the qpdf C++ library. It exposes a PDF's objects, dictionaries, arrays, streams and page tree rather than a rendered view: it opens and repairs files, merges, splits, rotates and reorders pages, copies pages between documents, edits metadata, reads and writes annotations and AcroForm fields, extracts and replaces images, linearizes for progressive delivery, optimises structures and reads or writes password encryption.

It deliberately does not render pages, extract text, perform OCR or convert documents to other formats. The package requires Python 3.11 or later and is published under MPL-2.0; binary wheels are documented for Python 3.11 through 3.14 on Windows x64 and ARM64, Linux x86_64 and aarch64 with manylinux and musllinux, and macOS 15 or later on Apple Silicon, with Intel macOS and older systems possible only from source.

Best for

Python developers doing structural PDF surgery, batch repair or metadata sanitisation who want a permissive licence rather than AGPL.

Worth knowing

It is a library, not a command-line program: no pikepdf executable is installed, so the surface is Python code. It cannot reliably redact text or images, and the project says no purely programmatic tool operating on a file's structure can; it also does not render pages, extract text, perform OCR or convert documents to other formats.

The qpdf encryption documentation is explicit that PDF permission restrictions are enforced only by the software that opens the file and can be ignored by a modified reader, so the password and permission API is not a universal reader-enforcement guarantee and no specific cryptographic strength is asserted. The qpdf engine is a separate Apache-2.0 project with its own copyright holders, Jay Berkenbilt and Manfred Holger; pikepdf itself is MPL-2.0 and its wheels bundle other dependencies under their own licences, so the two licences and the bundled notices are kept separate.

Binary wheel support is narrower than the platform list suggests: the current wheel table covers Windows x64 and ARM64, Linux x86_64 and aarch64 on manylinux and musllinux, and macOS 15 or later on Apple Silicon only; Intel macOS requires a source build and is not a published wheel. Python 3.11 or later is required, and the documented wheel table covers 3.11 through 3.14.

No public commercial price or commercial-support price was found, so no price is asserted. Processing is local to the Python process and there is no vendor-hosted endpoint and no mobile build.

Details, and where each comes from

Vendor statements, our own reading of their pages, and the things nobody has established yet, each answered separately. Where we have not confirmed something it says so rather than guessing, and a row nobody has established is greyed out.

Versions covered
Windows · macOS · Linux · Self-hosted
Website
pikepdf.readthedocs.io
Requires an account
Not applicable
Watermark on the free tier
Not verified
Maximum file size
Not verified
Batch processing
Yes
Data residency
Self-hosted
Open source
Yes
Self-hostable
Yes
Licence
MPL-2.0 for pikepdf.

MPL-2.0 for pikepdf. The PyPI metadata reports license_expression MPL-2.0 and the documentation copyright is 2026 James R.

Barlow. pikepdf wraps qpdf, which is a separate project under the Apache License 2.0, copyright 2005-2021 Jay Berkenbilt and 2022-2026 Jay Berkenbilt and Manfred Holger, and the wheel binaries bundle other dependencies under their own licences. No corporate ownership relationship between pikepdf and qpdf is asserted or implied; they are separate projects with separate copyright holders and licences.

Redaction
No redaction feature
Programmatic access
Embeddable library
Last availability check
Responded in 252 ms 21 October 2026

Checked automatically by our own runner, not reported by the vendor. 100% of our last 30 checks got a response.

What the redaction verdict rests on

Established by inspecting the software's own interface on 17 September 2026.

What that does not establish

Established by inspecting the installed library rather than by testing a document: no method containing "redact" exists at any level of its API. That establishes the absence of a feature, which is a different and firmer kind of claim than a mechanism working.

The project documents that purely programmatic redaction of a PDF cannot be reliable.

https://pikepdf.readthedocs.io/

What the vendor says

Claims are labelled rather than repeated as fact. Where we have checked something ourselves, it says so and shows when. Checked means we read the vendor's own page and it says what we recorded - not that we tested the behaviour, unless the note says we did.

  • “pikepdf cannot reliably redact text or images from a PDF, and neither can any purely programmatic tool that operates on the file's structure.”

    Checked by us - the source says this Read 22 September 2026

    Confirmed verbatim. Under a heading called 'The limits of programmatic redaction', inside a warning box, the page states: "pikepdf cannot reliably redact text or images from a PDF, and neither can any purely programmatic tool that operates on the file's structure." The claim is that sentence unaltered.

    This is an unusual claim for this index because it is a vendor arguing against their own product's suitability for a job, and it is the only claim here we have corroborated two ways: the wording says it, and the library we have installed exposes no redaction API at all. The page goes on to list why structural removal fails - text split across drawing operators, text hidden behind clipping paths or overlapping white rectangles, invisible OCR layers, embedded search indexes, thumbnails and form XObjects - and recommends redacting physically for genuinely sensitive documents.

    That reasoning is worth carrying because it applies to every tool in this index that claims structural redaction.

    Standing: Re-read, and the recorded hash was not reproduced

    Check it yourself: the source, the SHA-256, and how we checked
    From
    the text a browser renders
    SHA-256
    d2fa9fc6f078af799509851342f65924ab7eda22cd2e86a55c34952d1e42b27e
    Note
    no saved artifact matches this hash, so there is nothing to normalise towards. Both a raw fetch and a render of the documentation home fail to reproduce it.

    How we checked

    Re-verified verbatim on 2026-09-22: https://pikepdf.readthedocs.io/en/stable/topics/sanitize.html re-rendered in headless Chrome with scripts/render-page.mjs and the claim's wording found in the rendered text. Originally verified on 2026-09-21. sourceHash is the SHA-256 of the re-rendered text, held as rv-pikepdf-readthedocs-io-en-stable-topics-sanitize-html-e0f29d90.txt.

    What this hash proves, and what it does not

  • “pikepdf is a Python library allowing creation, manipulation and repair of PDFs. It provides a Pythonic wrapper around the C++ PDF content transformation library qpdf.”

    Checked by us - the source says this Read 22 September 2026

    Confirmed verbatim: the sentence is the first paragraph of the documentation home page. It names qpdf as the engine, which is the same library this index records separately as a command-line tool, so a reader can see the relationship between two entries rather than guessing.

    This is the third pikepdf claim recorded and the campaign's earlier work on this project included an inspection of its installed API surface rather than a page read - the redaction finding that no method containing "redact" exists - so the index holds both a documented description and an inspection of the same library.

    Standing: Re-read and matched byte for byte

    Check it yourself: the source, the SHA-256, and how we checked
    From
    the text a browser renders
    SHA-256
    7619e458a50146082b044086830a3f947f43f1837c6b303c6e87b90ab9a2c54b

    How we checked

    Re-verified verbatim on 2026-09-22: https://pikepdf.readthedocs.io/ re-rendered in headless Chrome with scripts/render-page.mjs and the claim's wording found in the rendered text. Originally verified on 2026-09-21. sourceHash is the SHA-256 of the re-rendered text, held as rv-pikepdf-readthedocs-io-e3a3277d.txt.

    What this hash proves, and what it does not

  • “pikepdf cannot reliably redact text or images from a PDF, "and neither can any purely programmatic tool that operates on the file's structure".”

    Checked by us - the source says this Read 22 September 2026

    There is no redaction API. No name containing "redact" exists at module level, on PdfPage, or on a page instance, so the classification of `none` is correct and the maintainer's warning is not modesty.

    This is a different kind of evidence from the canary tests elsewhere in this index - it establishes the absence of a feature by inspecting the API surface rather than establishing a behaviour by watching it - and it is recorded as such.

    Standing: Re-read and matched byte for byte

    Check it yourself: the source, the SHA-256, and how we checked
    From
    the raw HTTP response
    SHA-256
    d2fa9fc6f078af799509851342f65924ab7eda22cd2e86a55c34952d1e42b27e

    How we checked

    Re-verified verbatim on 2026-09-22: https://pikepdf.readthedocs.io/en/stable/topics/sanitize.html re-rendered in headless Chrome with scripts/render-page.mjs and the claim's wording found in the rendered text. Originally verified on 2026-09-17. sourceHash is the SHA-256 of the re-rendered text, held as rv-pikepdf-readthedocs-io-en-stable-topics-sanitize-html-e0f29d90.txt.

    What this hash proves, and what it does not

Each claim is quoted from the vendor's own pages. This section describes what we have and have not checked - it is not a judgement about anyone.

Sponsorship is distribution, not an endorsement or a promise of search rankings, AI citations, traffic, or sales. This listing is a free entry, compiled from published sources.

Visit pikepdf Report a problem

Related reading

How this record was put together

Editorial review.
No editor has signed this record off. That is not the same as nothing having been checked, and the lines below say what has.
Source reading.
3 claims taken from the vendor's own pages, read between 22 September 2026 and 22 September 2026.
Website availability.
The vendor's site was last checked on 21 October 2026.
Behaviour testing.
We ran this ourselves. The file handling was watched directly.

Sources: pikepdf.readthedocs.io (home, sanitize topic); the repository LICENSE and pyproject.toml; PyPI metadata; GitHub API metadata.