Crate of the Week

Since combining head and tail to get the top and bottom of a file/pipe is surprisingly difficult, a group of GitHub engineers decided to create headtail as a new open source project for fun (and because we wanted it to exist so we could use it)!

6 Likes

serde-transcode can efficiently convert between various serde-supporting formats:

5 Likes

I'm the author of humansize, a size formatting crate that already has some adoption, but I just published a 2.0 version with new features and a revised API:
https://lib.rs/crates/humansize

8 Likes

I'd like to (re-)self-nominate pci-driver, a crate for developing PCI/PCIe drivers in Rust.

1 Like

I'd like to self-nominate dlhn.
dlhn is a new serialization format, implemented using serde.
We have just released a version that fixes a critical bug.
I would like to make this known to those who are using the pre-fixed version.

[self-nomination]

HyperQueue, a runtime for ergonomic execution of programs on a distributed cluster, with built-in support for HPC systems.

3 Likes

I'd like to self-nominate emojis, which is a little crate to lookup emojis by Unicode value or gemoji shortcode. You can also iterate over all emojis, iterate over emoji skin tones, and emojis within a group.

I'd like to nominate 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!

I’d like to nominate humantime — Rust date/time library // Lib.rs, 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.

11 Likes

I'd like to self-nominate edres - 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~

11 Likes

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

3 Likes

I'd like to nominate type_description - a crate for machine-readable type descriptions that can be used for self-documenting configuration types.

2 Likes

I'd like to nominate 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.

2 Likes

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?"

Hi, I'd like to nominate Hurl (I'm one of the maintainer) as we have released a new 1.8.0 version.

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.

3 Likes

I'd like to nominate 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.

3 Likes

I'd like to self-nominate 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. :innocent:

9 Likes

I partially self-nominate 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.

19 Likes

I'd like to self-nominate code-radio-cli. It's a command line music radio client for https://coderadio.freecodecamp.org (about). 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

8 Likes

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

2 Likes