OpenVR server driver that maps Nintendo Joy-Con controllers over hidapi to SteamVR left and right hand controllers.
- Separate left and right Joy-Con devices in SteamVR.
- Index-style controller emulation for compatibility with existing SteamVR bindings.
- Per-hand button mapping in
config/config.json. - Raw Joy-Con buttons exposed as bindable SteamVR inputs.
- Analog stick calibration loading from
config/joyconcal.json. - Standalone calibration tool at
joycon_calibrate.exe.
- Windows
- Visual Studio 2022 C++ build tools
- CMake 3.21 or newer
The project can auto-fetch OpenVR, hidapi, and nlohmann/json during CMake configure, so a separate SDK install is optional.
cmake -S . -B build -A x64
cmake --build build --config ReleaseBuild outputs:
build/bin/win64/Release/driver_joyconinput.dllbuild/bin/win64/Release/joycon_calibrate.exe
This repository already includes a ready-to-register SteamVR driver folder at steamvr_driver/joyconinput.
Expected layout:
steamvr_driver/joyconinput/
driver.vrdrivermanifest
bin/win64/driver_joyconinput.dll
bin/win64/joycon_calibrate.exe
config/config.json
config/joyconcal.json
resources/input/joycon_left_profile.json
resources/input/joycon_right_profile.json
Register it with SteamVR:
"C:/Program Files (x86)/Steam/steamapps/common/SteamVR/bin/win64/vrpathreg.exe" adddriver "C:/Users/LogicCuteGuy/Downloads/JoyconInputOpenVR/steamvr_driver/joyconinput"After changing controller profile files or controller identity properties, fully restart SteamVR so it reloads the driver metadata.
Main configuration file: config/config.json
Supported Joy-Con button names:
minus,plus,capture,homea,b,x,yup,down,left,rightl,r,zl,zr,sl,sr,stick
Supported mapped actions:
systemmenuabxygriptrigger_clickthumbstick_clickunused,unuse, ornone
Per-hand options:
button_bindingsinvert_xinvert_yanalog_deadzone
The driver reads JoyConCal-style data from config/joyconcal.json.
Expected format:
{
"left": {
"x_min": 1260,
"x_center": 2048,
"x_max": 2860,
"y_min": 1240,
"y_center": 2048,
"y_max": 2870,
"deadzone": 120
},
"right": {
"x_min": 1260,
"x_center": 2048,
"x_max": 2860,
"y_min": 1240,
"y_center": 2048,
"y_max": 2870,
"deadzone": 120
}
}If the file is missing, built-in defaults are used.
Run the calibration tool from the packaged driver bin/win64 folder or pass an explicit output path.
Default output path:
../../config/joyconcal.json
Example:
.\joycon_calibrate.exeOr:
.\joycon_calibrate.exe C:\path\to\joyconcal.jsonThis project is licensed under the MIT License. See LICENSE.