Developers

Build for spatial displays on the web, natively, or in an engine. You don't need a spatial display to start.

Recommended for most new content

3D on the web

A few lines of JavaScript with @displayxr/inline3d, shared with a URL. In the DisplayXR Browser the page is 3D; in every other browser it is the same page in 2D.

index.html
<canvas id="chair" width="960" height="640"></canvas>

<script type="module">
  import { createInline3D } from '@displayxr/inline3d';
  import { addModel } from '@displayxr/inline3d/model';

  // 3D in the DisplayXR Browser on a spatial display, 2D everywhere else
  const wall = await createInline3D();
  const canvas = document.getElementById('chair');
  addModel(wall, canvas, 'chair.glb', { environment: 'studio' });
</script>

No spatial display? Develop on sim-display. DisplayXR ships a simulated spatial display: native apps build, run and self-test on an ordinary monitor, in an ordinary window. How

Native OpenXR apps

Start from a reference app, run it on sim-display, lint it, ship it. The recommended graphics API per platform:

Native quickstart

Unity and Unreal

Engine plug-ins with standard engine workflows, no custom forks.

Unity

Active

Plug-in v2.23.0 · Unity 2022.3 · Windows and macOS

Unreal

Beta

Plug-in v0.9.4 · UE 5.7.0 · Windows, macOS and Android

See them running in the demos.

Opt-in

Let an AI agent drive your app

With MCP enabled, the runtime hosts a Model Context Protocol server in each app, so an agent such as Claude Code can inspect it. With XR_DXR_mcp_tools your app adds its own tools (play_pause, load_model): calls arrive on the OpenXR event queue and you answer from your frame loop. Your app never links an MCP library.

Off unless MCP is enabled on the machine; with it off, the extension's calls return unsupported and the app carries on.

Go deeper

Full documentation lives with the code, in the runtime repo's docs.