Develop

Get started with Meta VR Glasses using IWSDK

Updated: Sep 4, 2026
Meta VR Glasses use gaze for targeting and a hand pinch for selection. IWSDK maps these inputs to its existing ray-pointer interaction path, while IWER lets you exercise the interaction and preview Meta VR Glasses scene coverage on a desktop.

Before you begin

Start with a manifest-first IWSDK project. If you do not have one, follow Project setup.
For the platform-wide input model and device guidance, see Get started with Meta VR Glasses.

Configure the project

Update the root iwsdk.config.json to request gaze and hand tracking and enable the Meta VR Glasses field-of-view mask for on-device comparison:
{
  "$schema": "./node_modules/@iwsdk/core/dist/schemas/iwsdk-project.v1.schema.json",
  "version": "iwsdk.project.v1",
  "scene": "./public/scenes/main.iwsdk.scene.json",
  "world": {
    "xr": {
      "mode": "vr",
      "features": {
        "handTracking": { "required": true },
        "gazeTracking": true
      }
    },
    "features": {
      "fieldOfViewMask": true
    }
  }
}
The settings have separate roles:
  • handTracking: { "required": true } requires the hand input used for the pinch.
  • gazeTracking: true requests gaze tracking as an optional XR session feature. If the runtime does not provide a usable gaze pose, IWSDK falls back to head pointing.
  • fieldOfViewMask: true enables IWSDK’s built-in Meta VR Glasses view profile. The mask applies in an immersive session, including a native WebXR session on another Quest headset.
Use gazeTracking: { "required": true } only when the immersive session must fail instead of using the head-pointing fallback.
For desktop emulation, set dev.emulator.device to the device profile that your IWER build provides for the Meta VR Glasses device. This setting affects only desktop emulation.

Make objects work with gaze

Gaze uses the same targets and events as other IWSDK ray pointers. Add RayInteractable to a target and handle the standard Hovered and Pressed states. An existing ray interaction does not need a gaze-specific component or event handler.
When grabbing is enabled, gaze can also target DistanceGrabbable. A pinch starts the grab, and the captured interaction follows the pinching hand by default.
See Add gaze-enhanced interaction for configuration, behavior, diagnostics, and tuning.

Test on a desktop

With the Meta VR Glasses device profile selected, start the development server and open its local URL:
npm run dev
Enter XR, open Select input mode in the IWER toolbar, and choose Gaze + Hands. This selects hands as the primary inputs and uses cursor-controlled gaze. The toolbar also provides gaze-mode, commit-hand, and field-of-view mask controls.
See Emulate Meta VR Glasses input and field of view for the complete control scheme and automated-testing behavior.

Test scene coverage on a headset

Open the same project on Meta Quest 3, Quest 3S, or another supported Quest headset and enter immersive XR. world.features.fieldOfViewMask: true uses the browser’s native WebXR session and does not require IWER on the headset. The dev.emulator.device setting affects only desktop emulation.
The mask approximates the angular coverage of the built-in Meta VR Glasses WebXR view profile. It does not reproduce lens-edge shape, change the headset’s native projection, or expand a host view that is narrower than the target bounds.
See Test the Meta VR Glasses view profile on a headset for limitations and comparison guidance. For the distinction between nominal visible area and WebXR render extent, see Meta VR Glasses field of view and display values.

What’s next