"notes":"Uses a pure-Rust implementation by default. Use feature flags to opt in to system zlib."
}]
},
{
"name":"Time & Date",
"crates":[{
"name":"time",
"notes":"The original datetime crate which was split out of std pre-rust-1.0. Preferrable if covers your needs, but it's quite limited in what it provides."
},{
"name":"chrono",
"notes":"The most comphrehensive and full-featured datetime library, but more complex because of it."
"description":"Crates that provide implementations of cryptographic algorithms. This section attempts to list the best crates for the listed algorithms, but does not intend to make recommendations for the algorithms themselves.<br />",
"subgroups":[],
"purposes":[
{
"name":"Password Hashing",
"notes":"For more algorithms, see <a href=\"https://github.com/RustCrypto/password-hashes#rustcrypto-password-hashes\">Rust Crypto Password Hashes</a>.",
"crates":[
{"name":"argon2","notes":""},
{"name":"scrypt","notes":""},
{"name":"bcrypt","notes":""}
]
},
{
"name":"General Purpose Hashing",
"notes":"For more algorithms, see <a href=\"https://github.com/RustCrypto/hashes#rustcrypto-hashes\">Rust Crypto Hashes</a>.",
"crates":[
{"name":"sha2","notes":""},
{"name":"sha1","notes":""},
{"name":"md-5","notes":""}
]
},
{
"name":"AEAD Encryption",
"notes":"For more algorithms, see <a href=\"https://github.com/RustCrypto/AEADs#rustcrypto-authenticated-encryption-with-associated-data-aead-algorithms\">Rust Crypto AEADs</a>.",
"crates":[
{"name":"aes-gcm-siv","notes":""},
{"name":"aes-gcm","notes":""},
{"name":"chacha20poly1305","notes":""}
]
},
{
"name":"RSA",
"crates":[
{"name":"rsa","notes":""}
]
},
{
"name":"Digital Signatures",
"notes":"For more algorithms, see <a href=\"https://github.com/RustCrypto/signatures#rustcrypto-signatures--\">Rust Crypto Signatures</a>.",
"crates":[
{"name":"ed25519","notes":"Use in conjunction with the ed25519-dalek crate."},
{"name":"ecdsa","notes":""},
{"name":"dsa","notes":""}
]
},
{
"name":"Certificate Formats",
"notes":"For more formats, see <a href=\"https://github.com/RustCrypto/formats#rustcrypto-formats--\">Rust Crypto Formats</a>.",
"crates":[
{"name":"der","notes":""},
{"name":"pem‑rfc7468 ","notes":""},
{"name":"pkcs8","notes":""},
{"name":"x509-cert","notes":""}
]
},
{
"name":"TLS / SSL",
"crates":[{
"name":"rustls",
"notes":"A portable pure-rust high-level implementation of TLS. Implements TLS 1.2 and higher."
},{
"name":"rust-native-tls",
"notes":"Delegates to the system TLS implementations on windows and macOS, and uses OpenSSL on linux."
},{
"name":"webpki",
"notes":"X.509 Certificate validation. Builds on top of ring."
},{
"name":"ring",
"notes":"Fork of BoringSSL. Provides cryptographic primitives for TLS/SSL"
}]
},
{
"name":"Utilities",
"crates":[{
"name":"subtle",
"notes":"Utilities for writing constant-time algorithms"
"notes":"Very similar to axum but with a quirkier API. This is a solid framework, but you should probably prefer Axum unless you particular like the API"
},{
"name":"rocket",
"notes":"Focussed on ergonomics. This is a solid framework, however development has stalled. Avoid for new projects."
}]
}
]
},
{
"slug":"websockets",
"name":"Websockets",
"description":"This section includes libraries for you to use just websockets. However note that many of the HTTP server frameworks in the section above also support websockets",
"notes":"gRPC over HTTP/2 with full support for asynchronous code. Works with tokio"
}]
}
]
}
]
},
{
"slug":"cli-tools",
"name":"CLIs",
"description":"",
"subgroups":[
{
"slug":"argument-parsing",
"name":"Argument Parsing",
"description":"See <a target=\"_blank\" href=\"https://github.com/rust-cli/argparse-benchmarks-rs\">argparse-benchmarks-rs</a> for a full comparison of the crates mentioned here and more.",
"purposes":[
{
"name":"Fully-featured",
"crates":[{
"name":"clap",
"notes":"Ergonomic, supports everything, and is fast at runtime. However compile times can be slow"
}]
},
{
"name":"Minimal",
"crates":[{
"name":"lexopt",
"notes":"Fast compile times, fast runtime, pedantic about correctness. API is less ergonomic"
},{
"name":"pico-args",
"notes":"Fast compile times, fast runtime, more lax about correctness. API is more ergonomic"
}]
}
]
},
{
"slug":"utility",
"name":"Utility",
"description":"Helpers that are often useful when implementing CLIs",
"purposes":[
{
"name":"Globbing",
"crates":[{
"name":"globset",
"notes":"High-performance globbing that allows multiple globs to be evaluated at once"
}]
},
{
"name":"Directory walking",
"crates":[{
"name":"walkdir",
"notes":"Basic recursive filesystem walking."
},{
"name":"ignore",
"notes":"Recursive filesystem walking that respects ignore files (like .gitignore)"
"notes":"See <a target=\"_blank\" href=\"https://github.com/xacrimon/conc-map-bench\">conc-map-bench</a> for comparative benchmarks of concurrent HashMaps.",
"notes":"See <a href=\"https://docs.rs/tokio/latest/tokio/sync/mpsc/index.html#communicating-between-sync-and-async-code\">communicating-between-sync-and-async-code</a> for notes on when to use async-specific channels vs general purpose channels.",