Skip to main content

rpptx-py

Native rpptx for Python

rpptx gives Python applications a native PPTX workflow for creating, opening, editing, and saving PowerPoint-compatible presentations. It also supports comments, speaker notes, and deterministic rendering. It works directly with OOXML packages and does not require Microsoft PowerPoint, LibreOffice, a conversion service, or a Java or .NET runtime.

The package runs the Rust rpptx presentation engine locally, exposes a typed Python API, and ships a default template for from-scratch deck creation. It renders slides and speaker notes without a remote service, supports review through notes and modern comment threads, and preserves safe package content outside the focused Python editing surface.

Installation

Install the current release from PyPI:

python -m pip install rpptx

rpptx requires CPython 3.9 or newer. Its platform wheels use the Python 3.9 stable ABI, so one wheel supports multiple compatible Python versions. Source installation requires a Rust toolchain and maturin.

Quick start

from rpptx import Presentation
from rpptx.util import Inches

presentation = Presentation()
slide = presentation.slides.add_slide(presentation.slide_layouts[6])
text_box = slide.shapes.add_textbox(
    Inches(1), Inches(1), Inches(8), Inches(1)
)
text_box.text = "Quarterly review"
presentation.save("review.pptx")

pdf = presentation.to_pdf()
with open("review.pdf", "wb") as output:
    output.write(pdf)

Capabilities

  • File and byte-based PPTX input and output.
  • Slide layouts, slides, placeholders, shapes, text frames, paragraphs, runs, pictures, preset shapes, and tables.
  • Deterministic PDF and PNG output for slides and speaker notes.
  • Formatting-preserving text replacement across slides and speaker notes, on one slide or in one text frame, with an optional expected count that leaves the deck unchanged on a mismatch.
  • Package and PresentationML validation that returns the issues rpptx validate reports as typed values.
  • Speaker-note text plus modern comment authors, threads, replies, thread resolution and removal, and ordered comment movement.
  • Master, layout, placeholder, theme, shape, chart, media, and relationship state remains inside the native presentation engine during package edits.
  • Read speaker-note text and inspect or mutate modern comment threads.
  • Python collections with negative indexes, slices, iteration, and explicit stale-handle errors after structural changes.
  • Table cell merge and split, cell fills, margins, and borders, and row heights.
  • Table rows and columns added with table.rows.add_row() and table.columns.add_column() and removed with remove, keeping merged cells and the frame size in step.
  • Picture crop, read and written as in python-pptx.
  • Shape z-order through slide.shapes.move(from_, to).
  • Group members added through group.shapes, with the group refit to its members as in python-pptx.
  • Run hyperlinks, read, added, retargeted, and removed as in python-pptx.
  • Shape click actions, a hyperlink or a slide jump, through shape.click_action as in python-pptx.

Use it when

Use rpptx when a Python service, desktop application, or automation task needs to create, inspect, update, comment on, or render presentations locally. It is suited to generated decks, template workflows, review, and previews.

Relationship

The Python API is intentionally focused. It covers the documented rpptx surface and the reviewed python-pptx Getting Started workflows, but it is not a drop-in replacement for every python-pptx method or private lxml object.

Example

Open and inspect an existing presentation:

from rpptx import Presentation

presentation = Presentation("deck.pptx")
print(len(presentation.slides))
png = presentation.render_slide_to_png(0)
for slide in presentation.slides:
    print(slide.notes_text or "")

Type checking

The distribution includes hand-written extension stubs and a py.typed marker. Editors and type checkers can inspect concrete presentation, slide, shape, text, table, notes, and comment types.

python -m pip install mypy
python -m mypy your_application.py

The release gate validates the installed package with strict mypy and stubtest in addition to its runtime suite.

License

Licensed under either the MIT License or the Apache License 2.0, at your option.

Licensed font embedding

Use caller-owned font bytes with explicit authorization under their exact license identity. Binary readers are bounded and consumed through actual EOF.

from pathlib import Path
from rpptx import Presentation, FontEmbeddingLicense

value = Presentation()
license = FontEmbeddingLicense(authorized=True, identity="SIL Open Font License 1.1")
value.embed_font("My Face", Path("MyFace-Regular.ttf"), license=license)
value.save("embedded.pptx")
for font in value.embedded_fonts:
    print(font)
value.embed_true_type_fonts = False
value.remove_embedded_font("My Face", "regular")

Kinds are regular, bold, italic and bold_italic. Snapshots are immutable and remain readable after later native edits. Flags distinguish None, False and True, where None removes only the owned setting. Explicit caller render fonts override matching embedded faces. Unsupported imported PowerPoint formats retain original bytes with absent decoded data.

