Documentation

From cloud registries

The hosted registries integrate with their platform's identity and billing. That is the draw and the tax: metered storage and egress, tokens that expire mid-pipeline, and Python protocol support that lags years behind pypi.org. peryx either replaces them for Python or sits in front of them as a caching, protocol-upgrading cached index.

What their own documentation states today:

Peryx differences

Self-hosted: no per-GiB meter, no token treadmill, PEP 691/658/700 served by default, and one config file instead of domain/repository/upstream resource graphs. When the packages must stay in the cloud registry (platform IAM, compliance), keep it as the upload target and put peryx in front as a cached index: clients get caching and modern protocols; the registry keeps ownership.

Configuration mapping

RegistryIts simple URLAs a peryx cached index
CodeArtifacthttps://{domain}-{acct}.d.codeartifact.{region}.amazonaws.com/pypi/{repo}/simple/use an upstream credential helper to refresh its short-lived token
GitLabhttps://host/api/v4/projects/{id}/packages/pypi/simpleusername + password (a personal or deploy token)
Azure Artifactshttps://pkgs.dev.azure.com/{org}/{proj}/_packaging/{feed}/pypi/simple/username (any) + password (a PAT)
Google ARhttps://{loc}-python.pkg.dev/{proj}/{repo}/simple/username = "_json_key_base64" + password (the encoded service-account key)

Pitfalls

  • CodeArtifact needs credential_exec or another configured credential source that returns a fresh token before expiry.
  • Cloud IAM does not translate. Configure peryx access tokens and anonymous_read for client access.
  • Egress from the registry to peryx is still billed by the provider; the cache means you pay it once per artifact.
On this page