# Crate of the Week

**URL:** <https://users.rust-lang.org/t/crate-of-the-week/2704>\
**Category:** community\
**Created:** [September 3, 2015, 3:41pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704 "2015-09-03T15:41:37Z")\
**Posts on this page:** 20\
**Page:** 56

<div class="post-metadata">

**Author:** ![attackgoat](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/attackgoat/32/29737_2.png) [@attackgoat](https://users.rust-lang.org/u/attackgoat)\
**Post date:** [October 18, 2022, 5:35pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1115 "2022-10-18T17:35:15Z")

</div>

I'd like to nominate [Screen 13](https://github.com/attackgoat/screen-13), an easy-to-use 3D rendering library. It provides a render graph for Vulkan compute, graphic, and ray-trace shader pipelines. Includes documentation and examples!

---

<div class="post-metadata">

**Author:** ![matklad](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/matklad/32/41370_2.png) [@matklad](https://users.rust-lang.org/u/matklad)\
**Post date:** [October 19, 2022, 10:20pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1116 "2022-10-19T22:20:45Z")

</div>

I’d like to nominate [humantime — Rust date/time library // Lib.rs](https://lib.rs/crates/humantime), a zero-dependency crate to convert between SystemTime and UTC date/time without making any syscalls. If you _only_ need UTC, this is a much smaller and simpler alternative than either `time` or `chrono`.

---

<div class="post-metadata">

**Author:** ![mistodon](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/mistodon/32/7133_2.png) [@mistodon](https://users.rust-lang.org/u/mistodon)\
**Post date:** [October 20, 2022, 9:51pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1117 "2022-10-20T21:51:04Z")

</div>

I'd like to self-nominate [edres](https://docs.rs/edres/0.6.0/edres/index.html) - named because it's `serde` backwards. It takes markup files (json/toml/yaml) and generates compatible Rust structs and enums based on them.

Essentially it lets the config files be the source of truth for the data structure, while still being compile-time type-safe when you deserialize and use them. So when the schema changes, you don't have to update your code at all unless you've made a breaking change - which will fail compilation instead of breaking at runtime.

I recently overhauled the documentation, testing, and configuration - so I think it's in a nice state to show off~

---

<div class="post-metadata">

**Author:** ![Cypher1](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/cypher1/32/25393_2.png) [@Cypher1](https://users.rust-lang.org/u/Cypher1)\
**Post date:** [October 28, 2022, 4:18am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1118 "2022-10-28T04:18:03Z")

</div>

I'd like to nominate soa-derive, for making the Array of Structs to Struct of Arrays transformation far more accessible and less mentally taxing, with (often significant) performance and storage improvements!

It has a lovely benchmark, and a pretty nice API.

Link: [GitHub - lumol-org/soa-derive: Array of Struct to Struct of Array helpers in Rust](https://github.com/lumol-org/soa-derive)

---

<div class="post-metadata">

**Author:** ![musicmatze](https://avatars.discourse-cdn.com/v4/letter/m/c57346/32.png) [@musicmatze](https://users.rust-lang.org/u/musicmatze)\
**Post date:** [October 31, 2022, 7:24am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1119 "2022-10-31T07:24:43Z")

</div>

I'd like to nominate [type\_description](https://crates.io/crates/type_description) - a crate for machine-readable type descriptions that can be used for self-documenting configuration types.

---

<div class="post-metadata">

**Author:** ![dwbrite](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/dwbrite/32/30067_2.png) [@dwbrite](https://users.rust-lang.org/u/dwbrite)\
**Post date:** [November 4, 2022, 2:18pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1120 "2022-11-04T14:18:55Z")

</div>

I'd like to nominate [enum\_delegate](https://crates.io/crates/enum_delegate) - a crate that, in essence, helps you implement a trait on many types across crate boundaries, while avoiding the runtime cost of dynamic dispatch. This is especially useful for digital/audio signal processing with graphs, where nodes with different processes need to be executed under tight timing constraints.

---

<div class="post-metadata">

**Author:** ![kubycsolutions](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/kubycsolutions/32/29990_2.png) [@kubycsolutions](https://users.rust-lang.org/u/kubycsolutions)\
**Post date:** [November 4, 2022, 4:13pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1121 "2022-11-04T16:13:35Z")

</div>

Remember that some of us are newbies, and _any_ pointers to crates we should prioritize learning about are helpful, even if they're obvious to experienced users.

The problem with an open library is that there may be multiple solutions for a given problem. I haven't looked yet -- do we have a mechanism for "yes, this is the current best of breed in this area?"

---

<div class="post-metadata">

**Author:** ![jcamiel](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/jcamiel/32/24959_2.png) [@jcamiel](https://users.rust-lang.org/u/jcamiel)\
**Post date:** [November 8, 2022, 3:20am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1122 "2022-11-08T03:20:15Z")

</div>

Hi, I'd like to nominate [Hurl](https://hurl.dev) (I'm one of the maintainer) as we have released a [new 1.8.0 version](https://hurl.dev/blog/2022/11/07/announcing-hurl-1.8.0.html).

Hurl allows you to test and run HTTP requests with a plain text format and libcurl. Hurl can be used for **fetching data** , **testing HTTP** sessions and testing **XML / JSON APIs**. It is available on Linux, Mac and Windows. We use it intensively to test our Web site and APIs in a CI/CD pipeline.

---

<div class="post-metadata">

**Author:** ![kpreid](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/kpreid/32/22420_2.png) [@kpreid](https://users.rust-lang.org/u/kpreid)\
**Post date:** [November 8, 2022, 4:36am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1123 "2022-11-08T04:36:08Z")

</div>

I'd like to nominate [`async_fn_traits`](https://docs.rs/async_fn_traits/).

It allows you to straightforwardly write trait bounds for a generic function that accepts an `async fn`, without needing to introduce a second type parameter for the future. And that's all it does, defining `AsyncFn*` and blanket trait impls — no macros you need to use, or any other complication.

---

<div class="post-metadata">

**Author:** ![piotr](https://avatars.discourse-cdn.com/v4/letter/p/839c29/32.png) [@piotr](https://users.rust-lang.org/u/piotr)\
**Post date:** [November 12, 2022, 4:44am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1124 "2022-11-12T04:44:32Z")

</div>

I'd like to self-nominate [lngcnv](https://crates.io/crates/lngcnv) which is **a command-line linguistic tool**. After 6 months of work, today, I released v1.6.0. The source code has been almost completely rewritten but the program is fully backwards compatible with v1.5.1 and earlier versions released earlier this year.

lngcnv **(1)** displays the exact phonetic (not just phonemic) pronunciation of a phrase in the International Phonetic Alphabet (IPA), **(2)** translates between different (e.g., dialectal) varieties of a language, and **(3)** converts between different (e.g., regional) norms of orthography.

A word or some piece of text can be provided either **(a)** as an argument directly from the command line or **(b)** in a file, such as a hundreds of pages long book. **[(c)** a REPL mode is planned for v1.7.0 **]**

Six modern and ancient languages are currently supported, often including several dialects:

- English

- Latin

- Polish (three dialects)

- Quechua

- Spanish (five dialects)

- Tikuna (five dialects)

This includes two languages spoken by Native Americans, which I'm studying, one from the Amazon basin and one from the Andes. 😇

---

<div class="post-metadata">

**Author:** ![knutwalker](https://avatars.discourse-cdn.com/v4/letter/k/f9ae1b/32.png) [@knutwalker](https://users.rust-lang.org/u/knutwalker)\
**Post date:** [November 17, 2022, 3:20pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1125 "2022-11-17T15:20:51Z")

</div>

I partially self-nominate [graph](https://crates.io/crates/graph): A library that provides a collection of high-performant graph algorithms and an API for building your own algorithms.

It is build to support parallel algorithms on large-scale graphs with billions of nodes and edges. In addition to the Rust library, it also offers a Python extension and an Arrow Flight based RPC interface.

We just released a new version that can be used on stable, thanks to the stabilization of GATs.

The library is written by a friend of mine and myself.

---

<div class="post-metadata">

**Author:** ![JasonWei512](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/jasonwei512/32/43423_2.png) [@JasonWei512](https://users.rust-lang.org/u/JasonWei512)\
**Post date:** [November 19, 2022, 4:36am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1126 "2022-11-19T04:36:43Z")

</div>

I'd like to self-nominate [code-radio-cli](https://github.com/JasonWei512/code-radio-cli). It's a command line music radio client for [https://coderadio.freecodecamp.org](https://coderadio.freecodecamp.org) ([about](https://www.freecodecamp.org/news/code-radio-24-7/)). It supports Windows, Linux, and should work on macOS.

I listen to freeCodeCamp's Code Radio every time I want to focus when coding. It's a network music radio that plays music designed for coding, 24/7.

When I started learning Rust, I thought the fastest way to learn it is to port some programs I wrote before to Rust. I wrote a Code Radio GUI client before, so I ported it to Rust as a cool console program.

Now when I want some music while coding, I just run `code-radio` in my IDE's terminal.

![Screenshot](https://github.com/JasonWei512/code-radio-cli/raw/develop/.github/images/screenshot.jpg)

---

<div class="post-metadata">

**Author:** ![piotr](https://avatars.discourse-cdn.com/v4/letter/p/839c29/32.png) [@piotr](https://users.rust-lang.org/u/piotr)\
**Post date:** [November 24, 2022, 3:09am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1127 "2022-11-24T03:09:31Z")

</div>

Nice work, @JasonWei512 ! This is now one of my favourite crates! 😃

---

<div class="post-metadata">

**Author:** ![mmalecot](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/mmalecot/32/30657_2.png) [@mmalecot](https://users.rust-lang.org/u/mmalecot)\
**Post date:** [November 30, 2022, 11:17pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1128 "2022-11-30T23:17:52Z")

</div>

I'd like to self-nominate [file-format](https://crates.io/crates/file-format): a crate for determining binary-based file formats.

This crate mainly uses the magic number to detect the file formats.

---

<div class="post-metadata">

**Author:** ![chungquantin](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/chungquantin/32/30502_2.png) [@chungquantin](https://users.rust-lang.org/u/chungquantin)\
**Post date:** [December 1, 2022, 5:49pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1129 "2022-12-01T17:49:26Z")

</div>

I'd like to self-nominate [solomondb](https://crates.io/crates/solomondb) which is an embedded Gremlin-compatible graph database that supports multiple storage engine, currently RocksDB and Redb. The current version of **SolomonDB** allows you to work wit RocksDB or Redb using **Gremlin** query language. Hence, applying graph data structure to manage key-value pairs in those embedded storage layer.

SolomonDB embedded storage is easy to set up. You only need to identify the path where your database will be located and it's good to go.

```rust
use solomondb::Datastore;

let datastore = Datastore::new(path);
let db = Database::new(datastore.borrow());

```

SolomonDB supports GQL (Gremlin Query Language) and it does not require Gremlin Server or Apache TinkerPop to operate. You can query data on top of embedded storages. Below are examples on how to create vertices, properties and traverse to retrieve data.

```rust
// Create two new vertices with properties
let t1 = db
.traverse()
.v(1)
.add_v("person")
.property("github", "tin-snowflake")
.property("name", "Tin Chung")
.property("age", 21)
.add_v("coder")
.property("github", "chungquantin")
.property("age", 30);

// Traverse vertices which have property "github" and label "person"
let t2 = t1.clone().has_key("github").has_label("person").exec().to_list().await.unwrap();
// Traverse vertices which have property "github"
let t3 = t1.clone().has_key("github").exec().to_list().await.unwrap();
// Traverse vertices which does not have property "name"
let t4 = t1.clone().has_not("name").exec().next().await.unwrap();

```

The road map of SolomonDB will include:

- Support more storage engines, help to graph modelize the embedded storage
- Add protobuf and enable single-node mode.
- Add client libraries (Javascript / Rust) to interact with SolomonDB from client side.

The mission of **SolomonDB** is to make graph traversal become easier, aim at plug-and-play database that can run directly in client app.

---

<div class="post-metadata">

**Author:** ![exdx](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/exdx/32/30034_2.png) [@exdx](https://users.rust-lang.org/u/exdx)\
**Post date:** [December 3, 2022, 2:02pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1130 "2022-12-03T14:02:47Z")

</div>

I'd like to self-nominate [dcp](https://github.com/exdx/dcp). dcp is a container utility tool that enables you to easily extract data from a container filesystem. It has extensive documentation and has an MIT license. It is available to download via pre-built binaries and [crates.io](http://crates.io).

---

<div class="post-metadata">

**Author:** ![H2CO3](https://avatars.discourse-cdn.com/v4/letter/h/b5ac83/32.png) [@H2CO3](https://users.rust-lang.org/u/H2CO3)\
**Post date:** [December 3, 2022, 2:32pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1131 "2022-12-03T14:32:28Z")

</div>

I'd like to nominate [RustTyC](https://github.com/Schwenger/RustTyC/), which I discovered a couple years ago (but only sent a PR to recently). It's a library for general, lattice-based type checking **and** inference, and it makes writing (correct) type checkers much easier.

---

<div class="post-metadata">

**Author:** ![Tally](https://avatars.discourse-cdn.com/v4/letter/t/dbc845/32.png) [@Tally](https://users.rust-lang.org/u/Tally)\
**Post date:** [December 5, 2022, 4:06pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1132 "2022-12-05T16:06:57Z")

</div>

I'd like to nominate [zeroize](https://crates.io/crates/zeroize), which is used to overwrite sensitive memory with zeros on drop.

---

<div class="post-metadata">

**Author:** ![Lucretiel](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/lucretiel/32/13376_2.png) [@Lucretiel](https://users.rust-lang.org/u/Lucretiel)\
**Post date:** [December 8, 2022, 9:12pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1133 "2022-12-08T21:12:31Z")

</div>

I'd like to self-nominate [lazy\_format](https://docs.rs/lazy_format/latest/lazy_format/), a lazy version of `format!` for more efficient composed string formatting operations

---

<div class="post-metadata">

**Author:** ![chungquantin](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/chungquantin/32/30502_2.png) [@chungquantin](https://users.rust-lang.org/u/chungquantin)\
**Post date:** [December 10, 2022, 2:52pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1134 "2022-12-10T14:52:35Z")

</div>

I'd like to self-nomiate [Edma](https://crates.io/crates/edma), a **terminal app for embedded database management system**. It helps me a lot in manging multiple embedded databases at once, from RocksDB to Redb. The built-in bytes deserializer is so powerful and versatile.  
 ![](https://user-images.githubusercontent.com/56880684/206833658-97091acd-11c7-4b78-b08b-9ce2aeb365a8.gif)

[Previous page](https://users.rust-lang.org/t/crate-of-the-week/2704.md?page=55)

[Next page](https://users.rust-lang.org/t/crate-of-the-week/2704.md?page=57)
