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 twelve registry types. Every registry type can run as a pure cache (proxy mode), a fully private registry (local mode), or a hybrid of both.
| Registry | Protocol | Default upstream |
|---|---|---|
| GitHub | Releases, assets, tarballs, raw files | api.github.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 |
| Feature | GitHub | npm | Cargo | OpenVSX | VS Code | Go | Maven | Terraform | RubyGems | Composer | PyPI | Conda |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Version listing | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ ยน |
| Source archive | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Binary / extension | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Private publish | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Multi-upstream fanout | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Release age gate | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ ยฒ |
| RBAC | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
| Cache warming (version enumeration) | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ ยน |
ยน 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.