One protocol. Your runtime.
rusbmux is a modern, drop-in replacement for usbmuxd, written in pure Rust — designed for portability, flexibility, and precise control over the USB communication layer.
This project is under active development.
Some features described below are incomplete or not yet implemented.
The traditional usbmuxd model assumes a system-level daemon running in the background.
That works — but it comes with trade-offs:
- Tight coupling to system services and external dependences
- You can’t easily ship a self-contained binary
- Cross-platform distribution becomes painful
rusbmux rethinks that model.
It gives you control over how the protocol runs — instead of forcing a single global daemon model.
rusbmux isn’t just a rewrite — it’s a more flexible architecture.
-
Flexible runtime model
Run it as a daemon, embed it with full ownership of the USB interface, run it in shared mode while coexisting with other clients, or run in exclusive mode where a single process locks the device while others wait. -
Drop-in compatibility
Works with existing tools that expect usbmuxd — no rewrites needed. -
Library-first design
Use it directly inside your own applications. -
Modern Rust implementation
Safer, more maintainable, and easier to extend.
-
USB communication with Apple devices
-
WiFi device connections
-
Android support
-
Can be embedded
rusbmux can be installed directly from Cargo or through the AUR on Arch Linux.
cargo install rusbmuxparu -S rusbmux-gitIf installing manually, copy the service file from the repository into systemd first:
sudo cp systemd/rusbmux.service /usr/lib/systemd/system/rusbmux.service
sudo systemctl daemon-reloadThen enable and start it:
sudo systemctl enable --now rusbmuxsudo rusbmuxLet’s be honest — this isn’t strictly better in every way yet.
-
Not as battle-tested as usbmuxd
-
Incomplete feature coverage
Some edge cases and protocol behaviors are still being implemented.