Control Windows volume from Android over a secure peer-to-peer connection
Download · Project plan · Report an issue
English · Русский
Important
The project is in early testing. The current v0.2.1 prerelease fixes smooth Windows-to-Android slider interaction and excessive Android background CPU/network use; owner confirmation of both corrections remains for Stage 2 acceptance. The Windows executable is not production-signed, and the Android APK is debug-signed.
- Control the Windows master media volume from Android.
- Enable or disable Windows mute.
- Display the actual volume, mute state, and active audio output.
- Control Android media volume from Windows and display the confirmed Android volume step.
- Receive Android hardware-button volume changes in the Windows application.
- Run Android command reception only after explicit opt-in, with a persistent notification and Stop action.
- Pair a phone by scanning a short-lived, one-time QR code.
- Operate over a local network or the internet without a project-owned central backend.
- Use direct QUIC connectivity, NAT traversal, and encrypted relay fallback through iroh.
- Keep the Windows application running in the system tray when minimized or closed.
- Restore the window or terminate the process from the tray menu.
- Persist the trusted phone after a successful pairing.
flowchart LR
A[Android / Poco F5] -->|Scan QR| Q[One-time pairing ticket]
Q --> I[Secure iroh identity]
A <-->|QUIC: direct or relay| W[Windows 11 tray app]
W --> C[Windows Core Audio]
C --> V[Windows master volume and mute]
A --> M[Android AudioManager media volume]
The applications exchange Protocol Buffers messages over a dedicated iroh ALPN protocol. Each device owns a persistent cryptographic identity. A pairing ticket expires, can be consumed only once, and binds commands to a trusted peer.
Both platform artifacts are attached to the unified v0.2.1 prerelease.
- Download
RemoteVolumeController-Windows-v0.2.1-debug.exefrom the release. - Verify the SHA-256 digest shown in the release notes.
- Run the executable. If Windows SmartScreen warns about an unknown publisher, use the verified digest before choosing to run this unsigned test build.
- Allow network access if Windows Firewall prompts you.
- Select
Создать QR-кодto create a pairing QR code. - Use
Выходin the tray menu to terminate the application completely.
- On an Android 8.0+
arm64-v8adevice, downloadRemoteVolumeController-Android-v0.2.1-debug.apkfrom the same release. - Allow installations from the selected browser or file manager.
- Install the APK and grant camera and notification access.
- Select
Сканировать QR-кодand scan the QR code displayed by the Windows app. - Enable
Принимать команды для телефона; optionally enable start after reboot separately. - In HyperOS battery settings, allow the background behavior required for the 30-minute acceptance test.
- Use the phone controls in Windows; each result is the actual Android media-volume step.
- Press Minimize. The window should disappear while the process remains in the tray.
- Open the Remote Volume Controller tray menu and select
Открыть. - Close the window. It should return to the tray instead of terminating.
- Change the Windows volume from the phone while the desktop window is hidden.
- Select
Выходin the tray menu to terminate the process.
RemoteVolumeController/
├── apps/
│ ├── android/ # Kotlin, Jetpack Compose, CameraX, ML Kit
│ └── windows/ # Tauri 2, React, TypeScript
├── crates/
│ ├── p2p-core/ # iroh endpoint, pairing, trust, transport
│ ├── protocol/ # protobuf envelopes and framing
│ └── windows-audio/ # Windows Core Audio adapter
├── proto/ # shared protocol contract
├── PLAN.md # ordered stages and acceptance criteria
└── Cargo.toml # Rust workspace
- Rust 2024 and Tokio.
- iroh for QUIC, public-key addressing, hole punching, and relay fallback.
- Protocol Buffers for the shared wire protocol.
- Windows Core Audio API for master volume and mute.
- Tauri 2, React, TypeScript, and Vite for the Windows UI.
- Kotlin, Jetpack Compose, CameraX, and ML Kit for Android.
- The official
computer.iroh:iroh-androidAAR for the Android runtime.
- Rust
1.94. - Node.js and npm.
- JDK 17 or newer.
- Android SDK 35 and an Android NDK installation.
- Windows 11 to build and run the Windows audio backend.
cargo test --workspace --all-targets --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cd apps/windows/ui
npm ci
npm run build
cd ../../..
cargo build -p remote-volume-windowscd apps/android
gradlew.bat :app:check :app:assembleDebugThe debug APK is written to apps/android/app/build/outputs/apk/debug/app-debug.apk.
Stage 1 is DONE. Stage 2 functionality is implemented and accepted on a real Poco F5, including Windows-to-Android media-volume control, actual-state responses, hardware-button updates, and foreground receiving. Version v0.2.1 awaits owner confirmation of the slider and battery-use corrections before Stage 2 can become DONE.
Later planned stages are:
- Harden background operation, peer revocation, and network recovery.
- Produce signed installers and complete final acceptance.
See PLAN.md for the ordered implementation contract.
- The repository and releases exclude private identities, pairing secrets, trust stores, signing keys, and user data.
- A QR ticket has an expiry and a one-time secret.
- Commands are accepted only from a trusted peer.
- Relay traffic remains encrypted; a relay does not receive device-control keys.
The workspace metadata declares dual licensing under MIT OR Apache-2.0.
Built for a simple moment: the phone is nearby, the computer is not, and the volume should change without leaving the bed.