"notes":"De facto serialization library. Use in conjunction with sub-crates like serde_json for the specific format that you are using."
}]
},
{
"name":"Regular Expressions",
"crates":[{
"name":"regex",
"notes":"De facto regex library. Very fast, but does not support fancier features such as backtracking."
},
{
"name":"fancy_regex",
"notes":"Use if need features such as backtracking which regex doesn't support"
}]
},
{
"name":"Gzip (de)compression",
"crates":[{
"name":"flate2",
"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."
"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)"
}]
},
{
"name":"File watching",
"crates":[{
"name":"watchexec",
"notes":"Watch files or directories and execute a function when they change"
"description":"See <a target=\"_blank\" href=\"https://github.com/xacrimon/conc-map-bench\">conc-map-bench</a> for benchmarks of concurrent HashMaps.",
"purposes":[
{
"name":"Mutex",
"crates":[{
"name":"parking_lot",
"notes":"std::mutex also works fine. But Parking Lot is faster."
}]
},
{
"name":"Atomic pointer swapping",
"crates":[{
"name":"arc_swap",
"notes":"Useful for sharing data that has many readers but few writers"
}]
},
{
"name":"Concurrent HashMap",
"crates":[{
"name":"dashmap",
"notes":"The fastest for general purpose workloads"
},{
"name":"flurry",
"notes":"Particularly good for read-heavy workloads."