Streaming Omniverse to Meta Quest and Browsers: CloudXR.js Client Overview#

Note

Applies to: Spatial Extensions, Kit 109.0.3+, CloudXR 6

The Meta client path uses CloudXR.js, a JavaScript SDK, to stream spatial XR content from an Omniverse Kit server to web browsers running on XR headsets. The SDK uses WebXR (Immersive Web) for browser-based XR and WebRTC for low-latency media transport.

Tip

No headset required for initial testing You can validate the full CloudXR.js pipeline from desktop Chrome without any headset hardware. The CloudXR.js samples include IWER (Immersive Web Emulator Runtime), which emulates an XR device in your browser. See the Quick Start for the desktop-first workflow.

Supported Devices#

Device

OS Requirement

Browser

Notes

Meta Quest 2/3/3S

OS 79+

Meta Quest Browser (Chromium)

HTTP and HTTPS modes

Pico 4 Ultra

Pico OS 15.4.4U+

Pico Browser

HTTPS mode only

Desktop (dev)

Any

Any

Uses IWER for XR emulation

Architecture#

flowchart LR subgraph webServer [Web Application Server] WebApp["CloudXR.js Web App\n(HTML + JS)"] end subgraph kitServer [Kit XR Server] Kit["Kit Application\nCloudXR 6 (WebRTC)"] end Headset["Meta Quest 2/3/3S\nBrowser"] -- "HTTPS" --> WebApp WebApp -- "Loaded into browser" --> Headset Headset -- "WebSocket (signaling)\nWebRTC (media)\nOpaque Data Channel" --> Kit Kit -- "Stereo Video + Audio\nOpaque Data Messages" --> Headset

The CloudXR.js path involves two connections:

  1. Web server -> Browser: The headset browser loads the CloudXR.js web application from an HTTP/HTTPS server

  2. Browser -> Kit server: The browser connects directly to the Kit server’s CloudXR 6 (WebRTC) runtime through WebSocket (signaling) and WebRTC (media)

Key Features#

  • WebXR integration – Uses the Immersive Web standard for head and controller tracking

  • Hand tracking – WebXR hand tracking on supported devices (Meta Quest 2/3/3S)

  • Opaque data channels – Bidirectional messaging for application-level communication

  • Audio streaming – Spatial audio from the server

  • IWER desktop emulation – Automatic XR device emulation for desktop development

  • Framework agnostic – Works with vanilla WebGL, React Three Fiber, or any WebXR-compatible framework

  • HTTP and HTTPS modes – HTTPS required for production and Pico devices

Sample Applications#

CloudXR.js sample applications are available at NVIDIA/cloudxr-js-samples:

Sample

Description

simple/

Minimal WebGL client – best for getting started

react/

React Three Fiber client – for React-based projects

Kit Server Requirements#

The Kit server must be configured with:

  1. XR extensions enabled (see Create a Kit XR App)

  2. OpenXR Runtime set to CloudXR 6 (WebRTC)

  3. XR started (click Start XR in the XR panel)

Important

Use CloudXR 6 (WebRTC) for Meta and web clients. The CloudXR 6 (Native) runtime is for Apple clients and will not work with CloudXR.js.

Network Ports#

Port

Protocol

Purpose

8080

TCP

Web application server (configurable)

49100

TCP

CloudXR Runtime signaling (WebSocket)

47998

UDP

CloudXR Runtime media (WebRTC)

48322

TCP

WebSocket proxy (required for HTTPS mode)

Next Steps#

Next step:

See also: