Skip to main content
Version: 1.0.0

Why OCI Registries?

OCI container registries are designed for distributing container images, but their properties make them excellent for storing any kind of file.

The Problem with File Distribution​

Distributing files across environments is a solved problem, but the solutions often have drawbacks:

Object storage (S3, GCS, Azure Blob):

  • Requires separate credentials and SDKs
  • No built-in versioning semantics
  • Pull-based only, no push notifications
  • Vendor-specific APIs

Git/Git LFS:

  • Designed for source code, not binary artifacts
  • LFS requires additional setup
  • Large files strain the system
  • Clone operations download everything

FTP/SFTP:

  • Legacy authentication
  • No content addressing
  • Manual version management
  • No distribution optimization

Custom HTTP servers:

  • Build and maintain infrastructure
  • Implement authentication yourself
  • No standard tooling

Why OCI Registries Work​

Container registries solve these problems because they were designed for a similar use case: distributing large binary artifacts (container layers) reliably across the internet.

Existing Infrastructure​

Every major cloud provider runs OCI registries:

  • GitHub Container Registry (ghcr.io)
  • Docker Hub
  • Amazon ECR
  • Google Container Registry / Artifact Registry
  • Azure Container Registry
  • Self-hosted options (Harbor, Distribution)

You likely already have access to one. No new infrastructure needed.

First-Class Authentication​

Registries have robust authentication built in:

  • Token-based auth
  • OAuth integration (GitHub, Google, Azure AD)
  • Credential helpers for secure storage
  • Fine-grained access control

If you can docker push, you can blobber push. Same credentials, same permissions.

Content Addressing​

Every blob in a registry is identified by its SHA256 digest:

ghcr.io/org/config@sha256:abc123...

This provides:

  • Immutability - Content at a digest never changes
  • Integrity - Automatic verification on pull
  • Deduplication - Identical content stored once
  • Reproducibility - Reference exact versions in deployments

Versioning with Tags​

Tags provide human-readable version management:

ghcr.io/org/config:v1.0.0
ghcr.io/org/config:latest
ghcr.io/org/config:staging

Tags can be mutable (like latest) or treated as immutable (like semver tags). The underlying content is always addressable by digest.

Distribution Optimization​

Registries are built for efficient distribution:

  • Edge caching through CDNs
  • Parallel chunk downloads
  • Resume interrupted transfers
  • Geographic distribution

These optimizations happen automatically.

Trade-offs​

OCI registries aren't perfect for every use case:

Overkill for small files: If you're distributing a single 1KB config file, the OCI manifest overhead adds complexity. A simple HTTP server might be simpler.

No partial updates: Each push creates a complete new layer. You can't patch a single file in an existing image. For frequently-changing single files, consider whether this model fits.

Registry availability: Your files are only accessible when the registry is. For critical systems, consider registry replication or local caching.

Learning curve: Teams unfamiliar with container concepts need to understand references, digests, and tags.

When to Use Blobber​

Blobber makes sense when:

  • You already use container registries
  • You need versioned, immutable file distribution
  • You want the same auth for code and config
  • You're distributing to multiple environments
  • You need selective file retrieval (eStargz advantage)

Consider alternatives when:

  • Files are tiny and change constantly
  • You need real-time synchronization
  • You're in an environment without registry access

The Bigger Picture​

Using OCI registries for files follows a broader trend: leveraging container infrastructure for non-container workloads. Projects like ORAS (OCI Registry as Storage) formalize this pattern.

Blobber adds first-class eStargz support on top, enabling efficient selective retrieval that pure ORAS doesn't provide.

See Also​