Thank you for helping. pyropdf is a Python library implemented in Rust; DESIGN.md describes its foundation, and its principles F1 to F9 (section 3) bind every change.
Open an issue. For a bug, include the pyropdf and Python versions, the smallest code that shows it, and, when you can share it, the PDF. Report a vulnerability privately instead, as SECURITY.md says.
You need uv and the Rust toolchain that
rust-toolchain.toml pins (rustup installs it on first use).
git clone https://github.com/yhay81/pyropdf.git
cd pyropdf
uv syncuv sync builds the extension with maturin, and uv run rebuilds it when a
Rust source changes.
python3 tools/check.pyIt runs the Python tests, ruff, ty, rustfmt, clippy, and the Rust tests, as
CI does, and prints one line per check. python3 tools/check.py python runs
only the Python checks. The documentation site builds with:
uv run --group docs zensical build -f mkdocs.yml -s- Work from an issue, and say in it that you are taking it. Larger changes start with a discussion in the issue.
- One issue, one branch, one pull request, whose body says
Closes #<issue>and checks the issue's acceptance criteria. - Add or update tests: Python tests in
tests/are the public contract, and Rust tests cover invariants that no public API exposes. - A change that claims a performance effect commits its measurement and
script under
evidence/. - Public names need docstrings;
uv run python tools/api_reference.pyregenerates the API reference from them, and the documentation examples indocs/must run. - Write code, comments, and documentation in English; the Japanese pages in
docs/ja/translate the English ones.
Pull requests are squash-merged after review, acceptance checks, and CI on the current head pass, with review concerns resolved. The maintainer has authorized coding agents to review and merge ready pull requests without per-task approval, including their own. Explicit release gates, owner decisions, and instructions to hold a particular PR still apply. By contributing, you agree that your contribution is licensed under the MIT License.
The public API is what pyropdf.__all__ exports and the
API reference describes. A release that
only adds to it or fixes it is a patch release, such as 0.2.1 after 0.2.0.
A minor release is for a change that breaks it, such as removing or
renaming a public name or parameter, and follows a deprecation where
possible. CHANGELOG.md lists what each release holds.