Skip to content

Development

ryjwt is a Rust extension (PyO3, built with maturin) with a thin Python layer. You need uv, Task and rustup; .python-version and rust-toolchain.toml pin the versions.

command what it does
task lint rustfmt, clippy and ruff, read-only (task rustfmt and task ruff fix what they can)
task typecheck pyright on the package, then the tests (the public interface) under mypy, ty, pyright, zuban and pyrefly
task test the tests, rebuilding the extension if the Rust changed
task licenses regenerates THIRD_PARTY_LICENSES with cargo-about, after a Cargo.lock change
task docs serves this site, rebuilding as you edit
task docs-test builds the site strictly, failing on any warning, broken link or unresolved reference

For another Python, use its own venv: UV_PROJECT_ENVIRONMENT=.venv-312 uv run --python 3.12 pytest (.venv-313 for 3.13, .venv-314t for 3.14t).

CI runs the same tasks on each supported Python. The Python examples in these pages and the README run as tests (tests/test_docs.py).

Releases

Releases use Release Please, so commits to main follow Conventional Commits (feat: …, fix: …, feat!: … for a breaking change). On each push to main, the Release workflow (.github/workflows/release.yml) keeps a release PR open. It bumps the version in Cargo.toml (the package's version comes from it) and updates CHANGELOG.md.

Merging it tags the release. The same run builds the sdist and the wheels (cp312 to cp315, cp314t and cp315t, per platform), and tests each wheel on its own Python. It publishes them to PyPI, checking by SHA-256 that they're the files tested, then deploys this site to GitHub Pages.