Artifact Caching
First download is fetched from upstream and stored locally or in S3. Every subsequent request is served from cache โ fast and bandwidth-free.
Sit between your build tools and the internet. Cache artifacts, enforce access control, and publish private packages โ all from one self-hosted server.
BatleHub proxies eighteen registry types. Every registry type can run as a pure cache (proxy mode), a fully private registry (local mode), or a hybrid of both โ except JetBrains, which is proxy-only.
| Registry | Protocol | Default upstream |
|---|---|---|
| GitHub | Releases, assets, tarballs, raw files | api.github.com |
| Forgejo / Gitea | Releases, assets, source archives, raw files (/api/v1) | codeberg.org |
| GitLab | Releases, release link assets, source archives (/api/v4) | gitlab.com |
| npm | Full packument + tarball proxy | registry.npmjs.org |
| Cargo | Sparse index + .crate download | crates.io |
| OpenVSX | VS Code extension VSIX | open-vsx.org |
| VS Code Marketplace | VS Code extension VSIX via Microsoft Gallery API | marketplace.visualstudio.com |
| Go | GOPROXY protocol (.info, .mod, .zip) | proxy.golang.org |
| Maven | Maven Central-compatible metadata XML + JAR / POM downloads | repo1.maven.org |
| Terraform | Provider and module proxy protocol (v1 API) | registry.terraform.io |
| RubyGems | Gem downloads, version listing, REST info API | rubygems.org |
| Composer | Packagist v2 protocol (packages.json, p2 metadata, dist downloads) | repo.packagist.org |
| PyPI | Simple Repository API (PEP 503/691) + JSON API; URL-rewriting for pip/uv/Poetry | pypi.org |
| Conda | repodata.json channel proxy; .conda and .tar.bz2 package downloads | conda.anaconda.org |
| NuGet | NuGet v3 service index, flat container metadata, .nupkg downloads and publish | api.nuget.org |
| Deb (APT) | Path-based APT repository: Packages/Release proxy + signed private hosting | โ ยณ |
| RPM (YUM/DNF) | Path-based repodata/ repository proxy + signed private hosting | โ ยณ |
| JetBrains | Path-based proxy cache for IDE installer archives | download.jetbrains.com โต |
The per-package feature matrix below covers the package-centric registries. Forgejo and GitLab behave like GitHub (proxy-only release assets). Deb, RPM, and JetBrains are path-addressed formats (last three columns, โถ): they have no per-package model, so the structural axes do not apply โ but they still get registry-level RBAC, multi-upstream fanout, and (Deb/RPM) signed private hosting.
| Feature | GitHub | npm | Cargo | OpenVSX | VS Code | Go | Maven | Terraform | RubyGems | Composer | PyPI | Conda | NuGet | Deb โถ | RPM โถ | JetBrains โถ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Version listing | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ ยน | โ | โ | โ | โ |
| Source archive | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Binary / extension | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Private publish | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Multi-upstream fanout | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Release age gate | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ ยฒ | โ | โ | โ | โ |
| RBAC | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Cache warming (version enumeration) | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ ยน | โ | โ | โ | โ |
| Explorer upstream search โด | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
ยน Conda has no dedicated per-package version listing API. BatleHub synthesises one by scanning
repodata.jsonfornoarch,linux-64,osx-64,osx-arm64, andwin-64. Results are the union of versions found across all available platforms.ยฒ Conda timestamps come from the
timestampfield inrepodata.json(ms since epoch). Most packages carry it; packages without one skip the gate by default. Setdeny_missing_timestamp = trueon the rule to block packages with no timestamp instead.ยณ Deb / RPM have no universal default upstream โ set
upstreamsexplicitly for proxy/hybrid mode. In local mode no upstream is contacted.โด Package Explorer upstream ("Not Yet Proxied") search. Go uses pkg.go.dev; PyPI is exact-name lookup; Terraform combines module search with namespace/exact provider lookup. The release proxies (GitHub/Forgejo/GitLab), VS Code Marketplace, Conda, Deb/RPM, and JetBrains have no upstream search API โ see the Package Explorer guide.
โต JetBrains is proxy-only. The default upstream (
download.jetbrains.com) serves IDE installer archives; overrideupstreamsto cache another host (e.g.plugins.jetbrains.com). IDE archives are large (~1โ1.7 GB), so raiselimits.max_artifact_size_bytes(default 500 MiB).โถ Deb, RPM, and JetBrains are path-addressed: artifacts are fetched by file path with no per-package version model, so the version/source/binary/age-gate/warming/search axes do not apply (โ). They do support multi-upstream fanout and registry-level RBAC; Deb/RPM additionally support signed private hosting (
local/hybrid), while JetBrains is proxy-only.