"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."
"notes":"A fork of anyhow that gives you more control over the format of the generated error messages. Recommended if you need intend to present error messages to end users. Otherwise anyhow is simpler."
"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."
"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."
"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.",