Private Registries

What you'll accomplish: Add private registries, configure auth tokens, and use scoped packages to prevent name collisions.

Multi-registry configuration

[catalog]
verify_signatures = true
default_publish_registry = "internal"

[[catalog.registries]]
name = "internal"
url = "https://packages.internal.company.com"
priority = 1
auth_token_env = "INTERNAL_REGISTRY_TOKEN"
enabled = true

[[catalog.registries]]
name = "hoziron"
url = "https://catalog.hoziron.com"
priority = 100
enabled = true

Resolution order

Non-scoped packages are queried in priority order (lowest number first). First registry with the package wins.

Scoped packages

@scope/name syntax pins a package to a specific registry:

# Only queries the "internal" registry
hoziron catalog install @internal/proprietary-claims-tool

Configure scope mappings

[catalog.scopes]
internal = "https://packages.internal.company.com"
hoziron = "https://catalog.hoziron.com"

Scope rules:

  • Scope names: lowercase alphanumeric + hyphens
  • Must be mapped in [catalog.scopes] — error if unknown scope
  • Bypasses priority-order resolution entirely
  • Prevents name collisions between registries

Auth tokens

Store registry auth tokens as environment variables:

export INTERNAL_REGISTRY_TOKEN="your-token-here"

Reference in config:

auth_token_env = "INTERNAL_REGISTRY_TOKEN"

Testing registries

# Test all configured registries
hoziron catalog registry test

# Test a specific registry
hoziron catalog registry test internal

# List configured registries
hoziron catalog registry list

Publishing to a private registry

# Explicit target
hoziron package publish ./my-package/ --registry internal

# Or use default_publish_registry
hoziron package publish ./my-package/

Next steps


Related: