Skip to main content

Key Dependencies

Rust Crates​

CratePurposeVersionUsed By
nym-sdkNym mixnet client SDK (Sphinx, Loopix, SURB)1.21.6blindhop-proxy, blindhop-exit
tokioAsync runtime1.xAll crates
tokio-tungsteniteWebSocket client/server0.26blindhop-proxy, blindhop-exit
async-traitAsync trait support0.1blindhop-common
clapCLI argument parsing4.xblindhop-proxy, blindhop-exit
serde + serde_jsonJSON-RPC serialization1.xAll crates
tracingStructured logging0.1.xblindhop-proxy, blindhop-exit
anyhowError handling1.xblindhop-proxy, blindhop-exit
thiserrorError derive macros2.xblindhop-common
futures-utilStream/sink utilities0.3blindhop-proxy

Build Tooling​

ToolPurpose
cargoRust workspace build system
rustfmtCode formatting
clippyLint checking

Why These Choices?​

nym-sdk over custom Sphinx​

AspectCustom Sphinx (v1)Nym SDK (v2)
Anonymity set3 self-hosted nodes500+ production nodes
MaintenanceCustom crypto to maintainProfessionally maintained SDK
Cover trafficCustom Loopix implBuilt-in, production-tested
Network effectZero (our nodes only)Thousands of concurrent users
Audit statusUnauditedRegularly audited

tokio-tungstenite over alternatives​

  • vs. tungstenite: Tokio-native async, no manual polling
  • vs. warp/axum: Lightweight — we only need raw WebSocket, not HTTP routing

clap over alternatives​

  • vs. structopt: Merged into clap 4.x, same derive API
  • vs. manual parsing: Type-safe, generates help text, validation