Praxis keeps its dependency tree small, pinned, and auditable. This page documents the policy, the enforcement tooling, and a provenance review of every direct workspace dependency.
- Keep dependencies light. Avoid new dependencies when feasible.
- Only add dependencies with a well-established reputation: a canonical ecosystem crate, a crate from a known organization, or a crate maintained by this project's own organization.
- Declare versions in
[workspace.dependencies]only, with full three-component semver (1.2.3, never1.2or1).cargo xtask lint-depsenforces this mechanically. - Crates must come from the crates.io registry.
Git and unknown-registry sources are denied via
deny.toml(unknown-registry = "deny",unknown-git = "deny", emptyallow-git).
make audit runs both supply-chain checks; CI runs
them on every pull request.
- cargo-audit: scans
Cargo.lockagainst the RustSec advisory database for vulnerable or unsound crates. - cargo-deny: enforces the advisory, license-allowlist, duplicate-version, and source policies in deny.toml.
- cargo-machete (via
make lint): detects declared-but-unused dependencies. - cargo xtask lint-deps (via
make lint): requires three-component semver on every workspace dependency.
Accepted, documented advisory exceptions carry a
reason each. cargo-deny ignores live in deny.toml;
cargo-audit ignores live in .cargo/audit.toml. The
lists overlap but are not identical (see the lru
note below):
RUSTSEC-2025-0134(rustls-pemfile, unmaintained): transitive via the Pingora fork'spingora-rustlsonly;praxis-tlsmigrated to therustls::pki_typesPEM iterators.RUSTSEC-2026-0253(lru, unsoundpop()panic safety): transitive via the Pingora fork. Ignored only in .cargo/audit.toml;deny.toml'sunmaintained = "all"does not gateunsoundadvisories, so a cargo-deny ignore would be unused. Tracked until a fixed release is available.
Provenance of every [workspace.dependencies]
entry, grouped by origin. "Canonical ecosystem
crate" means the crate is the de-facto standard for
its niche, with an established maintainer or
organization behind it.
| Crate | Notes |
|---|---|
quixotic-plecostomus-core / -http / -proxy |
Temporary fork of Cloudflare's [Pingora] published by this project's maintainers from https://github.com/praxis-proxy/pingora; tracked for retirement on each upstream sync. |
praxis-policy (ppe) |
Policy engine facade from https://github.com/praxis-proxy/policy. |
| Crate | Notes |
|---|---|
futures |
rust-lang maintained async foundation. |
regex |
rust-lang maintained. |
rand |
rust-random organization. |
tokio, tokio-stream, tokio-util,
tokio-rustls, bytes, tracing,
tracing-subscriber, async-trait, h2, http —
all maintained under the tokio / hyperium
organizations that underpin most of async Rust.
rustls, rcgen, sha2, subtle, zeroize —
maintained by the rustls project and the RustCrypto
organization.
secrecy wraps the credentials held by the
credential_injection filter so they are not
accidentally logged and are zeroized on drop. It is
maintained by Tony Arcieri (iqlusion), author of
zeroize and much of the RustCrypto stack,
dual-licensed Apache-2.0 OR MIT, and is the
ecosystem's de-facto secret wrapper (~37M recent
downloads). It is a single-maintainer crate whose
last release was 2024-10-09; for a small,
feature-complete primitive this is low risk. Should
it go dormant, the exit is to vendor its narrow
surface: it is a thin wrapper over zeroize,
already a direct dependency.
metrics, metrics-exporter-prometheus
(metrics-rs organization); opentelemetry,
opentelemetry_sdk, opentelemetry-otlp,
tracing-opentelemetry (OpenTelemetry project);
tonic, tonic-prost (hyperium).
| Crate | Notes |
|---|---|
serde, serde_json |
dtolnay-maintained ecosystem standards. |
yaml_serde |
Drop-in continuation of the deprecated serde_yaml, maintained by The YAML Organization (https://github.com/yaml/yaml-serde, published by a YAML language co-creator). |
arc-swap, base64, chrono, clap, dashmap,
nix, notify, percent-encoding, smallvec,
thiserror, tikv-jemallocator (TiKV project),
tokio-tungstenite (tests), quote / syn
(dtolnay, dev tooling), criterion / plotters
(benchmarks), tempfile.
- Every new dependency goes through this policy at review time and gets added to the table above.
cargo audit/cargo denyrun in CI, so new advisories surface on the next pull request.- The Pingora fork subtree and the
deny.tomlexceptions are re-evaluated on each fork sync (see theskip-treenote in deny.toml).