Skip to content
shippy
shippy
A container yard at night under a floodlight
11-13-2026 03:14:07 AM BOX CAM 1

shippy

shippy, shippyd, shippy-warm

A shared compiler cache for cargo and rustc

Compile a crate on one machine, reuse it on all of them.

- cargo build
+ shippy build
Fresh checkout, dev build

A fresh checkout builds in seconds.

A new clone at a different path with an empty target directory, after another machine had built the same code. Same toolchain and flags in both runs.

28×
reth
111.3 s → 4.0 s · cache in memory
22×
tempo
127.8 s → 5.9 s · SOURCE_DATE_EPOCH set
33×
pyramid backend
374.7 s → 11.3 s · cache on disk
Bench log 2026-11-13
cargoshippy
reth, new checkoutcache in memory
111.3 s
4.0 s28×
tempo, new checkoutSOURCE_DATE_EPOCH set
127.8 s
5.9 s22×
pyramid backend, new checkoutcache on disk
374.7 s
11.3 s33×
tempo, another machine90 ms from a shared box
127.8 s
19.1 s6.7×
tempo, rebuild after an edittuned settings, nightly
10 s
5.4 s1.9×

The first build into an empty cache is slower than plain cargo (135.3 s against 127.8 s on tempo) because it also stores about a thousand results. All measurements

Untrusted upload
A shipping container under inspection
SANDBOX CAM 3

Uploads are checked before they are served.

An upload from an untrusted machine is only a claim. The box, the shippyd server everyone shares, compiles the same inputs again and serves its own output.

  1. Local store. shippy looks in the machine's own cache first. Switching branches or undoing an edit is usually answered here.
  2. The box. On a local miss, shippy asks the box for a verified result.
  3. Upload. Whatever was compiled locally is uploaded in the background as a claim.
  4. Verification. The box compiles the claim again from the same inputs, in a sandbox without network access, and serves only its own output.
993 claims re-run on tempo
991 published from the box's sandbox
967 byte-identical to the upload
Features
Real cargo

shippy build runs cargo build with shippy as the compiler wrapper, and the same for any other cargo command.

Content-addressed

Each result is stored under a hash of every input the compiler read. When the inputs match, the result is reused instead of compiled.

One box

shippyd is a single server that laptops, CI runners and new machines all read from and upload to.

Build scripts

Dependency build scripts, such as ones that compile C or C++ libraries, run once in the box's sandbox and are cached like any other result.

Remote compile

With SHIPPY_EXEC=auto, the box compiles a cache miss in its sandbox, and the result is available to every machine when it finishes.

Warmer

shippy-warm builds each new commit on the branches it watches, so the cache already has those results when people pull.

Try it
# install
$ cargo install --path crates/shippy

# use it in place of cargo
$ shippy build
$ shippy test -p my-crate

# connect to a shared box
$ shippy setup --remote https://box:7447 --token-file token.txt
$ shippy doctor