Use the 'Haptic Pancake Bridge' app - Z4urce/VRC-Haptic-Pancake GitHub Wiki
- Download the newest version on the Releases page.
- Save
hapticpancake_windows.exeorhapticpancake_linuxto somewhere it can stay.- For auto-launching with VR to work (optional), SteamVR/etc needs the app to stay in one spot.
Warning
Do not store the app in a protected/admin folder, e.g. avoid C:\Program Files. The app needs to save its own settings file.
- Run the downloaded Windows
.exeor Linux bundled app. - If prompted, allow the app in your firewall.
- The bridge app listens for incoming OSC/WebSocket messages and mDNS broadcasts (OSCQuery).
Note
You might get a false positive virus alert given how this app is built (PyInstaller). If you can't bypass that, download this repository and run BridgeApp/main.py using Python.
- Launch SteamVR.
- You don't need to put on your headset if using Vive/Tundra Trackers (Lighthouse).
- Put your trackers out so SteamVR is tracking them (solid icon), not searching (fading in/out).
- Wait for your trackers to show up in the bridge app.
- For each tracker with haptics…
- Click
Setup. - Pick up a tracker, then click
Identify- if it vibrates, you found it; if not, pick up another tracker. - Once found, click the button for where it is worn, e.g.
Hips.
- Click
- Scroll through the list of trackers to check if everything looks correct.
- Confirm any by clicking the
Identifybutton.
- Confirm any by clicking the
- Optional: check
Start with SteamVRandStart minimizedto have haptics start whenever you enter VR. - Optional: fill in any custom parameters if you didn't follow the recommended names.
- Address:
/avatar/parameters/+ parameter you added to your avatar. - E.g.
/avatar/parameters/HapticFootLeft.
- Address:

Important
SteamVR must be running to communicate with your trackers.
Something not working? Jump down to Troubleshooting trackers.
- Launch VRChat (desktop mode or VR, either works).
- Once in a world, make sure you're in your new/edited avatar.
- Open the Action Menu (radial menu with avatar controls).
-
R (Desktop) or
Menu(VR).
-
R (Desktop) or
- Navigate to Options → OSC → then toggle on
Enabled(if not already on).- See the VRChat docs on enabling OSC.
- Optional: Have a friend join you and run into your avatar.
- Make sure avatar interactions are turned on - default is friends only.
- If they can pet your head/fluff/tail and push it, haptics should work.
- Trackers may need tracked by SteamVR (icon solid, not fading in/out) to vibrate.
- Congrats, you're done! 🎉
Important
Identify button works, but VRChat doesn't? Jump down to Troubleshooting VRChat.
An official guide will come later, when free time permits. For now, check the Haptic Pancake community chat (Discord) or ask folks in Resonite for help.
Note
This is optional. Most of these settings are up to your preference. Feel free to experiment!

