Modern software development relies on assembling dependencies rather than writing everything from scratch. But this dependency-driven approach introduces significant challenges: slow CI/CD pipelines, security vulnerabilities, and reliability issues when upstream registries fail. Virtual registries offer a solution by creating an abstraction layer that addresses these pain points while giving platform teams greater control over their artifact supply chain.
Main Insights
- Dependency downloads consume 20-40% of total CI/CD pipeline time, creating a major performance bottleneck that compounds at scale
- Virtual registries act as an intelligent caching and security layer between your CI/CD systems and artifact repositories, providing uniform behavior across all sources
- Artifact firewalls enable inline security enforcement at request time, preventing compromised dependencies from entering systems even after passing initial scans
- Hyper-localized caching and failover mechanisms protect builds from upstream outages and rate limits while reducing latency and cloud egress costs
Thijs Feryn, Technical Evangelist at Varnish Software, brings over 15 years of experience tackling web performance and scalability challenges. As a published author and speaker with more than 380 presentations across 26 countries, Feryn focuses on demonstrating how content delivery and caching principles apply to modern artifact management and platform engineering challenges.
You can watch the full discussion here if you missed it:
Understanding artifacts and the dependency challenge
In software development, an artifact is either a dependency or a product of the development process. Whether you're working with JavaScript modules, Python packages, Docker images, or Helm charts, modern applications are assembled from these building blocks rather than written entirely from scratch.
These artifacts fall into three main categories:
- Language dependencies - npm packages, Python modules, Go packages, and similar language-specific libraries
- Runtime components - Linux packages, Alpine packages, RPM and DEB packages that provide operating system level dependencies
- Infrastructure as code - Docker images, Helm charts, and orchestration materials
The challenge? Between 20 and 40% of total CI/CD pipeline time gets consumed by dependency downloads. This creates a massive bottleneck that compounds as teams scale. When you have hundreds of developers running thousands of builds daily, these delays translate into significant productivity losses and increased cloud egress costs.
What virtual registries do
A virtual registry creates a virtual layer that abstracts direct access to artifact registries. Instead of your CI/CD workers and developers pulling directly from Docker Hub, npmjs, or private registries like JFrog Artifactory, they connect through a single, consistent endpoint.
This architecture provides several immediate benefits. The virtual registry sits between your clients (GitHub Actions, GitLab CI, CircleCI, or individual developer machines) and your public and private registries. It handles routing, caching, security enforcement, and observability without requiring changes to how developers work.
As Feryn explains: "It's a single endpoint, sort of a logical one size fits all. Come in and fetch the registry kind of deal, and we provide the security and the caching and the routing and the observability there to protect you."
The key advantage is consistency. Whether you're pulling from Docker Hub, GitHub Container Registry, or your private Artifactory instance, the virtual registry provides uniform behavior and policies across all sources.
Security through artifact firewalls
Traditional artifact repository security focuses on scanning at rest - identifying vulnerabilities in stored packages and enriching them with metadata. This approach works well for understanding risk, but it doesn't control the moment of execution.
The Shy Hulud worm demonstrates why execution-time security matters. This supply chain attack targeted npm packages, infecting developer systems and harvesting credentials for GitHub, npm, AWS, GCP, and Azure. The worm then infected packages on those systems and pushed new versions to registries, propagating across thousands of installations.
"The question isn't really is the artifact risky," Feryn notes. "The real question is, is it okay to pull it in right now at this moment in time?"
Artifact firewalls address this by inspecting manifests and enforcing policies at request time. You can define rules that:
- Allow specific packages and versions explicitly
- Deny access to known vulnerable versions or version ranges
- Log usage of packages under investigation without blocking them
- Hide unapproved versions by redirecting "latest" tags to the most recent approved version
These rules let you protect the moment of execution without changing developer workflows. Rule sets can be hosted in a Git repository and pulled dynamically so policy updates apply immediately across your entire development environment.
Resilience and performance through caching
Caching stores precomputed results for later use, reducing computational and network pressure while improving performance. In the context of artifacts, this means storing dependencies locally so subsequent builds don't need to fetch them from upstream registries.
The benefits extend beyond speed. When cloud platforms experience outages - and they do - cached artifacts keep your builds running. The HTTP protocol includes built-in resilience through cache control headers. The stale-if-error directive tells caches to serve expired content when the origin is unavailable, providing automatic failover.
Hyper-localization takes this further by positioning caches as close as possible to where you need them. You might deploy a virtual registry in your office for developer machines, inside Kubernetes clusters for CI/CD workers, or across multiple regions for geographic distribution.
This distributed approach reduces blast radius. If one region experiences downtime, only that region is affected. Clustering capabilities allow multiple nodes to synchronize without pure replication, providing failover without duplicating all content everywhere.
Observability and control
Virtual registries generate extensive telemetry data that gives platform teams unprecedented visibility into their artifact supply chain. A single Docker pull generates detailed logs showing request URLs, cache hits or misses, response headers, and timing information. The system tracks over 2,800 metrics out of the box, covering everything from request counts to byte sizes to cache efficiency.
This data integrates with standard observability tools. Prometheus stores metrics, Grafana visualizes them, and Grafana Loki centralizes logs. OpenTelemetry support enables distributed tracing with artifact-specific metadata as attributes.
Observability helps platform teams understand who's pulling what, identify security risks, and enforce policies across tool chains. This visibility becomes crucial as organizations scale and need to maintain governance over increasingly complex dependency graphs.
Getting started with Orca
Varnish Software's implementation, Orca, is available as a free product with paid tiers for enterprise features. You can deploy it with a single Docker command:
docker pull varnish-software/orca
The system requires zero configuration out of the box but supports extensive customization through configuration files. Deployment options include Docker containers, Helm charts for Kubernetes, and DEB or RPM packages for bare metal installations.
Once deployed, you simply change your registry endpoints. Instead of docker pull ubuntu, you use docker pull docker.localhost/library/ubuntu. The virtual registry pulls from Docker Hub, caches the result, and serves subsequent requests from cache.
The same pattern works for npm, Go, Helm, and other package managers. Private packages work too, with authentication piggybacking on existing mechanisms while maintaining efficient caching without content duplication.
If you enjoyed this, find here more great insights and events from our Platform Engineering Community.
For more comprehensive guidance, check out the Platform Engineering Certified Architect Course and learn best practices from industry experts.
Key takeaways
- Performance bottlenecks signal the need for virtual registries - If dependency downloads consume significant CI/CD time, developer sprawl creates security risks, or cloud egress costs are climbing, you'll feel the pain that virtual registries solve. The solution becomes obvious when these issues compound at scale.
- Security enforcement must happen at execution time - Traditional repository scanning identifies vulnerabilities at rest, but artifact firewalls enforce policies when packages are pulled. This prevents compromised dependencies from entering your systems even if they pass initial scans.
- Distributed caching provides resilience and performance - Hyper-localized caches positioned close to where you need them reduce latency and protect against upstream outages. When combined with failover mechanisms, this architecture keeps builds running even during cloud platform failures.
- Observability enables informed platform decisions - Comprehensive telemetry from virtual registries helps platform teams understand usage patterns, identify security risks, and enforce policies consistently across diverse tool chains and registries. This visibility is essential for managing complex, distributed development environments.

