Low latency virtual gamepad — built with Kotlin and Jetpack Compose
PadConnect lets your phone act as a real controller (Xbox 360/DualShock4) for a PC. It streams gamepad input with very low latency and exposes it on Windows using ViGEm.
This project is split into two parts:
- PadConnect → Android / client app (virtual controller UI)
- PadConnectReceiver → Windows / receiver app (creates virtual controller)
- Xbox 360(working)/DualShock4(soon) compatible virtual controller
- Low latency input streaming (UDP based)
- Built with Kotlin
- UI powered by Jetpack Compose
- Windows receiver using ViGEm
- Supports buttons, triggers, sticks, and D-Pad
- Works over local Wi-Fi (no internet required)
[ Android Phone ] ── UDP ──▶ [ PadConnectReceiver (Windows) ] ──▶ [ ViGEm ] ──▶ Game
-
PadConnect (Android)
- Renders a virtual controller using Compose
- Captures button / axis input
- Serializes input events
- Sends them over UDP
-
PadConnectReceiver (Windows)
- Listens for incoming UDP packets
- Deserializes controller events
- Feeds them into ViGEm
- Exposes a virtual Xbox 360(working)/DualShock4(soon) controller to the OS
Games see it as a real controller.
- Kotlin + Jetpack Compose
- UDP networking
- Touch → Gamepad mapping
PadConnectReceiver (Server)
- Kotlin Multiplatform (KMP)/JVM
- ViGEm (Virtual Gamepad Emulation Framework)
- Xbox 360(working)/DualShock4(soon) device emulation
- Android 8.0+
- Wi-Fi connection
- Windows 10 / 11
- ViGEmBus Driver installed
- .NET / JVM compatible environment (depending on receiver build)
Download and install ViGEmBus:
- Official ViGEm GitHub release
Reboot after installation.
PadConnectReceiver.exe- Starts listening on UDP
- Creates a virtual controller
- Install the app on your phone
- Create a layout
- Start playing
- Buttons: A / B / X / Y
- Shoulder buttons
- Triggers (analog)
- D-Pad
PadConnect/
├─ app/
PadConnectReceiver/
├─ data/
├─ input/
├─ main/ui/
├─ native/
├─ utils/
├─ viewmodel/
- DualShock4 input executor
- Multiple controller support
- Custom controller layouts
- Latency & packet loss stats
- BLE HID (does not require receiver)
- Linux receiver
- Works best on local Wi-Fi (TODO: Implement BLE HID)
- Firewall may need UDP port allowance
- ViGEm is Windows only
- ViGEm — Virtual Gamepad Emulation Framework
- Kotlin & Jetpack Compose teams
GPL3 License
Built for low latency, simplicity, and fun.