#hardware #usb #driver #status #libusb

nusb

Cross-platform low-level access to USB devices in pure Rust

14 releases

0.1.13 Feb 15, 2025
0.1.12 Nov 21, 2024
0.1.10 Jul 28, 2024
0.1.7 Mar 3, 2024
0.1.1 Nov 8, 2023

#36 in Hardware support

Download history 2306/week @ 2025-01-10 2501/week @ 2025-01-17 3542/week @ 2025-01-24 4249/week @ 2025-01-31 4644/week @ 2025-02-07 4721/week @ 2025-02-14 4670/week @ 2025-02-21 4274/week @ 2025-02-28 3051/week @ 2025-03-07 3536/week @ 2025-03-14 3858/week @ 2025-03-21 3493/week @ 2025-03-28 4013/week @ 2025-04-04 3512/week @ 2025-04-11 3705/week @ 2025-04-18 3388/week @ 2025-04-25

15,178 downloads per month
Used in 45 crates (24 directly)

Apache-2.0 OR MIT

305KB
7K SLoC

nusb

A new pure-Rust library for cross-platform low-level access to USB devices.

Documentation

Compared to rusb and libusb

  • Pure Rust, no dependency on libusb or any other C library.
  • Async-first, while not requiring an async runtime like tokio or async-std. Still easily supports blocking with futures_lite::block_on.
  • No context object. You just open a device. There is a global event loop thread that is started when opening the first device.
  • Thinner layer over OS APIs, with less internal state.

Current status

  • Support for Linux, Windows, macOS, and Android
  • Device listing and descriptor parsing
  • Transfers on control, bulk and interrupt endpoints
  • Device connect / disconnect events on all platforms
  • Used by probe-rs, packetry, postcard-rpc and others, but still relatively new. Please test with your device and report issues.

License

MIT or Apache 2.0, at your option

Dependencies

~0.1–15MB
~139K SLoC