Package signatures

Presentation.sign(private_key, certificate) accepts bytes containing a PKCS#8 RSA private key and X.509 certificate as DER or single unencrypted PEM blocks. Each input is limited to1MiB. The returned ordinary dictionary reports signer identity, cryptographic validity, complete package coverage, covered parts, relationships and precise issue payloads. verify_signatures() returns a tuple of these dictionaries for current content, or an empty tuple when unsigned. Later edits can invalidate a signature. Verification preserves live handles. The certificate identity does not establish certificate-chain trust. Existing native refusals of signed input and external relationships remain in force.

Metadata

Release files for rpptx 0.14.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rpptx 0.14.2
File Size Uploaded
rpptx-0.14.2.tar.gz 6.9 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for rpptx 0.14.2
File
rpptx-0.14.2-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
rpptx-0.14.2-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details
rpptx-0.14.2-cp39-abi3-manylinux_2_28_x86_64.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-64 Details
rpptx-0.14.2-cp39-abi3-manylinux_2_28_aarch64.whl CPython 3.9 abi3 Linux glibc 2.28+ ARM64 Details
rpptx-0.14.2-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
rpptx-0.14.2-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 89.4 MB

Release files / rpptx-0.14.2.tar.gz

Download URL rpptx-0.14.2.tar.gz
Size 6.9 MB
Tags Source
SHA-256 checksum
How to use checksums
3265aa1d8fd76f9ca54bc9c7f663e1e804a38af10443b3be78907858f2f54687
BLAKE2b-256 checksum
How to use checksums
edde14d91167b2a62d0a1b24ca4c94e58ed3208dbb52b06dffe519981428bf1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / rpptx-0.14.2-cp39-abi3-win_amd64.whl

Download URL rpptx-0.14.2-cp39-abi3-win_amd64.whl
Size 14.2 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
c99c1ebf61b18f4b207d1b319bedb2cdb8934b9c598f21b9c2eb9803d93e6e9a
BLAKE2b-256 checksum
How to use checksums
c3b72fcca317bfc447ef34c35bc0cccd39b6c0ad19ab9f7e72dd93872474424a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / rpptx-0.14.2-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL rpptx-0.14.2-cp39-abi3-musllinux_1_2_x86_64.whl
Size 14.0 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
48db8186710535c21e877350c714874fc45200972dd78537007a76c417b6a122
BLAKE2b-256 checksum
How to use checksums
e16126ae75f0c06249d5d7e1ccf9daec5a31be1032781f684d8c0629c00a53c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / rpptx-0.14.2-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL rpptx-0.14.2-cp39-abi3-manylinux_2_28_x86_64.whl
Size 13.8 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
60bd2cb7a3d9af25945320d40cf6716522fe4a34353e384c6a1141c7fbb4cce3
BLAKE2b-256 checksum
How to use checksums
2b188eb568a9f362bf40f8dc7cb43c9cae0e0158eba6611ea48048c29ee058f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / rpptx-0.14.2-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL rpptx-0.14.2-cp39-abi3-manylinux_2_28_aarch64.whl
Size 13.4 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
ca7b491f37614e074a45b79672f0e50c62da5587f34fe20f447f63081304906b
BLAKE2b-256 checksum
How to use checksums
a9eabedb40c077f7adc0d0634577f520cdfed466aba1324b4915b87c5b3d7bbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / rpptx-0.14.2-cp39-abi3-macosx_11_0_arm64.whl

Download URL rpptx-0.14.2-cp39-abi3-macosx_11_0_arm64.whl
Size 13.4 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
983518baad4d217e7a0b9b941a334491c8b36fdd6f26bb16d693b567b1fd9be5
BLAKE2b-256 checksum
How to use checksums
b27117b6c6136a796815ea07fd4001637cb86c21ab2398bc2533ee832ee7ff39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / rpptx-0.14.2-cp39-abi3-macosx_10_12_x86_64.whl

Download URL rpptx-0.14.2-cp39-abi3-macosx_10_12_x86_64.whl
Size 13.6 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c5b553d30444ae5f2602b8737424c5f71e1259035197a186a9d41c91918b31ff
BLAKE2b-256 checksum
How to use checksums
bf60d2b7fe1f3b63ff5ec0444a08ac0371af2aeaddb7767f50f6b5bca7ce7a25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.14.2 This release

7 release files

0.14.1

7 release files

0.12.1

7 release files

0.11.0

7 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page