Skip to content
shippy

Benchmarks

All numbers are dev (unoptimized) builds, wall clock, measured on 2026-11-13 on tempo, reth and pyramid. The short version: a new checkout goes from minutes to seconds, the first build costs a few percent more, and the edit loop gets faster from settings rather than the cache.

A new checkout, after someone has built once

cargoshippy
rethcache in memory
111.3s
4s28× faster
tempoSOURCE_DATE_EPOCH set
127.8s
5.9s22× faster
pyramid backendcache on disk, fixed place
374.7s
11.3s33× faster

A "new checkout" is a second copy at another path with an empty target directory: what a new clone, a new worktree or another agent's machine sees.

Another machine, from a shared box

The box built tempo and reth once with a trusted token. Each client started with an empty local store and target directory.

cargoshippy
tempo, 90 ms from the boxVirginia to Frankfurt
127.8s
19.1s6.7× faster
reth, 90 ms from the box
111.3s
8.4s13× faster
tempo on a 5-core Handthrough an HTTP proxy
525.4s
44.2s12× faster

Over a real link, the wire decides. One request per file moved tempo's 8.1 GB at 61 MB/s, slower than compiling. With the prefetch (16 streams, zstd), tempo's 8.7 GB went as 1.9 GB in 10.2 s.

The first build costs a little more

Targetcargo coldshippy cold
tempo127.8 s135.3 s
pyramid backend374.7 s400.8 s
reth111.3 s112.5 s

That 6 to 7% is hashing and storing about 1,000 results, and packing build-script output (rocksdb's OUT_DIR alone is 1.7 GB).

Rebuild after an edit

tempo, median of 3 runs, geometric mean of three edits that recompile 1, 4 and 15 crates.

VariantGeometric meanAgainst cargo
cargo10.05 s1.00x
shippy, default settings10.17 s0.99x
tuned, stable: wild, no debug info6.77 s1.48x
tuned, nightly: + -Zthreads=85.40 s1.86x
tuned, nightly + Cranelift for workspace crates5.33 s1.88x

The wrapper alone changes nothing on a first edit, as expected. Undoing an edit is where the cache shows: with linked outputs cached, putting the file back took cargo 3.6, 11.4 and 21.0 s, and shippy 1.3, 2.1 and 2.5 s.

Trusted and untrusted writers

tempo, one box, four people with empty machines and different checkout paths, building one after another:

WhoTokenBuildRestored from the box
aliceuntrusted158.6 s0
bobuntrusted120.9 s962
citrusted118.3 s968
caroluntrusted58.6 s1,063

The box re-ran alice's 993 compilations in its sandbox and published 991, finishing 28 s after her build. Nothing alice uploaded was served to bob: he got what the sandbox produced.

Machines

NameCPUMemoryDisk
xeonXeon Gold 6526Y, 32 threads126 GBext4 on md RAID
hand5 cores, Pyramid hosted Hand14 GBext4
box48 cores, Frankfurt377 GBtmpfs

What to do with this

  1. Use tuned settings: tune a project.
  2. Keep the store and target directories in memory, or on a filesystem with reflinks.
  3. Set SOURCE_DATE_EPOCH for dev builds of projects whose build scripts stamp the time.
  4. Leave linked outputs cached, and give the store a size that fits its disk.
  5. Put the box near the builders. The prefetch makes a far box usable (19 s across the Atlantic); a near one is 8 to 14 s.

Go deeper