v0.6.1266.1 MB
Apache-2.0
strict
core26
Caching proxy for apt archives, the snap store, and go modules
pkgproxy caches packages for apt, snapd, and go module clients, sharing
one listener and one persistent cache.
For apt, traffic is proxied between clients and upstream Debian/Ubuntu-style
package archives over plain HTTP. Pool package content is cached
indefinitely; suite metadata (Release/InRelease/Packages/Sources), which
archives republish regularly, is instead revalidated against the origin
and the suite's own declared hashes, with a pkgproxyctl command to evict
an entry immediately. Requests are normalized across equivalent mirrors,
so that many mirror hosts serving the same archive collapse onto a single
backing-store entry. Point apt at it with Acquire::http::Proxy (or the
httpproxy environment variable) and keep your sources.list entries naming
their real http:// mirrors. HTTPS-only apt sources still reach their real
host through a blind CONNECT tunnel (port 443 only) rather than being
cached.
For snapd, requests are relayed to the real snap store while .snap
downloads and assertions are cached, content-addressed by sha3-384 with
hash-verify-before-cache. Point snapd at it with SNAPPYFORCEAPIURL.
For go modules, pkgproxy acts as a reverse-origin GOPROXY, chaining to an
upstream module proxy (proxy.golang.org by default) on a cache miss. Point
the go command at it by setting GOPROXY.
The proxy listens on port 3142 by default and keeps its cache in the snap's
persistent data directory, so the cache survives updates. The service
starts automatically and needs no further configuration on the snap side.
Run
copy-paste-ready instructions on pointing that client at pkgproxy, or
snap, and go module traffic through it too. Run on a terminal for
human-friendly guidance, or pipe to
config directly, e.g.
Run
per-snap download/hit/revision counts and bandwidth saved, and the apt
pool files saving the most bandwidth.
one listener and one persistent cache.
For apt, traffic is proxied between clients and upstream Debian/Ubuntu-style
package archives over plain HTTP. Pool package content is cached
indefinitely; suite metadata (Release/InRelease/Packages/Sources), which
archives republish regularly, is instead revalidated against the origin
and the suite's own declared hashes, with a pkgproxyctl command to evict
an entry immediately. Requests are normalized across equivalent mirrors,
so that many mirror hosts serving the same archive collapse onto a single
backing-store entry. Point apt at it with Acquire::http::Proxy (or the
httpproxy environment variable) and keep your sources.list entries naming
their real http:// mirrors. HTTPS-only apt sources still reach their real
host through a blind CONNECT tunnel (port 443 only) rather than being
cached.
For snapd, requests are relayed to the real snap store while .snap
downloads and assertions are cached, content-addressed by sha3-384 with
hash-verify-before-cache. Point snapd at it with SNAPPYFORCEAPIURL.
For go modules, pkgproxy acts as a reverse-origin GOPROXY, chaining to an
upstream module proxy (proxy.golang.org by default) on a cache miss. Point
the go command at it by setting GOPROXY.
The proxy listens on port 3142 by default and keeps its cache in the snap's
persistent data directory, so the cache survives updates. The service
starts automatically and needs no further configuration on the snap side.
Run
pkgproxy.pkgproxyctl setup apt, setup snap, or setup go forcopy-paste-ready instructions on pointing that client at pkgproxy, or
setup lxd to configure an LXD profile so containers route their apt,snap, and go module traffic through it too. Run on a terminal for
human-friendly guidance, or pipe to
sh for a one-liner that applies theconfig directly, e.g.
pkgproxy.pkgproxyctl setup apt | sh.Run
pkgproxy.pkgproxyctl stats to see what the cache is actually doing:per-snap download/hit/revision counts and bandwidth saved, and the apt
pool files saving the most bandwidth.
Update History
v0.6.0 (24) → v0.6.1 (26)13 Sept 2026, 17:15 UTC
v0.5.1 (20) → v0.6.0 (24)2 Sept 2026, 07:00 UTC
v0.5.0 (18) → v0.5.1 (20)25 Aug 2026, 19:15 UTC
v0.2.1 (11) → v0.5.0 (18)25 Aug 2026, 11:30 UTC
v0.2.0 (9) → v0.2.1 (11)24 Aug 2026, 08:00 UTC
v0.1.0 (6) → v0.2.0 (9)20 Aug 2026, 07:00 UTC
0+git13.a6eb447 (4) → v0.1.0 (6)19 Aug 2026, 13:30 UTC
0+git13.a6eb447 3 → 419 Aug 2026, 12:15 UTC
0+git13.a6eb447 (3)19 Aug 2026, 09:15 UTC
19 Aug 2026, 08:45 UTC
13 Sept 2026, 16:50 UTC
19 Aug 2026, 09:15 UTC