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 validatereports 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()andtable.columns.add_column()and removed withremove, 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_actionas 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.
Project links
License
Licensed under either the MIT License or the Apache License 2.0, at your option.
Metadata
Release files for rpptx 0.13.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rpptx-0.13.1.tar.gz | 6.0 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| rpptx-0.13.1-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| rpptx-0.13.1-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| rpptx-0.13.1-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| rpptx-0.13.1-cp39-abi3-manylinux_2_28_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| rpptx-0.13.1-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| rpptx-0.13.1-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 71.2 MB
Release files / rpptx-0.13.1.tar.gz
| Download URL | rpptx-0.13.1.tar.gz |
|---|---|
| Size | 6.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
49fab97aaac0892e8a9dea378379a0da5a5a3d29c22c200806d0c4f673fe17dc
|
|
BLAKE2b-256 checksum How to use checksums |
8dfd8ca1accc4c913175d7b681915e7178a2ee4d606b264b06af73c1331c2000
|
| 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 4, 2026.
Transparency logRelease files / rpptx-0.13.1-cp39-abi3-win_amd64.whl
| Download URL | rpptx-0.13.1-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 11.1 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1373db7754292051c6eefa75bc34bc9228345edeb062374604e470a4dfed966e
|
|
BLAKE2b-256 checksum How to use checksums |
95e0d1bff14c12767d8bed8a87101154689215a56971fe9adceaa0375953a61c
|
| 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 4, 2026.
Transparency logRelease files / rpptx-0.13.1-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | rpptx-0.13.1-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 11.1 MB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
d9df5d855cfa795c145efc3ceaa20adf7256ed3a0f3484fb50a80549c46897cd
|
|
BLAKE2b-256 checksum How to use checksums |
2da535dd0d3ceb224cd94cce45e215e6f29bdfef6cae0bd4bee4db2770e09a95
|
| 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 4, 2026.
Transparency logRelease files / rpptx-0.13.1-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | rpptx-0.13.1-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 10.9 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
be44e2045266d8b9d63f832282de43d5fcbf5d8a5d6bc1d869564d601519915b
|
|
BLAKE2b-256 checksum How to use checksums |
ceff4d73ea20f1ffba67350db2b3a6951f47217fc8be2034f48e09818fbffb9e
|
| 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 4, 2026.
Transparency logRelease files / rpptx-0.13.1-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | rpptx-0.13.1-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 10.7 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
6428d67619d6d17152f056a6ed6ac8742d6144206a40dbe8b0269fcb6f71be34
|
|
BLAKE2b-256 checksum How to use checksums |
50530bcc2b586117790a9d69f01f61467f64b41166e1838202aa3f7585c34b93
|
| 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 4, 2026.
Transparency logRelease files / rpptx-0.13.1-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | rpptx-0.13.1-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 10.7 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9b33e6a055c8977546bbce55de97a6919c282b711cb51b48c6fa672d7662adf1
|
|
BLAKE2b-256 checksum How to use checksums |
008ca6476e45daf6f158cf27d0b8c5cc30f599cf31dd3dde5133efa7b81359cb
|
| 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 4, 2026.
Transparency logRelease files / rpptx-0.13.1-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | rpptx-0.13.1-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 10.8 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
12bfe513a8664aa5bf6304f0d7172cf95144858a82147ba9d5f51f03bb31b6c1
|
|
BLAKE2b-256 checksum How to use checksums |
f2283034e2a817053132068b5c758db2fc0b4c905f1c988a52f13d78175e82fe
|
| 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 4, 2026.
Transparency log