A customizable SteamVR plugin that maps your in-place head/hand/foot movements to virtual locomotion. Intuitively and seamlessly.
📦 Installation
[Strongly recommended]
Please visit the WanderFlow Steam Store page and click the tutorial video among the trailers for step-by-step first time setup instructions.
Quick setup guide
- Start SteamVR
- Start WanderFlow
- If prompted, click "Install driver" — or click the red warning text on the top to install the driver
- Restart SteamVR for the installation to take effect
- SteamVR settings → Controller → Manage controller bindings → Choose another
- Find your SteamVR game and open its controller bindings dialog
- Switch current controller to "wanderflow"
- Check "Return bindings with left/right hand" in Extra Settings tab
- Find the tab containing movement actions and bind wanderflow joystick to the movement action in the SteamVR game
- Start WanderFlow and your the SteamVR game
- Start moving in VR!
🎛️ Driver action binding
⚠️ Required step
This step is required for WanderFlow to take effect in most SteamVR apps.
Navigate to: SteamVR settings → Controller → Manage controller bindings → Choose another
Select your current SteamVR app and WanderFlow virtual controller. These bindings describe how WanderFlow output is used in your SteamVR app.
- ⚠️ Extra Settings (IMPORTANT): You may need to navigate to the Extra Settings tab and check "Return bindings with left hand" (or even "Return bindings with right hand") for certain apps (e.g., VRChat, Skyrim VR) to work with WanderFlow.
- 🕹️ Joystick and trackpad position: WanderFlow uses these as movement output. Bind either joystick or trackpad position to the movement action in your SteamVR app.
- 🏃
/input/runand joystick/trackpad click: WanderFlow uses these to signal running. Bind any one of these to the run/sprint action in your SteamVR app. - ⬆️ A button, X button, and
/input/jump: Bind any one of these to the jump action in your SteamVR app. - 🪂 Grip touch and
/input/glide: WanderFlow uses these to signal gliding (e.g., when emulating wing flap or swimming). This could be bound creatively to some action in your SteamVR app. - 🔄
/input/turnstick: You can bind this to the look/rotation action if you want to use the head tilt turn feature (see section Locomotion modifiers).
🎛️ Client action binding
Navigate to: SteamVR settings → Controller → Manage controller bindings → Choose another
Select WanderFlow Client as the app and select your current (hand) controllers. These bindings describe how your physical controllers interact with WanderFlow.
- Calibration action: Defaulting to trigger, it can be combined with T-posing to initiate calibration (see next section Calibration).
- Pause action: When the pause action is in effect, you cannot start locomotion using WanderFlow. On Oculus Touch and Index Knuckle, it defaults to A/B/X/Y button touch—that is, touching any of these buttons prevents locomotion from starting.
- Start action: If this action is not bound, you can start locomotion as long as you are not pausing it. If the start action is bound, you will need to use this action to start locomotion. For example, if you bind it to thumbrest touch, you will need to touch the thumbrest while moving your hand/feet to start locomotion.
- Stop action: This action instantly stops any hand-based locomotion. On Oculus Touch and Index Knuckle, it defaults to grip press so that pressing the grip stops any ongoing hand-based locomotion.
- Stop-feet action: This action instantly stops any foot-based locomotion.
🎯 Calibration
How to calibrate
T-pose when looking straight forward and press the calibration button (default: trigger) on both controllers. If the calibration action is not bound, you can calibrate by T-posing for 0.5 seconds without pressing any button.
⚠️ Important: Calibration is required before you can use any foot-based locomotion feature. It also improves the detection and accuracy of hand-based locomotion.
🙌 Hand-Based locomotion
🏃 Arm swing
Set Hand locomotion to Simple back-and-forth swing in the control panel to use this feature. Lean forward slightly, put one hand in front and one hand behind, and swing your arms back and forth to start moving. Keep palms vertical and swing fast to start running. Slow down or have palms face downward to stop running.
Wear wrist weights to intensify your workout! (⚠️ Consult your doctor first, start light, and stop if you experience any discomfort)
⚙️ Sagittal hand wheel
Set Hand locomotion to Move hands in sagittal wheel motion in the control panel to use this feature. Move your hands in a circular motion as if attached to wheels on your sides. You can move the wheel in either direction corresponding to forward and backward walking. Keep palms vertical and move hands fast to start running. Slow down or have palms face downward to stop running.
🦅 Simple flap
Set Flap to Simple flap in the control panel to use this feature. Extend your arms to your left and right, then start flapping up and down fast.
Wear wrist weights when playing to rip those delts! (⚠️ Consult your doctor first, start light, and stop if you experience any discomfort)
🐓 Realistic flap
Set Flap to Emulate realistic insect/bird wing angle in the control panel to use this feature. Extend arms to your left and right, start flapping up and down. The radial front of your palm needs to tilt down in a down stroke and tilt up in an up stroke to provide propulsion—mimicking real bird wing mechanics.
🏊 Swimming
Extend both arms forward with backs of hands facing each other (hence palms are facing away from each other). Move hands away from each other to propel. Keep using frog style, or switch to freestyle swimming motion to trigger "running" mode.
👣 Foot-Based locomotion
🚶 Walk-in-place
After calibration, lean forward slightly and move your feet up and down. Small hops with both feet can activate running mode. Lean back to start walking backward. Note that this feature can even be used if your foot trackers and HMD do not share tracking coordinates (e.g., if you are using an Oculus headset with Vive trackers) with only slightly reduced accuracy.
🛼 Roller skate
Requires calibration and a unified coordinate system for the HMD and foot trackers. Slide one foot on the floor to move in the opposite direction. Alternate feet like roller skating for smooth movement.
💡 Config settings
Jump threshold
This controls how fast you need to move your head upward to register as a jump. A lower value makes jumping easier to trigger (more sensitive), while a higher value requires more forceful head movement. Adjust this based on your play style—if you're getting accidental jumps during normal movement, increase the threshold. If jumping feels unresponsive, decrease it.
Max acceleration
This determines how quickly your virtual movement responds to your physical actions. Lower values create smoother, more gradual acceleration and deceleration. Higher values provide instant response to your movements, feeling more direct but potentially more jarring and more sensitive to signal noise.
Max walk output
This sets the maximum virtual joystick/touchpad input value when walking (not running). A value of 1.0 means full stick deflection, while lower values cap your maximum walking speed. Use this to fine-tune how fast "walking" feels in games—some games have very fast default walk speeds that might feel like running.
Walk output multiplier
This is a multiplier for how far you move in-game compared to your real-life movement when walking (not running). Higher values amplify your in-game movement while lower values reduce it.
Run threshold
This is the speed threshold that determines when the system switches from walking to running mode when using arm-based locomotion. When your physical movement speed exceeds this value, the run output multiplier kicks in instead of the walk output multiplier and the run button on the virtual WanderFlow controller is pressed. Set it lower if you want running to trigger easily with moderate movement, or higher if you only want vigorous movement to count as running.
Min hand distance for walk
This is the minimum forward/backward separation distance (not counting side-to-side or up-down separation) between your hands required to activate arm swing locomotion. This prevents accidental activation when your hands are close together. A higher value means you need more exaggerated arm swinging with one hand clearly ahead of the other to initiate locomotion. This distance is required to initiate arm-swing locomotion but is not required to keep it going—unless you stop moving your arms for a brief amount of time.
Hand locomotion / Swim / Flap
Enables and chooses hand-based locomotion mode—see Hand-based locomotion section for details.
Walk-in-place min height
When using foot trackers, this sets how high you need to lift your feet off the ground to initiate locomotion. Lower values make it easier to activate (useful for subtle marching), while higher values require more pronounced stepping (reduces false triggers). This height is required to initiate walk-in-place locomotion but not required to keep it going—unless you set both feet down and stop moving them for a brief amount of time. Note that setting it to zero completely disables walk-in-place.
Leaning detection
When enabled, the system detects when you physically lean your body forward or backward and uses this to determine walk-in-place and arm-swing movement direction. Leaning forward makes you walk/run forward, while leaning backward makes you move in reverse.
Roller skate
Enables roller skate locomotion—see Foot-based locomotion section for details.
Head tilt strafe
When enabled, tilting your head adds sideways movement to arm swing, hand wheel, and walk-in-place locomotion.
Head tilt turn
When enabled, tilting your head while strafing causes rotation. Requires /input/turnstick bound to the look/yaw/rotation action in your SteamVR app