Aeroflare

A Nix binary cache that stores packages as OCI images, so any container registry works as a substituter.

Year
2026
Status
active
Stack
Go, Nix, OCI

Running a Nix binary cache normally means running a server, a store, and a metadata database. Aeroflare does not. It uses container registries instead, so GitHub Container Registry or Docker Hub becomes your substituter.

How it works

One package is one OCI image. The NAR blobs are the layers. The narinfo goes in the manifest annotations. There is no separate metadata store to keep in sync.

Images are tagged with the 32-character Nix store hash. A lookup is one tag fetch. No index to build, and nothing to invalidate.

Nothing is stored locally. Aeroflare streams .nar blobs from the registry to the client and keeps no state.

Using it

A wizard sets up GitHub, GitLab, or Cloudflare Worker deployments:

nix run github:ItzEmoji/aeroflare -- init

Push takes a flake reference, a ./result symlink, or a store path. It builds first if it needs to:

nix run github:ItzEmoji/aeroflare -- push ./result
nix run github:ItzEmoji/aeroflare -- push nixpkgs#hello

There is also a run wrapper that builds and uploads in one step.

Why

Everything I build is Nix and all of it needs a cache. Paying for object storage made no sense when registries already store content-addressed blobs for free. Go keeps the binary small and the deployment boring.