Skip to content

Secure Install

WolfXL is distributed through the authenticated package index at https://packages.wolfxl.com/simple/. Each paid purchase receives a unique, revocable credential.

One authenticated index

The private index contains WolfXL and its required defusedxml dependency. Use --index-url, not --extra-index-url. A second public index can introduce dependency confusion when private and public package names overlap.

Store credentials outside the command line.

POSIX systems

Create ~/.netrc with mode 0600:

machine packages.wolfxl.com
login <customer-username>
password <customer-secret>

Then run in bash, zsh, or another POSIX shell:

python -m pip install wolfxl --index-url https://packages.wolfxl.com/simple/

Windows

Create %USERPROFILE%\_netrc with access limited to the current user:

machine packages.wolfxl.com
login <customer-username>
password <customer-secret>

Then run in PowerShell:

py -m pip install wolfxl --index-url https://packages.wolfxl.com/simple/

Do not put the credential in the URL. Authenticated URLs leak through shell history, process lists, CI logs, build output, tickets, and screenshots.

Lockfiles and hashes

Resolve and install through the same approved index. Keep credentials in the credential file or secret manager, not in a committed lockfile.

POSIX shell:

python -m pip download wolfxl==<approved-version> --only-binary=:all: --dest ./wheelhouse --index-url https://packages.wolfxl.com/simple/
python -m pip hash ./wheelhouse/wolfxl-*.whl

PowerShell:

py -m pip download wolfxl==<approved-version> --only-binary=:all: --dest .\wheelhouse --index-url https://packages.wolfxl.com/simple/
py -m pip hash .\wheelhouse\wolfxl-*.whl

Compare the downloaded hash with the current release-artifact evidence before updating a lockfile. Do not reuse a hash from another Python ABI, operating system, architecture, source commit, or build.

CI and container builds

  • Store the entitlement in the CI or container platform's secret manager.
  • Materialize .netrc or _netrc only for the install step, restrict file permissions, then remove it from the ephemeral runner.
  • Never pass a token as a Docker ARG, bake it into an image layer, echo it, or print a resolved authenticated URL.
  • Use BuildKit secret mounts for Docker builds. The secret file should be read by the package client without interpolating its value into the Dockerfile command.
  • Commit lockfiles and expected artifact hashes. Never commit credential files.

Revocation and incident handling

Issue one credential per paid purchase. The commerce ledger stores its opaque username and secret digest, never the plaintext secret.

Revoke or rotate when:

  • access ends or an employee is offboarded;
  • a token appears in logs, source control, tickets, chat, screenshots, shell history, or an image layer;
  • provider access policy changes; or
  • routine credential rotation is due.

Treat a disclosed token as compromised. Revoke it before cleaning logs or Git history. Verify the revoked credential can no longer download, then issue a new credential through a separate secure channel.

Operators issue, inspect, and revoke credentials through the bundled production purchase CLI. See commerce/fulfillment-runbook.md for the confirmation gates and exact commands.

Audit boundary

pip-audit covers known public package advisories. WolfXL security reports and support requests use the private support channel supplied with the purchase; credentials must not be included in reports.