# 0.7 compatibility report — Python package
Status: complete for milestone scope
Milestone: [0.7](../milestones/0.7.md)
Decision: [ADR-017](../DECISIONS.md)
Design: [0.7-python-api.md](../design/0.7-python-api.md)
## Claim
Oxiland **0.7.0** ships a Pythonic PyPI package `oxiland` over the safe Rust
facade. This is **Python package usability** evidence (wheels, pytest, typing),
not C ABI parity and not Redland Python binding drop-in compatibility.
## Evidence
| ADR-017 accepted | `docs/DECISIONS.md` |
| Package layout | `python/` maturin + PyO3 cdylib (`oxiland-py`), excluded from root workspace |
| Pytest | `python/tests/` — model, I/O, SPARQL, storage/utility |
| Typing | `python/oxiland.pyi`, `py.typed`, pyright in CI |
| Examples | `python/examples/*.py` run in CI |
| Wheels | CI jobs build and install-smoke Linux/macOS/Windows wheels for CPython 3.10–3.14; release reuses those artifacts |
| User guide | `docs/users/python.md` |
## Non-goals confirmed
- No rdflib interop
- No `oxiland-capi` layering
- No Redland Python drop-in claim
- Query cancellation omitted on the Python surface
## Version alignment
Rust crate `oxiland` and PyPI `oxiland` both versioned **0.7.0**. The Rust
public API is not intentionally broken for this milestone; Python is an adapter
crate.
## Residual risks
- SPARQL result iterators are `unsendable` (GIL / Oxigraph iterator bounds).
- Transaction context managers buffer ops then apply inside one Rust
`Model::transaction` (documented).
- Full manylinux aarch64 coverage depends on runner availability in CI matrix
expansions; initial matrix covers ubuntu/macOS/windows hosts via
**maturin-action** (not cibuildwheel).
- PyPI publish for 0.7.0 is **wheels-only** (`--no-sdist`); an sdist that
vendors the path-dependent Rust crate is deferred.
- PyPI authentication uses a pending OIDC Trusted Publisher bound to
`release.yml` and the `pypi` GitHub environment.