Skip to content
linus-bergPublic

About

Collects and mirrors entire software ecosystems (npm, NuGet, PyPI, container images, Helm, Terraform, Hugging Face, Git and more) into S3 storage for air-gapped networks.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Latest commit

 

History

583 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backpack logo

Build and Publish CodeQL MIT License

Backpack: Distributed Artifact Synchronization & Mirroring Engine

Backpack is a high-performance, distributed system for people whose security teams have serious trust issues. It is engineered for those building in the quiet, isolated comfort of air-gapped bunkers who still need their 4GB of node_modules despite having zero bytes of external connectivity.

At its core, Backpack is a one-way artifact collection and tracking engine. It doesn't host repositories or serve files to your developers; instead, it acts as a tireless background harvester. It recursively resolves dependency trees for entire ecosystems (npm, NuGet, PyPI, container images, Helm, Terraform, Hugging Face, Git and more), fetches every available version, and persists them into S3-compatible storage for later transfer to your isolated environment.

Think of it as a professional-grade, recursively-obsessive digital hoarder: Backpack siphons every version and every dependency from the public internet and stuffs them into your private storage. It harvests all, presents nothing, and ensures that when the internet inevitably lets you down (or your firewall is just that good), your codebase is already stocked for the long-term survival of your builds.

How it works

  1. You add an artifact (lodash, docker.io/library/alpine, git://github.com/owner/repo, ...) in the GUI or through the API.
  2. The ecosystem's processor asks the upstream registry for every version, the files that make up each version, and the artifact's direct dependencies.
  3. Core.Gateway stores what changed in MongoDB, hands the files to Collector.Router, and sends every dependency to its processor in turn, until the whole dependency tree is known.
  4. Collectors download each file that isn't in the bucket yet, store it under <module>/<host><path>, and record it in a daily delta folder, so you know exactly what to carry across the air gap.
  5. Tracker.Scheduler re-tracks ecosystems on a schedule to pick up new versions.

Everything talks through RabbitMQ, so each ecosystem and protocol is its own small service that you deploy only if you need it.

Quick start

📖 Documentation

Understanding Backpack

Running Backpack

Extending Backpack

Every service has its own README with its queues, settings and behaviour.

🛠 Technical stack

  • Runtime: .NET 8 (C#), one container image per service.
  • Messaging: MassTransit on RabbitMQ.
  • Persistence: S3-compatible object storage (artifacts), MongoDB (artifact metadata, settings, events), Redis (per-ingest dependency tracking).
  • Observability: OpenTelemetry traces, metrics and logs over OTLP.
  • Security: any OIDC provider, an Administrator role, API keys for automation, optional approval of requests per ecosystem.

🚀 Infrastructure requirements

  • RabbitMQ with the management and delayed-message-exchange plugins (the masstransit/rabbitmq image has both).
  • S3-compatible storage: MinIO, SeaweedFS, Ceph, AWS S3, ...
  • MongoDB and Redis.
  • An OIDC provider, e.g. Keycloak.
  • A container registry, only if you mirror container images.

About

Collects and mirrors entire software ecosystems (npm, NuGet, PyPI, container images, Helm, Terraform, Hugging Face, Git and more) into S3 storage for air-gapped networks.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages