# Connector: Package registries (`package`) **Purpose**: the version streams of the software supply chain — one connector, ten registries: npm, PyPI, crates.io, RubyGems, NuGet (flat container), Packagist (p2), Hex, Go module proxy, Homebrew formulae, Docker Hub tags. A new version, a moved `latest` tag, a yanked release, a rebuilt Docker tag (same name, new digest) or a Homebrew revision bump becomes a list event on the project entity (`software_release`). **Sensor types**: REST_API, JSON. **Config**: `{ registry, name, maxItems? (50), url? }` — the API URL is derived (`registryApiUrl`), the sensor `url` is only the human page. Names: npm `@scope/pkg`, Packagist `vendor/pkg`, Go `github.com/owner/repo` (lower-cased for the proxy), Docker `library/nginx` or `owner/image`. **Normalization**: keyed list — `key = version` (+ `prerelease`, `yanked`, `digest`, `publishedAt`), plus a `latest` item whose `version` field is the registry's stable pointer; `compareFields: [version]` (`[version, digest]` for Docker Hub, `[version, revision]` for Homebrew). Sorted newest first; `extra` carries `latest`, `versionCount`, `description`. **Rate limits**: npm/PyPI/crates/RubyGems/Packagist/Hex/Go proxy/Homebrew are CDN-served and unlimited for this volume; crates.io requires a descriptive User-Agent (sent); Docker Hub anonymous API ≈ 100 req/6 h per IP → tier C/D only. High-volume packages (canary builds every commit: Next.js, React canaries) should set `llm: false` on the source or a `maxItems` cap. **Known quirks**: NuGet's gz registration endpoint returns raw gzip — the flat-container index is used instead; Homebrew exposes only the current stable version (list of one + `latest`); Go proxy `@v/list` has no dates. **Tests**: `packages/connectors/src/connectors2.test.ts`. **Verified**: 2026-09-08 on all ten registries.