crunch
is a drop-in cargo
replacement for offloading Rust compilation to a remote server.
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
cargo install crunch-app
- 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
🔥
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!
Use crunch
with rust-analyzer
by setting rust-analyzer.check.overrideCommand
to your preferred crunch
command, including the --message-format=json
flag.
e.g. in VSCode, you might set
"rust-analyzer.check.overrideCommand": [
"crunch",
"check",
"--quiet",
"--workspace",
"--message-format=json",
"--all-targets",
"--all-features"
],
in your settings.json
.
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
withcrunch
- Minimal configuration (just set a host in
~/.ssh/config
)