DOM Overlay provides the ability to use DOM elements as an overlay in a WebXR AR session. It requires that the root DOM element is provided for session start. That way, input source select events are first tested against DOM Elements and then propagated down to the XR Session. If this propagation is not desirable, use the beforexrselect event on a DOM element and the preventDefault function to stop propagation.

app.xr.domOverlay.root = element;
app.xr.start(camera, pc.XRTYPE_AR, pc.XRSPACE_LOCALFLOOR);
// Disable input source firing `select` event when some descendant element of DOM overlay root
// is touched/clicked. This is useful when the user interacts with UI elements and there should
// not be `select` events behind UI.
someElement.addEventListener('beforexrselect', function (evt) {


_manager: XrManager
_root: Element = null
_supported: boolean = ...


  • get available(): boolean
  • True if DOM Overlay is available. This information becomes available only when the session has started and a valid root DOM element has been provided.

    Returns boolean

  • get state(): string
  • State of the DOM Overlay, which defines how the root DOM element is rendered. Possible options:

    • screen - indicates that the DOM element is covering whole physical screen, matching XR viewports.
    • floating - indicates that the underlying platform renders the DOM element as floating in space, which can move during the WebXR session or allow the application to move the element.
    • head-locked - indicates that the DOM element follows the user's head movement consistently, appearing similar to a helmet heads-up display.

    Returns string