Controller and Hand Tracking#

The CloudXR Runtime receives controller input and hand tracking data from connected CloudXR client devices over the network and presents them to your OpenXR application through the standard OpenXR action system.

This page covers which controllers are supported, how binding profile fallbacks work, and how to set up your application for broad compatibility.

Supported Controllers#

The following controllers are natively supported. The runtime automatically selects the correct profile based on the connected client’s hardware.

Controller

Client Profile ID

OpenXR Interaction Profile

Meta Quest Touch Plus

meta/touch_plus

/interaction_profiles/meta/touch_controller_plus

Sony PlayStation Sense

sony/ps_sense

(no native profile — works through fallbacks)

PICO 4 Ultra

bytedance/pico4_controller

/interaction_profiles/bytedance/pico4_controller

Khronos Generic Controller

khr/generic_controller

/interaction_profiles/khr/generic_controller

Khronos Simple Controller

khr/simple_controller

/interaction_profiles/khr/simple_controller

Xbox Controller

microsoft/xbox_controller

/interaction_profiles/microsoft/xbox_controller

Binding Profile Fallbacks#

Each supported controller provides automatic binding profile fallbacks that map its inputs to common OpenXR interaction profiles. This means your application does not need to explicitly support every controller. You can suggest bindings for a common profile and the runtime translates them automatically.

Physical Controller

Native Profile

Also Accepts Bindings For

Meta Quest Touch Plus

Meta Touch Plus

Generic Controller, Oculus Touch, Simple Controller

Sony PlayStation Sense

(none)

Generic Controller, Oculus Touch, Simple Controller

PICO 4 Ultra

PICO 4

Generic Controller, Oculus Touch, Simple Controller

Khronos Generic Controller

Generic Controller

Oculus Touch, Simple Controller

Khronos Simple Controller

Simple Controller

(no additional fallbacks)

Xbox Controller

Microsoft Xbox Controller

(no additional fallbacks)

In practice, if your application suggests bindings for /interaction_profiles/oculus/touch_controller, it will work with Quest Touch Plus, PS Sense, PICO 4 Ultra, and the Generic Controller through automatic binding translation.

Controller Haptics#

The runtime supports controller haptic feedback for clients that advertise controller haptics support. Applications can use standard OpenXR haptic actions and suggested bindings. When the connected client and physical controller expose haptics, the runtime forwards haptic events to the client device.

The supported controller profiles expose vibration output paths, including haptic/vibration for motion controller profiles and Xbox controller haptic outputs for gamepad vibration. If a client or controller does not support haptics, haptic output requests are ignored without preventing input from working.

Hand Tracking#

The runtime supports the XR_EXT_hand_tracking extension, which provides full 26-joint hand skeletal tracking when the connected client device supports it. Hand tracking data flows from the client device through the CloudXR streaming protocol, just like controller input.

Other Considerations#

Because the CloudXR Runtime streams input over the network, keep the following in mind:

  • Controller availability is dynamic. Controllers are registered when a client connects and unregistered when the client disconnects. Applications must handle interaction profile change events gracefully.

  • Input latency. Controller input is transmitted over the network from the client to the server. While CloudXR minimizes this latency, it will be higher than input from locally connected controllers.

  • Haptics. Haptic feedback is delivered only when both the client SDK and the connected controller advertise haptics support. Applications should treat haptics as optional and continue to work when the client ignores a haptic request.

  • Both hands are supported. Each controller type is registered for both left and right hands through the standard /user/hand/left and /user/hand/right top-level user paths.

Known Issues#

  • Noisy hand tracking with controllers on Apple Vision Pro. When both hand tracking and controller input are enabled simultaneously on Apple Vision Pro, the hand tracking data may become noisy. If your application does not require both inputs at the same time, consider disabling hand tracking when controllers are in use.