Capability matrix
peryx is a (role × ecosystem) server: every index is one of three roles paired with an
ecosystem. The matrix below covers the roles and cross-cutting features shared by every
ecosystem; a per-ecosystem list follows for the protocol features each one implements on its own.
✓ means shipping today; planned means the architecture reserves it but no driver is built yet.
Roles per ecosystem
Every ecosystem supports all three roles.
| Role | PyPI | OCI |
|---|---|---|
| cached (proxy) | ✓ | ✓ |
| hosted (uploads) | ✓ | ✓ |
| virtual (layers) | ✓ | ✓ |
Cross-cutting features per ecosystem
These features are ecosystem-neutral: the same subsystem serves every ecosystem, so the matrix tracks where a driver is wired in rather than whether the feature exists.
| Feature | PyPI | OCI |
|---|---|---|
| Read-through caching with streaming | ✓ | ✓ |
| Content-addressed artifact store | ✓ | ✓ |
| Shadowing / virtual resolve | ✓ | ✓ |
| Publish / upload API | ✓ | ✓ |
| Yank or delete | ✓ | ✓ |
| Range / partial artifact reads | ✓ | ✓ |
| Single-flight upstream fetch | ✓ | ✓ |
| Usage metrics (pages, downloads, uploads) | ✓ | ✓ |
peryx mirror sync + offline | ✓ | ✓ |
| Policy: name allow/deny + size limits | ✓ | ✓ |
| Signed webhooks | ✓ | ✓ |
| Search (find packages and images) | ✓ | ✓ |
| Web UI browse (projects/repositories, versions/tags) | ✓ | ✓ |
| Web UI archive/layer content inspection | ✓ | ✓ |
Cross-cutting subsystems that carry no per-ecosystem status (metrics transport, rate limits, logging, backup/restore, TLS) are ecosystem-neutral and apply to every index whatever its role or ecosystem.
What each ecosystem implements
The shared matrix stops at the features every ecosystem shares. Each ecosystem also implements its own wire protocol,
and those protocol features have no cross-ecosystem counterpart, so they live here rather than as n/a rows above. For
the full protocol map, see each ecosystem's standards page.
PyPI
- PEP 691 JSON and PEP 503 HTML Simple index, negotiated and canonicalized in both directions
- PEP 658/714
.metadatafast path: advertised, fetched, back-filled from wheels by byte range, and cached - PEP 592 yank markers and PEP 700
versions/size/upload-timefields - Wheel and sdist filename,
.dist-info, andPKG-INFOvalidation on upload - Wheel and sdist archive inspection in the web UI
- Policy rules for version specifiers (PEP 440), package types, and wheel tags, on top of the neutral name and size rules
- Legacy JSON API and the multipart legacy upload API
OCI
- Distribution-spec
/v2/pull and push, with byte-exact manifests addressed by their own digest - Bearer-token pull-through: peryx runs the
401+WWW-Authenticate: Bearerhandshake against upstreams - Referrers API and the
OCI-Subjectheader for attestations and signatures - Chunked and monolithic blob uploads, plus cross-repo blob mount by digest
- Tag listing with
n/lastpagination and aLinknext-page header - Single-flight blob fetch so concurrent pulls of one cached layer share one upstream transfer
- Layer tar content inspection in the web UI, listing a layer's files and previewing text members
Related
- What the roles mean: the index model
- Per-ecosystem setup: ecosystems
- The terms in one place: glossary