Virtual Registry Changelog
Here’s an overview of the latest Varnish Virtual Registry releases, describing feature additions, changes, fixes and removals per version.
Virtual Registry 0.13.1
Released: 2026-06-17
Varnish version: 6.0.18r2
Artifact Firewall version: 0.3.2
Fixed
- Pass JFrog UI requests straight through, so flows like
npm login --auth-type webare no longer misclassified as package requests and blocked.
Virtual Registry 0.13.0
Released: 2026-06-16
Varnish version: 6.0.18r2
Artifact Firewall version: 0.3.2
Added
- NuGet (V3) registry support: caching and Artifact Firewall enforcement, including under JFrog Artifactory virtual repos.
Fixed
- Enforce Artifact Firewall rules when Orca fronts a JFrog Artifactory virtual repo (npm, pypi, maven). The Artifactory path prefix previously left the firewall with incorrect package coordinates, so denied packages were allowed.
Virtual Registry 0.12.1
Released: 2026-06-13
Varnish version: 6.0.18r2
Artifact Firewall version: 0.3.2
Added
- Added Virtual Registry options
redirects.deny_unknown_hostsandredirects.extra_known_hoststo restrict/redirectzupstream hosts and transparent redirect targets to configured remotes and extras.
Fixed
- Fixed
/redirectzcache entries being keyed only on the path, so responses fetched from one upstream host could be served on requests targeting a different host at the same path.
Virtual Registry 0.12.0
Released: 2026-06-11
Varnish version: 6.0.18r2
Artifact Firewall version: 0.3.1
Added
- Added short-lived caching of GitHub GraphQL API (
POST /graphql) query responses, keyed by request body. Schema introspection queries get a longer TTL, while mutations, subscriptions, andrateLimitqueries bypass the cache. - Added
preserve_hostoption to remotes. When enabled, the original request Host header is forwarded to the remote while the connection still targets the remoteurl. Useful when a single backend routes internally on the Host. Takes precedence overpreserve_subdomain. - Added
virtual_registry.base_url, a default base URL applied to all registries that do not configure their ownbase_url. X-Forwarded-Proto: httpsfrom an upstream TLS terminator is now honored when auto-detecting the request scheme forbase_url. Varnish also setsX-Forwarded-Prototoward the remote when the inbound request was TLS or when the registry’sbase_urluseshttps://.
Changed
- ACME challenge server no longer binds to port 80.
- Requests that arrive with a non-canonical
Hostheader (a bare IPv4/IPv6 literal orlocalhost, e.g. clients reaching a node by IP or over a local tunnel) now have theirHostrewritten to the host of the applicablebase_url(registry-specific or global), so they are handled as if they had arrived at the registry’s canonical hostname.
Fixed
- Fixed config validation preventing scheme-only
base_url. - Fixed transparent redirect-follow consuming
Set-Cookieon JFrog UI and OAuth callback responses, breaking SSO login flows.
Virtual Registry 0.11.0
Released: 2026-06-03
Varnish version: 6.0.18r1
Artifact Firewall version: 0.3.1
Added
- Added support for caching Debian apt artifacts.
- Added
disable_cacheoption to disable artifact caching on a per-registry basis. - Added support for caching responses from the GitHub REST API on GitHub.com and GitHub Enterprise Server (GHES). This includes metadata endpoints, SHA-addressed git objects and source archives, and release-asset and Actions artifact downloads served via signed-blob redirects.
- Added HMAC signing of
/redirectzURL matrix parameters, emitted as an additional;sig=...matrix parameter. Enable viavirtual_registry.redirects.signing.enabled; the signing key is read from the environment variable named invirtual_registry.redirects.signing.key_env. - Added option to disable the
/redirectzendpoint entirely throughvirtual_registry.redirects.enabled. - Added Varnish Enterprise license reload when supervisor is reloaded via SIGHUP
- Bumped Artifact Firewall to 0.3.0, which adds Maven support, per-version artifact preflight blocking, ruleset persistent storage, and the ability to disable rules at runtime via the admin API. The Supervisor continues to run the firewall in
integrateddeployment mode behind Virtual Registry, and now registers manifest transformers for the NuGet and Maven ecosystems in addition to npm and PyPI. - Added top-level
otel.endpointconfiguration that setsOTEL_EXPORTER_OTLP_ENDPOINT, used by all signals when no signal-specific endpoint is configured. The OTLP SDK auto-appends/v1/<signal>for HTTP protocols.
Fixed
- Fixed default configuration values being silently lost when a user-provided YAML file set only a subset of fields in the same section.
- Fixed Artifact Firewall returning 503 when
firewall.addresswas omitted from config. - Fixed
fsnotifyon user-provided certificates so that they are reloaded when files change on disk.
Virtual Registry 0.10.0
Released: 2026-05-11
Varnish version: 6.0.17r3
Artifact Firewall version: 0.2.2
Added
- Added new Virtual Registry option
cache_req_body_limitto set the maximum request body size to buffer for cacheable POSTs (e.g. git-upload-pack). - Added Git URL cache key normalization. The URL part of Git cache keys is now lowercased and .git extension agnostic.
- Added Git request body cache key normalization. For small request bodies (<10k),
agentandsession-idtelemetry attributes are excluded from the cache key.
Changed
- Increased default request body buffer size for cacheable POSTs (e.g. git-upload-pack) from 1MB to 10MB.
Fixed
- Fixed an issue where large Git v2 POST requests would exhaust workspace and fail the transaction.
- Fixed git repository name parsing bug.
Virtual Registry 0.9.0
Released: 2026-04-21
Varnish version: 6.0.16r13
Added
- Added Supervisor packages and Orca Docker image for
arm64. - Added support for caching Git LFS objects. This includes rewriting LFS batch API download URLs to route through the Virtual Registry, where objects are cached as immutable content-addressed downloads.
- Added support for caching PHP/Composer artifacts. This includes rewriting absolute URLs in Composer manifests with the Virtual Registry
base_url, enabling caching of both dist archive downloads and source repository clones. - Added more known OCI User-Agents for pattern matching.
Changed
- URL rewrites now use matrix parameters to convey extra information about the rewritten URL. This leads to better classification and cache policy for requests to the
/redirectzendpoint. - Caching of HEAD requests from OCI clients is re-enabled. The HEAD requests are not transparently converted to GET requests, opting instead to preserve the request method and cache it separately. This works around the issue of Docker registries that give different response status for HEAD and GET requests.
- For OCI requests, increased cache TTL for the
/v2/ping endpoint to 60s. - Unsuccessful HEAD preflight requests are now restarted with GET to be able to serve a response body. Like the initial preflight request, the client Authorization header is added to the cache key of the restarted GET request.
- The preflight request for OCI manifests is now re-used by OCI blobs. This means that a single preflight request now authorizes a user for an entire image, instead of needing two.
Fixed
- Fixed an issue where a license would be considered invalid when the no_restart or shutdown date were set and did not match the expiry date.
Removed
- Stopped building new packages for Debian Bullseye and RHEL 8. There are no
arm64Varnish packages available for these distributions, and no customers currently relying on them.
Virtual Registry 0.8.3
Released: 2026-04-13
Varnish version: 6.0.16r13
Added
- Added
varnish-supervisorpackages for Debian Trixie - Added
varnish-supervisorpackages for RHEL 10
Fixed
- Fixed an issue where interrupting the supervisor during VCL loading would hang for 30 seconds before exiting.
Virtual Registry 0.8.2
Released: 2026-03-23
Varnish version: 6.0.16r13
Added
- Added
--validateflag which validates the config and exits. - Added stricter config validation.
Fixed
- Fixed missing support for custom CA server URLs.
- Fixed an issue where some parts of the configuration would ignore unknown fields instead of exiting with an error.
- Fixed an issue where NPM clients would revalidate their local manifest cache instead of using the new one sent by the Artifact Firewall.
Virtual Registry 0.8.1
Released: 2026-03-12
Varnish version: 6.0.16r13
Added
- Added preparations for Artifact Firewall becoming generally available.
Changed
- Setting
base_urlto eitherhttp://orhttps://without a domain now determines the scheme of client redirects. This is useful for deployments where the Virtual Registry is deployed behind a TLS terminating proxy, especially whenpreserve_subdomainis used for the Virtual Registry remotes.
Virtual Registry 0.8.0
Released: 2026-03-05
Varnish version: 6.0.16r12
Added
- Added Cluster option (premium).
- Added
dns_ttloption to remotes. This can be used to override the DNS resolution interval indicated by DNS records. - Added
routesoption to virtual registries. A route is a glob pattern (fnmatch) that enables more flexible registry routing, where only subdomain-based routing was available before. The subdomain routing still has the highest order of precedence, with routes being matched against the Host header in order of appearance. - Added
preserve_subdomainoption to remotes. When used, the incoming subdomain (final component) is appended to the remote Host header when fetching from the remote. The final hostname is also used for DNS and TLS SNI. - Added
readonlyoption to virtual registries. When enabled, all uploads to the virtual registry are blocked. - Added extended support for Conan artifacts.
- Added support for caching Ansible artifacts (roles and collections). This includes rewriting the
download_urlin manifests with the Virtual Registrybase_url. - Added extended support for PyPi manifests. This includes rewriting absolute manifest URLs with the Virtual Registry
base_url. - Added
preserve_manifestoption to virtual registries. When enabled,base_urlinsertion into manifests is disabled.
Fixed
- Fixed subdomain not being parsed correctly for single component Host headers with port.
- Fixed parsing of Docker distribution protocol requests not separating query parameter from manifests referenced by SHA, leading to the being marked as “must-revalidate” instead of “immutable”.
- Fixed Git v2 protocol ls-refs commands not being assigned a “resource_manifest” cache key.
Virtual Registry 0.7.1
Released: 2026-02-27
Varnish version: 6.0.16r12
Fixed
- Fixed an issue where some OCI uploads with Docker clients would fail due to an absolute POST redirect being rewritten with a different prefix than the initial challenge. This caused the Docker client to omit the Authorization header on subsequent PATCH requests, resulting in the upload being aborted with a 401 response. Absolute redirects from the registry are now rewritten as relative redirects.
- Fixed an issue where some base_url rewrites would not restore the original Host header on fetch to the remote.
Virtual Registry 0.7.0
Released: 2026-02-23
Varnish version: 6.0.16r10
Added
Added OTEL logs support via the
otel.logsconfiguration block. Logs are exported to a configurable OTLP endpoint and do not require a license.Added configurable trace sampling via the
otel.tracing.samplerconfiguration option. Supported samplers:always_on,always_off,traceidratio,parentbased_always_on,parentbased_always_off,parentbased_traceidratio. Ratio-based samplers accept anotel.tracing.sampler_argvalue between0.0and1.0.Added a cache invalidation yKeys for resource types. All objects now get a
resource_manifest,resource_packageorresource_otherkey.Added
base_urloption to the virtual registry configuration. This is used whenever the proxy needs to rewrite a response header or body to direct the client back to the virtual registry.Added policy for proxying JFrog UI.
Added
dns_ttloption to remotes. When set, this option overrides the DNS resolution interval for the remote, ignoring DNS record TTLs.
Changed
Upgraded
varnish-otelto v2.2.0, which adds trace sampling and OTEL logs support.Remote endpoints are now resolved preemptively in
vcl_backend_fetchusingutils.resolve_backend(). The Host header is explicitly set based on the remote URL Host. This should not produce a noticeable change.Improved cache policy for NPM traffic. All
/-/endpoints are now marked uncacheable. Manifests are now always marked as must-revalidate, meaning they are not cached, but coalesced and candidates for 304 revalidation and stale-if-error.Added stricter checking for undefined configuration options. This should make it easier to catch typos in the YAML config.
The
WWW-Authenticateresponse header is now transparently rewritten when it directs the client to a different domain than the effectivebase_url. The original URL is preserved and used when the client comes back to authenticate. This enables auth when the upstream registry is not directly accessible by the client.For
202 Createdresponses, theLocationheader is also rewritten in the same fashion asWWW-Authenticate. This enables OCI uploads when the upstream registry is not directly accessible by the client.
Fixed
Fixed varnish-otel failing to find Varnish shared memory when workdir is not explicitly configured.
Fixed retrying requests when the load balancer has no remaining healthy and unused backends available.
Fixed a
beresp.ttl+req.ttlinteraction that resulted in objects marked as must-revalidate not being considered for 304 revalidation and stale-if-error.Fixed an issue where OCI uploads would fail with a 404 because the registry returns different responses for HEAD and GET. HEAD requests from OCI clients are now proxied through without a lookup in cache.
Fixed IPv6 client IPs not being considered local for cache invalidation access.
Virtual Registry 0.6.3
Released: 2025-12-17
Varnish version: 6.0.16r8
Fixed
- Loosen Varnish version license restrictions to ease installation from deb and rpm packages when a new version of
varnish-plusis released. Eachvarnish-supervisorrelease targets a specific minimum version of Varnish, but it should be possible to use a newer version ofvarnish-plusthan the minimum version.
Virtual Registry 0.6.1
Released: 2025-12-01
Varnish version: 6.0.16r7
Fixed
- Fixed the version for the embedded Virtual Registry license.
Virtual Registry 0.6.2
Released: 2025-12-01
Varnish version: 6.0.16r7
Fixed
- Fixed a syntax error in the VCL.
Virtual Registry 0.6.0
Released: 2025-11-27
Varnish version: 6.0.16r7
Added
- Added support for persisted storage categories.
- Added optional
book_sizeto tune the size of persisted storage books. - Added
default_ttl,default_grace, anddefault_keepoptions for Virtual Registries to override the globalvarnish.paramswith the same name. Like the global params, these only apply to responses that don’t have an explicit cache policy orCache-Controlheader from the remote registry.
Changed
- The configuration format for
varnish.storagehas changed. While this technically a breaking change, it’s a licensed feature that has not been put in production anywhere yet. We saw this as an opportunity to do some final polish on the config format without introducing a real breaking change. - When possible, requests for package manifests are now coalesced when multiple clients request the same manifest at the same time. This can reduce repeat requests to the remote registry while always keeping the manifests fresh.
- Artifacts classified as “other” no longer share a cache namespace with artifacts classified with a specific package type. This resulted in inconsistent cache policies being applied to certain objects, giving them a longer than intended lifetime.
- Registries now have separate cache namespaces. This eliminates potential issues with staging/production setups where repositories and packages have the same name but different manifests. Objects with an immutable cache policy still share a global namespace, so cross-registry Docker layer caching will continue tow work as normal.
- Introduced Stale-If-Error for all cacheable objects, delivering stale objects in case the remote registry is unreachable or produces 5xx responses. Access control for private repositories is still maintained, relying on cached per-user, per-artifact authorization for access control.
Fixed
- Metrics export now works properly without a license.
- Several issues fixed in the
varnish.storagesubsystem. The MSE configuration should now be changed to reflect changes in the storage configuration in all cases.
Virtual Registry 0.5.0
Released: 2025-11-14
Varnish version: 6.0.16r6
Added
- Improved cache policy for PyPi.
*.whl,*.tar.gz, and*.zipobjects are now cached indefinitely while*/simple/*is explicitly treated as uncacheable.
Fixed
- Files under
/etc/varnishnow has the correctvarnishowner in Docker. - Cache invalidation yKeys for registry name and package type are now created properly.
- Private repositories are no longer treated as public when the private repository caching feature is disabled. Private repository traffic is now passed through the proxy transparently. Does not apply to public OCI repositories, they maintain the previous behavior due to the Authorization header being required.
- Improved cache policy for Maven. Most objects are now cached indefinitely while
maven-metadata.xmlis explicitly treated as uncacheable.
Virtual Registry 0.4.0
Released: 2025-11-04
Varnish version: 6.0.16r4
Added
- Initial release.