-
Pattern: Introduces variety into the vibration and prevents drifting.
-
Nonedisables haptics (separate for Proximity and Velocity). -
Constantvibrates at maximum intensity even with just a slight avatar collision. -
Linear[recommendation #1] provides strongest result while still varying by closeness. -
Sineramps vibration up and down instead of vibrating at a steady speed. -
Throb[recommendation #2] helps avoid tracker drift, especially with continuous vibration (e.g. sitting in someone's lap).
-
-
Strength: Sets minimum and maximum intensity.
- Default:
0%minimum,80%maximum.
- Default:
-
Speed: For
Throbpattern only, adjusts delay between pulses. -
Stop stuck haptics after
#(seconds): Works around haptics getting stuck on crash/avatar switch/etc.- After
#seconds (default15) with no input, haptics are stopped. - Works around glitches, slow computers, avatar switching, and crashing causing haptics to get stuck on.
- After
Important
If using the Constant or Linear pattern with Vive Trackers and the regular (non-Vybronics) motors, keep the maximum vibration intensity to 80% to reduce risk of damaging the haptics output pin.
Vive Trackers using the low-current Vybronics motors and Tundra Trackers (any motor) do not have this issue.

The device list refreshes every 10 seconds. Normally, you don't need to click Refresh.
- Address: OSC/WebSocket address to listen for haptics input from your VR app.
- Setup button: fill in Address with common presets.
- Identify button: send a half-second vibration pulse.
- Battery threshold: Below this, you'll get a warning vibration, then vibrations will stop to save battery.
-
Pulse multiplier: Adjusts haptics strength relative to other trackers, default
1.0.- Use this to make some trackers weaker than others, e.g. if your chest is too sensitive versus feet.
- Some haptics devices might need a custom multiplier (Vive/Tundra trackers shouldn't need this).

-
Start with SteamVR: Check to automatically launch the bridge app when you open SteamVR/etc.
- SteamVR must be running to toggle this setting.
- Start minimized: Check to launch in the background, hiding to the task bar (reduces clutter).
- Theme: Pick your favorite color scheme, or Reset to go to default.

- Debug button: look at what's being sent to the bridge app.
-
Type: Pick how the bridge app listens for haptics input.
-
OSC (VRChat)for OSC compatible software, includes OSCQuery. -
WebSocket (Resonite)for WebSocket-based software.
-
-
Auto-detect port (OSCQuery): For OSC, automatically register an available port.
- Uncheck this if you have issues getting VRChat/etc to detect Haptic Pancake.
-
Address: Choose what server address is used for listening.
- Keep the default of
127.0.0.1unless you need to receive input from another computer.
- Keep the default of
- Port: Pick which port the bridge app listens on, e.g. to avoid conflicts.
- Apply button: apply changes made to the above.
Follow these steps if the tracker doesn't show up at all or the Identify button doesn't work.
- Check if SteamVR is running and actively following your tracker.
- Confirm SteamVR sees your tracker (icon is solid, not fading in/out).
- Confirm SteamVR sees your tracker (solid, not fading in out).
- It's easy to accidentally block the tracker while holding it.
- Vive Tracker: try unscrewing and removing the pancake, then re-assembling.
- The pancake connection is fiddly, it can take multiple attempts to get a connection.
- Some Vive Trackers vibrate once when you turn them on/off.
- Try increasing
Pulse multiplierfrom the default of1.0.- This should not be needed for Vive/Tundra trackers.
Follow these steps if the Identify button works, but haptics don't work from VRChat.
With VRChat and the Haptic Pancake bridge app both open, press the Debug button next to Server settings.

After every troubleshooting step, try moving around again in VRChat to send new OSC data.
- Make sure
OSCis turned on in VRChat. - Try moving around - parameters only show up when their value changes.
- Press
Applybutton inServer settings.- If
Auto-detect port (OSCQuery)is checked, VRChat should show a quick pop up ofSending OSC data to: […].
- If
- OSCQuery doesn't work on some networks. Uncheck
Auto-detect port (OSCQuery).-
NOTE: If you have other OSC software using the default port
9001, it will now conflict with the bridge app. - When using an OSC bridge/router app, follow their instructions for manual setup.
-
NOTE: If you have other OSC software using the default port
- Last resort, try restarting your computer and/or network.
- This has actually helped someone - networking is cursed.
![Screenshot of VRChat showing the 'Sending OSC data to […]' popup, a semi-transparent small blue notification in the middle of the screen](https://private-user-images.githubusercontent.com/32341702/571090383-92e946f7-1738-4145-8798-0660a31ba608.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzY4ODI2NDIsIm5iZiI6MTc3Njg4MjM0MiwicGF0aCI6Ii8zMjM0MTcwMi81NzEwOTAzODMtOTJlOTQ2ZjctMTczOC00MTQ1LTg3OTgtMDY2MGEzMWJhNjA4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDIyVDE4MjU0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUxM2FkYjQwMjYyMjZlNmFiOWVjYzM2MDM4NmJhZjcwMDY4ZjA4ODE2YjIyOGE2ZDI0NTY0ZDQ0MTkyY2FlM2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.ndMa7B8rw12ikeLh7IJwlw36yZJGhsJwCTIfnYoBOoU)
- Make sure you're using the right avatar.
- Each avatar needs modified and uploaded to add haptics. It's not global.
- Have a friend run into you in VRChat.
- Haptics parameters only show up when their value changes.
- Check your avatar interaction settings - VRChat defaults to friends only.
- Friend someone, or both you and the other person need to set interactions to
Everyone. - If the other person can mess with PhysBones (head/fluff/tail/etc), this is not the problem.
- Friend someone, or both you and the other person need to set interactions to
- Clear the
Filter:text, check if your parameter shows up under another name. - Revisit the Upload and test section of the avatar setup guide, make sure parameters exist in VRChat.
- Check the value - if it's not
0.0to1.0, confirm VRC Contact Receiver'sReceiver Typeis set toProximity.- If incorrectly set up as
ConstantReceiver Type, the Value might show up asTrue.
- If incorrectly set up as
- Check Haptic settings and set Proximity
PatterntoLinear, maximum to80or higher.- It might be vibrating, but too weak for you to feel.
- Re-try the
Identifybutton, in case the haptics connection got loose.
At this point, you might also check the OSC avatar JSON file in the VRChat AppData OSC folder.