ZERO currently distributes the public runtime through GitHub Releases, the
public Homebrew tap, zero-engine on PyPI, zero-os on crates.io, and Docker
Hub getzero/zero. Docker Hub and GHCR use product image names while the
runtime remains paper-first by default. Both public container paths now have
anonymous pull and runtime smoke evidence.
The machine-readable packets are:
Schema: zero.registry_launch_packet.v1
MCP Registry schema: zero.mcp_registry_packet.v1
Regenerate and verify it with:
scripts/registry_launch_packet.py --output contracts/distribution/registry-launch.json
scripts/registry_launch_packet.py --check
scripts/mcp_registry_packet.py --output
scripts/mcp_registry_packet.py --check
scripts/mcp_registry_listing_check.py --json| Channel | State | Candidate |
|---|---|---|
| GitHub Release | published | zero-intel/zero |
| Homebrew tap | ready | zero-intel/zero |
| PyPI | published | zero-engine |
| crates.io | published | zero-os, zero-* workspace crates |
| GHCR | published | ghcr.io/zero-intel/zero |
| Docker Hub | published | getzero/zero |
| MCP Registry | listed | io.github.zero-intel/zero |
A package registry can only move from blocked to ready or published when
the release PR records:
- maintainer-controlled namespace evidence;
- tokenless or least-privilege publishing configuration;
- clean install evidence from the target channel or a staged equivalent;
- rollback, yank, delete, or deprecation procedure for that channel;
- support expectation and safety wording for paper-first operation.
The release workflow must not grow automated cargo publish or default-on
container publication steps until this packet and the release notes include
that evidence. PyPI zero-engine publication is already handled through
Trusted Publishing. crates.io publication is performed manually with a
least-privilege CRATESIO_API_TOKEN until a tokenless workflow is available.
The ZERO runtime image is published through the manual
Container Publish workflow.
The workflow builds and smokes the local image, pushes a multi-platform image,
then pulls and smokes the published tag.
Legacy authenticated evidence exists for the previous internal image name:
- Image:
ghcr.io/zero-intel/zero-paper:0.1.2 - Digest:
sha256:1a9c2f0d2388ad117157b86a70d7db1ff78653d1b9e29c9d936c55efe7666de6 - Source commit:
dcff6345320c766717d5cd95cbbf215d0506e288 - Workflow run: https://github.com/zero-intel/zero/actions/runs/25360430397
- Platforms:
linux/amd64,linux/arm64 - Smoke evidence: local image and published image both run the paper runtime
and
examples/paper-trading/run.py. - Limitation: this was an internal name and is retained only as historical
evidence. Use the product image
ghcr.io/zero-intel/zero.
Current product-image evidence:
- Image:
ghcr.io/zero-intel/zero:0.1.2 - Digest:
sha256:048728c531aa79306e8e6b3618c61e3b4a6f74d80fff6da57deabb79bae4ed7b - Workflow run: https://github.com/zero-intel/zero/actions/runs/25362037363
- Source commit:
f624f03247cb7fd0ff59dbee905017398846d8f1 - Smoke evidence: local image and published image both ran in GitHub Actions.
- Package visibility:
public. - Anonymous pull evidence: clean Docker config pulled
ghcr.io/zero-intel/zero:0.1.2. - Runtime smoke evidence: default container command and
python /app/examples/paper-trading/run.pyboth passed from the pulled image.
Public install:
docker pull ghcr.io/zero-intel/zero:0.1.2Rollback uses digest promotion:
docker buildx imagetools create \
-t ghcr.io/zero-intel/zero:latest \
ghcr.io/zero-intel/zero@sha256:<known-good-digest>If GitHub package visibility regresses, first verify the organization package creation policy allows public packages, then restore public visibility from the package settings page and repeat anonymous pull verification from a clean Docker config.
Docker Hub publication is wired into the manual
Container Publish workflow for
maximum marketplace discoverability. It is opt-in with publish_dockerhub=true.
GitHub Actions repository secrets are configured:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN
Current evidence:
- Image:
getzero/zero:0.1.2 - Digest:
sha256:d810ae677af04958a95b387e6fbc7ff15baa4d8488b26cfb76b31cc4ee300162 - Source commit:
f624f03247cb7fd0ff59dbee905017398846d8f1 - Workflow run: https://github.com/zero-intel/zero/actions/runs/25362037363
- Platforms:
linux/amd64,linux/arm64 - Anonymous pull evidence: clean Docker config pulled
getzero/zero:0.1.2. - Smoke evidence: default container command and
python /app/examples/paper-trading/run.pyboth passed from the pulled image.
Public install:
docker pull getzero/zero:0.1.2If the maintained namespace or repository changes, override the workflow inputs
dockerhub_namespace and dockerhub_repository. Future publication evidence
must record:
- namespace owner evidence;
- token scope and rotation policy;
- successful workflow run URL;
- image digest;
- anonymous
docker pullevidence from a clean machine; - rollback/deprecation command used for the tag.
The installable CLI package is zero-os because zero is already occupied on
crates.io. The binary target remains zero, so operators install and run:
cargo install zero-os
zero --versionPublished 0.1.2 workspace crates:
zero-configzero-operator-statezero-sessionzero-testkitzero-engine-clientzero-headlesszero-onboardingzero-doctorzero-commandszero-tuizero-os
Owner evidence: cargo owner --list zero-os and cargo owner --list zero-config both return squaeragent.
Rollback uses crates.io yanking, not deletion:
cargo yank --version 0.1.2 <crate-name>Yanking prevents new dependency resolution to the bad version while preserving already-built artifacts for auditability.