# 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:** 80

<div class="post-metadata">

**Author:** ![hovinen](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/hovinen/32/13059_2.png) [@hovinen](https://users.rust-lang.org/u/hovinen)\
**Post date:** [June 28, 2026, 10:39am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1620 "2026-06-28T10:39:37Z")

</div>

I wish to self-nominate [Test That!](https://crates.io/crates/test-that), a powerful test assertion library for Rust forked from GoogleTest Rust.

Test That! lets one easily write test assertions which clearly express the _intent_ of the test and then automatically generates test failure messages which provide the full context on the failure. By using composable matchers, it supports asserting on complex data structures. This all makes test failures easier to diagnose, saving time and nerves.

See also [the GitHub repository](https://github.com/hovinen/test-that).

---

<div class="post-metadata">

**Author:** ![pbkx](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/pbkx/32/52135_2.png) [@pbkx](https://users.rust-lang.org/u/pbkx)\
**Post date:** [June 29, 2026, 4:28am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1621 "2026-06-29T04:28:26Z")

</div>

I would like to self-nominate[**deconvolution**](https://github.com/pbkx/deconvolution), a comprehensive image deconvolution and restoration library. Features include known-PSF restoration, blind workflows, PSF/OTF conversion, preprocessing helpers, deterministic simulation fixtures, and support for 2D image arrays and 3D volume deconvolution. There are implementations spanning essentially every major practical deterministic deconvolution and image-restoration family (28 different deconvolution and restoration methods).

---

<div class="post-metadata">

**Author:** ![SzymonTurno](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/szymonturno/32/53106_2.png) [@SzymonTurno](https://users.rust-lang.org/u/SzymonTurno)\
**Post date:** [June 29, 2026, 10:24pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1622 "2026-06-29T22:24:30Z")

</div>

I would like to self-nominate [tiny-regex](https://crates.io/crates/tiny-regex). Small (~2.5KB) regex engine for embedded systems.

- no\_std,
- no alloc - all storage lives on stack,
- memoization to prevent catastrophic backtracking.

---

<div class="post-metadata">

**Author:** ![holovskyi](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/holovskyi/32/53117_2.png) [@holovskyi](https://users.rust-lang.org/u/holovskyi)\
**Post date:** [June 30, 2026, 9:33pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1623 "2026-06-30T21:33:44Z")

</div>

I'd like to nominate mqtt-typed-client for Crate of the Week.

It's a type-safe async MQTT client built on rumqttc. Instead of building  
topic strings with format!() and parsing them back with split('/'), you  
declare the topic shape once as a struct with #[mqtt\_topic("...")] and get a  
typed publisher, a typed subscriber that extracts the {params} for you, and  
tree-based message routing, all checked at compile time. Topic parameters  
round-trip through Display/FromStr, so they can be real types (u32, Uuid, an  
enum) rather than always String.

It's a small, focused crate that turns a class of silent runtime bugs into  
compile errors. Self-nomination, so take it with that grain of salt.  
MIT/Apache-2.0, public issue tracker, docs on docs.rs.

Repo: [GitHub - holovskyi/mqtt-typed-client: Type-safe async MQTT client for Rust. Topics as types, automatic routing and (de)serialization on top of rumqttc. · GitHub](https://github.com/holovskyi/mqtt-typed-client)

---

<div class="post-metadata">

**Author:** ![kingchenc](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/kingchenc/32/53135_2.png) [@kingchenc](https://users.rust-lang.org/u/kingchenc)\
**Post date:** [July 2, 2026, 12:10am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1624 "2026-07-02T00:10:02Z")

</div>

I'd like to self-nominate wickra - streaming-first technical indicators with a Rust core. 514 indicators, each updating in O(1) per tick, zero dependencies, and one core that drives native Python, Node and WASM bindings plus a C ABI for C, C++, C#, Go, Java and R - same numbers in every language.

GitHub: [GitHub - wickra-lib/wickra: Streaming-first technical indicators with a Rust core and Python, Node.js, WebAssembly, C ABI, .NET, Go, Java, and R bindings. 514 indicators, O(1) per-tick updates, no system dependencies. Drop-in TA-Lib replacement. · GitHub](https://github.com/wickra-lib/wickra)

Live demo (514 indicators over live Binance data, in your browser): [https://live.wickra.org](https://live.wickra.org)

---

<div class="post-metadata">

**Author:** ![burjui](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/burjui/32/7562_2.png) [@burjui](https://users.rust-lang.org/u/burjui)\
**Post date:** [July 2, 2026, 1:16pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1625 "2026-07-02T13:16:04Z")

</div>

Self-nominating [collision2](https://github.com/burjui/collision2).

It's an experiment in 2D GPU-based particle system simulation powered by [`wgpu`](https://github.com/gfx-rs/wgpu) and the awesome [`wgsl-bindgen`](https://github.com/Swoorup/wgsl-bindgen).

_Everything_ is done on the GPU: no CPU\<-\>GPU data transfer after the data is uploaded at startup.

- SDF-based rendering: 6 million particles at 60 FPS on Radeon RX 560.
- Grid-based collision broad phase, currently implemented using WGSL atomics (working on a more efficient prefix sum implementation utilising subgroup operations).
- Efficient collision narrow phase employing bitcasts and CAS loop to store f32 forces.
- Symplectic Euler integrator.
- "Black holes"! Only gravitational attraction and frame dragging (Lense-Thirring) are implemented, no Minkowsky space-time or anything like that. Check out `integrator.rs` and the corresponding `integrate.wgsl` for details.
- Zoom with mouse wheel.

> **Notes**
>
> - Grid-based broad phase assumes particles of similar sizes. Performance degrades quickly if they differ significantly. There was a BVH-based broad phase, but I removed it for now. Look up the repo history if you want to check it out.
> - The code barely has any comments, because it requires some proficiency in GPU programming and the lion's share of it is self-explanatory if you have it. And I'm lazy.
> - Simulation step is the DT constant in `main.rs`
> - Indirect dispatch is utilised where appropriate to avoid CPU\<-\>GPU data transfer.
> - Not published on crates.io since it's not a tool
> - Only tested on Manjaro Linux with RADV Vulkan driver on RX 560.
> - Definitely has bugs. If I had a dollar for each one I've found over the course of development, I could easily fund my beer-brewing hobby 😆

Any feedback is welcome, especially from GPU folks.

UPDATE: 6 million at 60 FPS only applies to rendering. Physics is nowhere near that.

---

<div class="post-metadata">

**Author:** ![athanor](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/athanor/32/53084_2.png) [@athanor](https://users.rust-lang.org/u/athanor)\
**Post date:** [July 4, 2026, 12:42pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1626 "2026-07-04T12:42:01Z")

</div>

I want to self-nominate [contnap](https://codeberg.org/slundi/contnap).

This is a daemon that wake or shutdown gracefully containers (docker and podman are supported).

It detects containers through labels so no configuration file is needed to manually list containers. So it is a zero-config discovery.

**How does it work?**

**contanap** acts as a proxy for the port keeping it open. So when the first packet comes, it is buffered until the container is ready. Once ready, **contnap** flushes the buffer to the container and bridges the connection bidirectionally.

After being idle for a period of time, the janitor stop the container with a grace period before forcing shutdown.

**Additional features**

- **lifecycle hook** (start/stop) where you can run a shell script (like mounting volume, notification, ...)
- **protocol agnostic** : works for TCP and UDP (with stateful session tracking and idle pruning)
- **group management** : you can group containers by setting a group name and if any container port is triggered it will start containers from the same group
- For HTTP containers, it can display a waiting web page while starting
- **schedule gate** to allow wake up in the time range you want
- **machine presence check** to automatically start containers when machine comes online

Behind the hood, it uses mainly `bollard` and `tokio` crates.

There are equivalent in other languages but

- Container Nursery seems to only listen for HTTP container and does not support TCP and UDP
- Sablier seems primary HTTP focused but has integration with web servers (Traefik, Caddy, Nginx) with webhook and scaling features. There is Sablier Proxy that adds TCP support.

That is why I decided to make **contnap**.

I use it at work when running tests: it starts postgres and elastic (postgres could run all the time but Elastic is eating a lot of RAM even when idle).

---

<div class="post-metadata">

**Author:** ![Schard](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/schard/32/43802_2.png) [@Schard](https://users.rust-lang.org/u/Schard)\
**Post date:** [July 5, 2026, 10:36pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1627 "2026-07-05T22:36:59Z")

</div>

I am self-nominating my `apis-saltans` project, providing a Zigbee implementation including a coordinator API.  
The most notable crates of the workspace are:

- [`apis-saltans-core`](https://crates.io/crates/apis-saltans-core) with the core Zigbee data types and traits.
- [`apis-saltans-zcl`](https://crates.io/crates/apis-saltans-zcl) with an implementation of the Zigbee Cluster Library.
- [`apis-saltans-zdp`](https://crates.io/crates/apis-saltans-zdp) with a Zigbee Device Profile implementation.
- [`apis-saltans-hw`](https://crates.io/crates/apis-saltans-hw) A generic API for implementing hardware drivers.
- [`apis-saltans-coordinator`](https://crates.io/crates/apis-saltans-coordinator) A Zigbee coordinator API.

The hardware API is currently implemented for [`EZSP`](https://crates.io/crates/ezsp) and tested successfully on a `Siliconlabs MGM210P22A`.

---

<div class="post-metadata">

**Author:** ![cmpute](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/cmpute/32/25108_2.png) [@cmpute](https://users.rust-lang.org/u/cmpute)\
**Post date:** [July 12, 2026, 6:36am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1628 "2026-07-12T06:36:18Z")

</div>

I would like to self-nominating my `dashu` crate. This is not the first time to nominate it, but last time it unfortunately didn't get enough likes.

`dashu` is a Rust-native ergonomic library set of arbitrary precision numbers. It's a full alternative to the GMP + MPFR + MPC set, and its `dashu-int` is more efficient and feature complete compared to the de-facto standard num-bigint.

Please checkout my recent post on it if you are interested in it: [Dashu is approaching v1.0: it's a full alternative to GMP+MPFR+MPC, and it's now more optimized](https://users.rust-lang.org/t/dashu-is-approaching-v1-0-its-a-full-alternative-to-gmp-mpfr-mpc-and-its-now-more-optimized/141210)

I hope the crate can obtain more attention and usage by make it mentioned in TWiR, because its v1.0 version will be landed by the end of the year. I hope I can get a good API design before commit its API as stable by v1.0.

---

<div class="post-metadata">

**Author:** ![Sorcecoder](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/sorcecoder/32/53236_2.png) [@Sorcecoder](https://users.rust-lang.org/u/Sorcecoder)\
**Post date:** [July 13, 2026, 4:11pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1629 "2026-07-13T16:11:31Z")

</div>

I would like to suggest my new [jerrycan](https://crates.io/crates/jerrycan) as the crate of the week.

It's an attempt to replace python flask but in rust and I designed it specifically with agents in mind. Would love to see what you think.

---

<div class="post-metadata">

**Author:** ![metasim](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/metasim/32/26804_2.png) [@metasim](https://users.rust-lang.org/u/metasim)\
**Post date:** [July 14, 2026, 6:43pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1630 "2026-07-14T18:43:41Z")

</div>

I'd like to nominate [`xan`](https://github.com/medialab/xan) for crate of the week. I stumbled upon it on accident, yet was impressed with the TUI-based visualizations and "jq for CSV"-type tooling.

---

<div class="post-metadata">

**Author:** ![sincekmori](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/sincekmori/32/53275_2.png) [@sincekmori](https://users.rust-lang.org/u/sincekmori)\
**Post date:** [July 17, 2026, 2:27pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1631 "2026-07-17T14:27:29Z")

</div>

I'd like to self-nominate [copycopy](https://crates.io/crates/copycopy). It turns a global Ctrl/Cmd+C+C gesture (hold the modifier, press C twice) into a capture of the clipboard content plus the foreground app info, without ever consuming a normal single copy. Works on Windows, macOS, and GNOME Wayland, where it auto-installs a tiny Shell extension because Wayland allows no background observation. I extracted it from an app I'm building so the tricky parts could stand on their own.

---

<div class="post-metadata">

**Author:** ![kleinesfilmroellchen](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/kleinesfilmroellchen/32/48336_2.png) [@kleinesfilmroellchen](https://users.rust-lang.org/u/kleinesfilmroellchen)\
**Post date:** [July 21, 2026, 11:01pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1632 "2026-07-21T23:01:49Z")

</div>

I’m self-nominating [cargo-efmt](https://codeberg.org/filmroellchen/cargo-efmt). It is a stop-gap solution for the missing [.editorconfig](https://editorconfig.org) support in `cargo fmt` and `rustfmt` that originates from [my current discussion with the rustfmt team](https://rust-lang.zulipchat.com/#narrow/channel/357797-t-rustfmt/topic/Technical.20reasons.20for.20not.20supporting.20.2Eeditorconfig) about whether such a feature might be added upstream. In either case, `cargo efmt` exists now as a functional solution: a drop-in replacement for `cargo fmt` which additionally respects (most) `.editorconfig` values for Rust files.

---

<div class="post-metadata">

**Author:** ![miro](https://avatars.discourse-cdn.com/v4/letter/m/f08c70/32.png) [@miro](https://users.rust-lang.org/u/miro)\
**Post date:** [July 22, 2026, 3:47pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1633 "2026-07-22T15:47:38Z")

</div>

another project hosted on codeberg : D

---

<div class="post-metadata">

**Author:** ![pbl-pw](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/pbl-pw/32/53369_2.png) [@pbl-pw](https://users.rust-lang.org/u/pbl-pw)\
**Post date:** [July 27, 2026, 1:28am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1634 "2026-07-27T01:28:15Z")

</div>

This post was flagged by the community and is temporarily hidden.

---

<div class="post-metadata">

**Author:** ![AnkurRathore](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/ankurrathore/32/51979_2.png) [@AnkurRathore](https://users.rust-lang.org/u/AnkurRathore)\
**Post date:** [July 27, 2026, 5:11am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1635 "2026-07-27T05:11:09Z")

</div>

I would like to nominate **swift-topomap** : a zero-dependency TUI for microarchitectural observability.

It's an interesting project because it bypasses libhwloc to resolve hardware topology natively via sysfs and uses eBPF CO-RE to map live IPC (Instructions Per Cycle) and cache metrics directly onto a physical block map of the silicon. It's also a great example of a statically-linked Rust binary bundling multiple C-libraries (libbpf, libelf, zstd) for zero-friction deployment.

Repo:[Swift topology](https://github.com/swiftlogicsystems/swifttopology)

---

<div class="post-metadata">

**Author:** ![koosha](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/koosha/32/53409_2.png) [@koosha](https://users.rust-lang.org/u/koosha)\
**Post date:** [July 29, 2026, 7:55am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1637 "2026-07-29T07:55:02Z")

</div>

I would like to self nominate [Typekin](https://crates.io/crates/typekin), it is a newtype creator, but with concept of c++'s [friend classes](https://en.wikipedia.org/wiki/Friend_class) baked in, so the constructor's validator can be fully bypassed case-by-case and what you'll get at the end in the binary is again plain integers (currently it supports integers only).

Code: [Koosha / Typekin · GitLab](https://gitlab.com/hkoosha/typekin)

I also have a non-procmacro version attemp in a private repo with mountain of commits and experimentation, but I gave up on the idea as the macro rules were turning into a turing complete rust syntax parser, and a nightmare to debug. I'll try to polish it and put in an alternate branch at some point.

---

<div class="post-metadata">

**Author:** ![roeeshoshani](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/roeeshoshani/32/53441_2.png) [@roeeshoshani](https://users.rust-lang.org/u/roeeshoshani)\
**Post date:** [July 31, 2026, 5:07pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1638 "2026-07-31T17:07:10Z")

</div>

I would like to self nominate [index\_type](https://crates.io/crates/index_type), a crate for providing strongly typed indices for collections. Prevents you from using an index to one array as an index to another array, at compile time, and provides a full ecosystem for working with such typed indices.

For example, it provides a way to iterate over ranges with custom index types (e.g `MyIndex::new(5)..=MyIndex::new(8)`). By default, in stable rust, you cannot iterate over this type. With `index_type`, you can just write `MyIndex::new(5)..=MyIndex::new(8).iter()` which gives you something you can iterate on.

Additionally, it allows you to use `NonZero` integer types as indices. This is useful since it makes `Option<MyIndex>` have the same size as `MyIndex`, which is useful if you are storing a lot of `Option<MyIndex>` objects in memory, and may also improve the performance of code that uses `Option<MyIndex>`.

Basically this crate provides you with everything you need when working with typed indices, and it is very nice to use. I personally used it in some of my own personal projects where it was very useful. I specifically found it very useful when implementing custom graph data structures and other compiler related data structures, where you have many vectors containing many objects of different types, and you have a lot of indices to those vectors in different locations in your code.

---

<div class="post-metadata">

**Author:** ![Redglyph](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/redglyph/32/27961_2.png) [@Redglyph](https://users.rust-lang.org/u/Redglyph)\
**Post date:** [July 31, 2026, 5:26pm UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1639 "2026-07-31T17:26:22Z")

</div>

Your link seems to have an issue. The direct link is apparently [https://github.com/swiftlogicsystems/swifttopology](https://github.com/swiftlogicsystems/swifttopology) instead of that Google indirection, which triggered a warning in my browser.

---

<div class="post-metadata">

**Author:** ![AnkurRathore](https://sea1.discourse-cdn.com/flex019/user_avatar/users.rust-lang.org/ankurrathore/32/51979_2.png) [@AnkurRathore](https://users.rust-lang.org/u/AnkurRathore)\
**Post date:** [August 1, 2026, 1:15am UTC](https://users.rust-lang.org/t/crate-of-the-week/2704/1640 "2026-08-01T01:15:56Z")

</div>

Thanks for pointing that out. I have fixed the link.

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

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