- Svelte 69.5%
- Rust 15.5%
- TypeScript 10.2%
- CSS 2.6%
- Shell 1.6%
- Other 0.6%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github | ||
| .vscode | ||
| extras/envision | ||
| packaging | ||
| src | ||
| src-tauri | ||
| static | ||
| .gitignore | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| screenshot-minimal.png | ||
| screenshot-setup.png | ||
| screenshot.png | ||
| svelte.config.js | ||
| sync-server.sh | ||
| sync-steamvr.sh | ||
| tsconfig.json | ||
| vite.config.js | ||
🧤 UDCAP Control
Use your UDCAP VR gloves on Linux, for Monado and SteamVR
AI usage: This project was developed with AI assistance (Anthropic's Claude), under human direction, testing, and review.
What it does
UDCAP Control is the desktop app that sits between your gloves and your VR runtime. It talks to the gloves, keeps them connected, and turns them into a pair of Index-style controllers with full finger tracking.
- Works with Monado and SteamVR. Pick your runtime with one toggle. SteamVR users get the driver installed on first launch. Monado users run the Monado fork that has the glove driver built in.
- Set up once. The first launch walks you through the runtime, the device permissions, the driver and your trackers.
- A small window for every day. Like SteamVR's status window, it shows both gloves, their battery and the runtime connection, with the full app one click away.
- Guided calibration. Start it from the app or with the glove's power button, and follow the audio cues.
- Fine-tune each finger. Live readouts with draggable handles for every finger's range, plus overall curl strength and finger splay.
- Make the gloves feel like controllers. Remap A, B, System and the stick on a picture of the glove. Choose which finger drives the trigger and which drives the grip. Calibrate the thumbstick. Test the vibration.
- Fix the hand position per game. Alignment profiles hold the position and rotation offsets for each hand, so VRChat and your other games can each have their own. Switch profiles live.
- Pair and stay connected. Pair gloves to their receivers, change the radio channel to dodge interference, and let the app reconnect a glove that was switched off and on again.
If a finger ever refuses to track, Settings has a diagnostics page with a guided range test and a report you can share.
Requirements
- Linux. Packages are built for Debian/Ubuntu, Fedora, Arch and as an AppImage.
- UDCAP gloves with their USB receivers.
- SteamVR, or a Monado built from the fork. Stock Monado does not include the glove driver, because Monado compiles its drivers in. The app has a step-by-step guide for this, whether you use Monadeck, Envision or your own build.
WiVRn is not supported yet. WiVRn ships its own built-in Monado, so the glove driver cannot be added to it the way it is to the fork. Standalone headsets streaming through WiVRn will not see the gloves for now. A WiVRn fork support is planned.
Install
Grab the .deb, .rpm or .AppImage from the releases page. Arch users can build the package from packaging/arch/.
Using it
- Plug in the receivers.
- Open the app and follow the first-launch setup.
- Press Start in the small window and switch the gloves on.
- Press Calibrate and follow the three poses. Your fingers now track.
- Start your runtime. Launch UDCAP Control before SteamVR, so the driver can find the gloves.
The runtime's logo in the corner turns blue once it has picked up the gloves. The menu opens the Hands, Controls, Alignment, Devices and Settings pages when something needs tuning.
Troubleshooting
My gloves are not detected in Monado. Make sure you are running the fork, and that your trackers are paired and connected. You should see the trackers and the "UDCAP" gloves in Monado's device list.
My gloves are not detected in SteamVR. Launch UDCAP Control before SteamVR, or restart SteamVR with the app open.
A glove stopped responding after I switched it off. The app resets the receiver and picks the glove back up on its own. Give it a few seconds.
My hands sit in the wrong place or point the wrong way. Open the Alignment page and adjust the offsets for that hand. Save them into a profile named after the game.
One finger won't track or moves the wrong way. Run calibration again, keeping the glove snug and each finger still during the fist pose. If it persists, open Diagnostics from Settings and send the report.
Development
The app is a Tauri 2 + SvelteKit (Svelte 5) project. It bundles two binaries built from UDCAP-server: the server that reads the gloves, and the SteamVR driver. Clone that repo in a folder next to this one, then:
pnpm install
./sync-server.sh # build and bundle UDCAP-server (once)
./sync-steamvr.sh # build and bundle the SteamVR driver (once)
pnpm tauri dev
pnpm tauri build produces the deb, rpm and AppImage packages. The server publishes glove state through shared memory, which both the Monado driver and the SteamVR driver read. The app supervises the server, reads the same memory for its live displays, and writes your offsets, mappings and commands back. An Envision profile for the Monado fork lives in extras/envision/.
Releases are built by CI, on Debian 12 so they also run on older distros: push a version tag (v0.7 for 0.7.0) and it drafts the GitHub release. It builds the UDCAP-server commit that the sync scripts record in .github/udcap-server.ref, so push UDCAP-server and commit that file first. Releases ship the voice cues in packaging/sounds/.
Credits
UDCAP glove decoding by the OldestNova team (Community Hand Driver Core, MIT). Valve for OpenVR, SteamVR and the hand-skeleton sample. Monado (OpenXR runtime).
License
MIT.

