rusbmux is a drop-in replacement for usbmuxd, written in Rust.
It lets you communicate with Apple devices without requiring usbmuxd to be installed or running system-wide.
usbmuxd must be installed and running as a system daemon to communicate with Apple devices.
That creates friction:
- You can’t easily ship a self-contained binary
- You depend on system services you don’t control
- Cross-platform distribution becomes painful
Sometimes you just want to ship a program that just... works.
rusbmux removes the daemon dependency while staying compatible with existing tooling:
- Portable
- Can run as a daemon or non-daemon (no sockets)
- Can be Used directly as a library by existing usbmuxd clients
- No separate installation step
- Android support
- Protocol framing (encode/decode usbmux packets)
- Clean error handling
- Logging + debug mode
- Track connected devices
- Handle device unplug safely
- Support multiple devices at once
- Raw USB packet parser
- Per-connection state (sequence numbers, etc.)
- Multiplex multiple connections
- Clean connection shutdown
- Timeout handling
- Support old and new device protocol versions
- Test against multiple iOS versions
- Safe storage of pair records (on disk/on memory)
- Benchmark
- Reduce memory allocations as much as possible
- Optimize packet parsing/encoding/decoding
- ListDevices
- Connect
- Listen
- ListListeners
- ReadPairRecord
- ReadBUID
- SavePairRecord
- DeletePairRecord
- Public Rust API
- An rusbmux provider for idevice
- FFI for other languages
- Linux
- macOS
- Android
- FreeBSD
- Windows (not sure about this)
- x86_64
- 32-bit
- ARM