Skip to content

Measure speed and size

renew’s numbers come from one machine, measured once on 2026-10-14: AMD Ryzen 9 9950X (16 cores), Linux 7.2, Rust 1.97.1, renew 0.2.1, whose code is the same as 1.0’s.

Terminal window
cargo run --release --example speed

It serves a signed manifest and a 64 MiB binary from a local port, times 100 check calls and 7 installs of the 64 MiB binary, and times 7 runs of

Terminal window
curl -fsS -o app <url> && sha256sum app && chmod 755 app

(curl 8.22, GNU coreutils 9.11) against the same server and file. It prints the medians:

check 0.47 ms
install 193 ms (332 MiB/s)
shell 225 ms (285 MiB/s)

Paired bars: updating a 64 MiB binary takes 193 ms with renew and 225 ms with curl then sha256sum, 1.2 times faster, median of 7 on a Ryzen 9 9950X over loopback HTTP

install hashes while it downloads, so the binary is read once; the usual script downloads with curl, then reads the file back with sha256sum. This is loopback HTTP, so it measures renew’s own cost, not a network: over a real network the download dominates either way, and verifying costs no extra pass. A check is two small requests and one signature check, bounded by a 3 s timeout over a real network.

Bars: an app that prints its version is 299 KiB stripped; with renew it is 2202 KiB, HTTPS included

Two copies of a small app that prints its version, one alone and one that calls check, install and restart, built for linux-x86_64 with --release and this profile:

[profile.release]
lto = true
codegen-units = 1
strip = true

They are 306,560 and 2,254,504 bytes. The difference, 1.86 MiB, is mostly HTTPS: ureq, rustls and its crypto. A cold release build of the second took 50 s on the same machine.

  • 727 lines of library code: src/ without its tests; unsafe only to call access and renamex_np on macOS.
  • 7 direct dependencies (and libc on macOS) and 44 in all: cargo tree -e normal on Linux. HTTP is ureq with rustls, the signature check is minisign-verify, and the streaming sha256 is pito-fetch’s.