Show HN: Drop-in cargo replacement for offloading Rust compilation to a remote
4 months ago
8
Turbocharge your Rust workflow.
crunch seamlessly executes cargo commands on powerful remote hardware. Cut compile times and iterate faster!
Just replace cargo with crunch.
c̶a̶r̶g̶o̶crunch check
c̶a̶r̶g̶o̶crunch clippy --workspace
c̶a̶r̶g̶o̶crunch t -p sys-internals
Install Rust on a Debian-based machine
Add a crunch host to your ~/.ssh/config
Host crunch
HostName your-machine-ip
User your-machine-user
IdentityFile ~/.ssh/your-key.pem
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 5m
Ready to use crunch 🔥
What Hardware Should I Use?
I recommend prioritising fewer high performing cores over many slower cores.
As of mid-2025, I'm personally using a Hetzner AX102, which has compile times approximately equivalent to an Apple M4 Pro chip. The AX42 and AX52 are also great options.
If there is demand, I will consider selling access to managed hardware directly in the cli. Interested? Come say hi in Discord!
rust-analyzer (experimental)
Use crunch with rust-analyzer by setting rust-analyzer.check.overrideCommand to your preferred crunch command, including the --message-format=json flag.
Usage: crunch [OPTIONS] <COMMAND>...
Arguments:
<COMMAND>...
The cargo command to execute
Example: `build --release`
Options:
-e, --build-env <BUILD_ENV>
Set remote environment variables. RUST_BACKTRACE, CC, LIB, etc
[default: RUST_BACKTRACE=1]
--exclude <EXCLUDE>
Path or directory to exclude from the remote server transfer. Specify multiple entries using delimiter ','.
By default the `target` and `.git` directories are excluded.
Example: `--exclude "target,.git,cat.png,*.lock,mocks/**/*.db"`
[default: target,.git]
--post-cargo <POST_CARGO>
A command to execute on the machine after the cargo command has finished executing.
Example: `--post-cargo "cd target/release && profile my-binary"`
--copy-back <COPY_BACK>
Path or directory to sync back from the remote server after all other work has been done. Each entry should be in the format `source:destination`. Specify multiple entries using delimiter ','.
Example: `--copy-back "./target/release/cuter-cat.png:.,*.bin:~/my-bins"`
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
EXAMPLES:
crunch -e RUST_LOG=debug check --all-features --all-targets
crunch test -- --nocapture
crunch was inspired by cargo-remote, aiming to achieve the same goals but with a simpler developer experience.
Just replace cargo with crunch
Minimal configuration (just set a host in ~/.ssh/config)