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.

Metadata

Release files for rpptx 0.14.1

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.1
File Size Uploaded
rpptx-0.14.1.tar.gz 6.9 MB Details

Built distributions (wheels)

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

Total release size: 88.0 MB

Release files / rpptx-0.14.1.tar.gz

Download URL rpptx-0.14.1.tar.gz
Size 6.9 MB
Tags Source
SHA-256 checksum
How to use checksums
dc7caeb54ac1e061823dd1ea0abb254d0fdc68108db42ee14aa6ee0573e2928f
BLAKE2b-256 checksum
How to use checksums
dbaed87a36dd9a4e158dc7f99cc0eec216c12a041f26cd4059265eda4107ef22
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 15, 2026.

Transparency log

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

Download URL rpptx-0.14.1-cp39-abi3-win_amd64.whl
Size 13.9 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
db09b211e536b589773ea8dfd06b21ed48f39183b33229e232acd29edb7416f0
BLAKE2b-256 checksum
How to use checksums
0244f878b79e80d870ee538c95f5068d433bbbdffad94431e7ccd2e1944e7f8d
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 15, 2026.

Transparency log

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

Download URL rpptx-0.14.1-cp39-abi3-musllinux_1_2_x86_64.whl
Size 13.8 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
8b5c7e9898e14df305db02eef1cc428b25e730ccc388f6dcc4864f6d4b914f8b
BLAKE2b-256 checksum
How to use checksums
3a7a1a6a6379f5b320209d6209adbfd3a4956ac6cf885a0739558c42b48de1cd
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 15, 2026.

Transparency log

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

Download URL rpptx-0.14.1-cp39-abi3-manylinux_2_28_x86_64.whl
Size 13.6 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
242e73a9ce761d7fff9b6d2b3a168b4865263fb060643164e6fb4ead9c1eeed4
BLAKE2b-256 checksum
How to use checksums
26319caf46967ec082c432e137fd350f59770f83c20a0987c7b446e90ff41966
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 15, 2026.

Transparency log

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

Download URL rpptx-0.14.1-cp39-abi3-manylinux_2_28_aarch64.whl
Size 13.2 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
ab3000ada32d69201347e950a2f445a4879507e6cb230e6128f73a8e174d344f
BLAKE2b-256 checksum
How to use checksums
4b84f9876bd75ececa0bdbb12ab885fc1d986fdfe110050e93979550cf38bb58
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 15, 2026.

Transparency log

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

Download URL rpptx-0.14.1-cp39-abi3-macosx_11_0_arm64.whl
Size 13.2 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0a577074ad56fe437b563b184a57576d21a7da73253923beb86c3cc6494d3e9b
BLAKE2b-256 checksum
How to use checksums
089e03c218ea232eca2393ae7e9b69d89b5c48f3fc21dd701304ac169245670d
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 15, 2026.

Transparency log

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

Download URL rpptx-0.14.1-cp39-abi3-macosx_10_12_x86_64.whl
Size 13.4 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2ad442d030f65cf7a3d58cf17c1ddd690ec75a335ed648178fbb47b2399e5be7
BLAKE2b-256 checksum
How to use checksums
06ffd5c2eaaea44bebe869bc062a024afbf13254deb1f2a33babe659fb8c3616
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 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.14.2

7 release files

This release

0.14.1 This release

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