Skip to content

BatleHubYour package hub. Proxy, cache, and host.

Sit between your build tools and the internet. Cache artifacts, enforce access control, and publish private packages โ€” all from one self-hosted server.

BatleHub

Supported registries โ€‹

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.

RegistryProtocolDefault upstream
GitHubReleases, assets, tarballs, raw filesapi.github.com
npmFull packument + tarball proxyregistry.npmjs.org
CargoSparse index + .crate downloadcrates.io
OpenVSXVS Code extension VSIXopen-vsx.org
VS Code MarketplaceVS Code extension VSIX via Microsoft Gallery APImarketplace.visualstudio.com
GoGOPROXY protocol (.info, .mod, .zip)proxy.golang.org
MavenMaven Central-compatible metadata XML + JAR / POM downloadsrepo1.maven.org
TerraformProvider and module proxy protocol (v1 API)registry.terraform.io
RubyGemsGem downloads, version listing, REST info APIrubygems.org
ComposerPackagist v2 protocol (packages.json, p2 metadata, dist downloads)repo.packagist.org
PyPISimple Repository API (PEP 503/691) + JSON API; URL-rewriting for pip/uv/Poetrypypi.org
Condarepodata.json channel proxy; .conda and .tar.bz2 package downloadsconda.anaconda.org
FeatureGitHubnpmCargoOpenVSXVS CodeGoMavenTerraformRubyGemsComposerPyPIConda
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.json for noarch, linux-64, osx-64, osx-arm64, and win-64. Results are the union of versions found across all available platforms.

ยฒ Conda timestamps come from the timestamp field in repodata.json (ms since epoch). Most packages carry it; packages without one skip the gate by default. Set deny_missing_timestamp = true on the rule to block packages with no timestamp instead.

Released under the MIT License.