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.
<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 quickstartUnity and Unreal
Engine plug-ins with standard engine workflows, no custom forks.
Unreal
BetaPlug-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
Extensions
Where vanilla OpenXR stops on a spatial display, and the XR_DXR_* extension that covers each gap.
Architecture
How the runtime, the native compositors and the vendor plug-ins fit together.
FAQ
Hardware, platforms, project status.
Troubleshooting
Start with displayxr-cli selftest, then symptom, cause, fix.
Ask the community
Questions, ideas and show-and-tell on GitHub Discussions.
Full documentation lives with the code, in the runtime repo's docs.