Skip to content

Same project. Less waiting.

Rune builds Cargo projects as they are — same manifests, lockfile, flags and plugins — with rustc directly, and adds what Cargo leaves to other tools. Your project keeps working with plain cargo, so trying it costs nothing.

changes to your project: nothing to migrate, nothing to undo
0
faster than Cargo overall, across 32 measurements
2.8×
Cargo's speed on a fresh checkout of a 25-crate workspace
108×

Everything you already have.

Rune reads your existing project and changes nothing about it. Switch back at any time — there is nothing to switch back.

Your manifests

Every compilation-relevant Cargo.toml field, workspaces and inheritance — or the same contents in a Rune.toml, if you ever want one.

Your lockfile

A Cargo-format Cargo.lock, still the source of truth: a fresh one for Rune's own workspace is byte-identical to cargo generate-lockfile's.

Your configuration

The hierarchical .cargo/config.toml, RUSTFLAGS, RUSTC_WRAPPER, rust-toolchain files, profiles, [patch] and source replacement.

Your commands

Cargo's commands and selection flags, the registry workflow from install to publish, and every cargo-<name> plugin on your PATH.

Cargo compatibility, in detail

What each does out of the box.

Most of what Rune adds exists for Cargo as separate tools. In Rune it is one binary, sharing one cache.

Compiled cratescargoKept per target directoryruneOne content-addressable store for every project, branch, profile and target
Sharing between machinescargoSeparate tools (sccache)runeA shared directory or Cairn servers; one-file bundles for CI
check after buildcargoCompiles againruneReuses what the build compiled
Two builds at oncecargoThe second waits for the first's lockruneNo lock; only the same unit is waited for
TestscargoRun after the whole buildruneStart as the first test binary links; retries, --failed, timeouts, JUnit, cached results
CoveragecargoPlugin (cargo-llvm-cov)runerune coverage
Build scripts and proc-macroscargoRun with your permissionsruneSandboxed: no network, nothing writable outside the build
AdvisoriescargoPlugin (cargo-audit)runerune audit, with the path and the fix
SBOMscargoPluginrunerune sbom: CycloneDX 1.5 or SPDX 2.3
Outdated, upgrade, unusedcargoPluginsrunerune outdated, upgrade, unused
Watch and selective CIcargoPluginsrunerune watch, rune affected

Where the time goes.

Both run the same compiler, so a cold build and a rebuild after an edit take about as long. Rune wins the moments a build tool is waited on most: finding out nothing changed, switching branches, starting fresh.

Rune's own workspace · 249 packages rune cargo
Nothing changedbuild
53 ms
225 ms
Nothing changedcheck
64 ms
234 ms
Nothing changedtest --no-run
56 ms
272 ms
Dependency treetree
9 ms
184 ms
Full build from scratch
112.5 s
122.8 s
Fresh machine, shared cache
0.65 s
full rebuild
fresh checkout
108×
switching back to a branch
34×
running the tests
9×
faster overall, 32 measurements
2.8×

Run the benchmarks yourself

Where Cargo is still ahead.

Rune targets Cargo compatibility, and the list of what it does not do yet is short — and public.

Sparse registries only

Git-based registry indexes, and replacing a source with a git source, are rejected with an explanation.

Credential providers

A plain token and cargo:token-from-stdout work; others, like OS keychains, are not implemented yet.

Windows

Linux and macOS are Rune's home. Windows builds are new and less tested.

Structured diagnostics

Replayed warnings come back as rendered text, not as structured messages.

Every known limit

Try it on your project.

Nothing to migrate and nothing to undo: your project keeps working with plain cargo.

$ curl -fsSL https://www.runepm.com/install.sh | sh