Crate Haven enforces your supply-chain policy where it can actually be enforced: at the registry. It gates what you publish and which upstream versions your builds consume. Not another scanner bolted on after the fact. Namespaces can be private for proprietary code or public for an open source community.
Self-serve. Private or public namespaces. Hosted in the EU. First gated publish in five minutes.
# .cargo/config.toml
[registries.acme]
index = "sparse+https://haven.rs/ns/acme/index/"
$ cargo publish --registry acme
Packaging acme-billing v1.4.0
Uploading acme-billing v1.4.0
Uploaded acme-billing v1.4.0 to registry `acme`
warning: held from the index: SBOM required but not attached
warning: held from the index: requires 2 attestations from distinct identities, has 0
One gate, both directions
You publish
Ship crates you can vouch for
Your namespace is the gate your own releases must clear. A publish is accepted, then held until it earns promotion. Consumers only ever resolve what passed.
Promotion thresholds: m keyless CI attestations from distinct identities, owner approvals
An SBOM on the version and clean VCS provenance before it promotes
Per-client read grants with semver ranges, enforced in the index
# .cargo/config.toml
[registries.acme]
index = "sparse+https://haven.rs/ns/acme/index/"
You depend
Depend on crates you can trust
A mirror namespace puts crates.io behind the same gate. New upstream versions are held until they pass your policy. Mirror the full catalog or only an allowlist imported from your Cargo.lock.
Cooldown on fresh releases that expires on your schedule, not the attacker's
RUSTSEC advisories hold versions at the severity levels you choose
License allowlist, and a hold when an unfamiliar publisher appears upstream
# .cargo/config.toml
[registries.acme-mirror]
index = "sparse+https://haven.rs/ns/acme-mirror/index/"
[source.crates-io]
replace-with = "acme-mirror"
Struck, inspected, stamped, stored.
Enforcement at the registry
Policy gates run the moment a crate is published. A version that fails your rules is held before any consumer can build against it.
Namespaces and grants
Each namespace is private or public, and crates live under acme::name. Per-client read grants with semver ranges decide exactly who resolves what, enforced in the index itself.
Your dependencies, through the same gate
Mirror crates.io through Haven and new upstream versions are held until they pass your rules: advisories, cooldown, license or maintainer changes. Full catalog or a vetted allowlist, one policy for every repo, no per-repo bot config.
Keyless CI attestations
CI publishes with its OIDC identity, so there are no long-lived keys to steal. Beyond trusted publishing, each release carries auditable attestations, and promotion can require m distinct ones.
SBOMs on every version
CycloneDX SBOMs, uploaded or generated, served next to the crate. License reports roll up per dependency tree.
Coordinated disclosure built in
A CVD channel with timestamped, audit-logged reports gives the 24h/72h/14d reporting cadence a place to live.
Tamper-evident audit log
Every mutation lands in a hash-chained event log, verified on every read. An out-of-band edit shows up as an alert.
Three steps to a gated registry
1
Create your org and namespaces
Sign in, name your org, claim namespaces: one to publish into, one mirroring crates.io. Each is a policy boundary.
2
Point cargo at them
One .cargo/config.toml snippet and a minted token. A single source replacement swaps crates.io for your mirror. Nothing else changes for your team.
3
Publish and depend through the gate
Every publish and every new upstream version is policy-checked, held while it dwells, and promoted when it earns its place.
Pricing
Free
€0
Three public namespaces and one private, unlimited crates and members, predefined policy gates. The forge is open.
Custom policies on the full engine, attestations, audit log export, and coordinated disclosure. Priced for your CRA obligation rather than your storage.
Every tier includes rustdoc builds, crate site hosting, SBOMs, OIDC SSO, and quarantine. Annual billing gets two months free. Running a large open source project? Talk to us. See the full plan comparison.
No registry can make attacks impossible. Runtime-gated malice defeats build-time audit, and a patient attacker defeats provenance. What Haven does is make attacks expensive, visible, and attributable, and our docs say exactly where that boundary sits.