Skip to content
Switch branches/tags

Latest commit

This release mostly adds new extensions. It also includes some fixes to
the included layers, as well as text in the loader documentation
describing how runtimes can register themselves for manual selection.
This is not used by the loader itself and does not require any changes
to the loader, but it may be useful to developer-focused supporting

-   Registry
    -   Add ratified XR_KHR_swapchain_usage_input_attachment_bit Khronos
        extension. (Promotion of
        XR_MND_swapchain_usage_input_attachment_bit, which is now
        deprecated.) (internal MR 2045)
    -   Add new XR_FB_foveation, XR_FB_foveation_configuration, and
        XR_FB_foveation_vulkan vendor extensions. (internal MR 2050)
    -   Add additional extension dependencies to
        XR_FB_swapchain_update_state. (internal MR 2072, internal issue
    -   Add new XR_FB_composition_layer_secure_content vendor extension.
        (internal MR 2075)
    -   Add new XR_FB_composition_layer_alpha_blend vendor extension.
        (internal MR 2078)
    -   Add new XR_FB_composition_layer_image_layout vendor extension.
        (internal MR 2090)
    -   Add new XR_MSFT_spatial_anchor_persistence vendor extension.
        (internal MR 2093)
    -   Add some simple Schematron rules and a script to check the XML
        registry against them. (internal MR 2103)
    -   Register author ID and Reserve vendor extensions for Unity.
        (internal MR 2105)
    -   Reserve extension ID range 187-196 for LIV Inc. (internal MR
-   SDK
    -   Describe how runtimes may register themselves at installation
        time for manual selection. (internal MR 2081, internal MR 2109,
        internal issue 1574)
    -   Include sRGB in list of supported swapchain texture formats for
        the HelloXR OpenGLES plugin. (internal MR 2066)
    -   layers: Refactor generated xrGetInstanceProcAddr implementations
        to avoid deeply-nested if ... else blocks. (Some compilers have
        limits we were nearing or hitting.) (internal MR 2050)
    -   validation layer: Set default logging mode to stdout (“text”)
        instead of none. (OpenXR-SDK-Source PR 262)
    -   validation layer: Fix invalid struct type error message to show
        the expected type instead of the actual type. (OpenXR-SDK-Source
        PR 263)

Git stats


Failed to load latest commit information.

OpenXR™ Software Development Kit (SDK) Project

This repository contains OpenXR headers, as well as source code and build scripts for the OpenXR loader. It contains all generated source files and headers pre-generated for minimum dependencies.

The authoritative public repository for this project is located at

The public repository containing the scripts that generate the files in this repository is located at It hosts the public Issue tracker, and accepts patches (Pull Requests) from the general public. That repository is also where sample code (hello_xr) and API layer source can be found.

Note that this repo is effectively read-only: changes to this repo should be made in the OpenXR-SDK-Source repo instead

Directory Structure

  • - Instructions for building the projects
  • - This file
  • - Copyright and licensing information
  • - Code of Conduct
  • external/ - External code for projects in the repo
  • include/ - OpenXR header files
  • src/external/jsoncpp - The jsoncpp project source code, an included dependency of the loader.
  • src/loader - OpenXR loader code, including generated code


The project is set up to build using CMake.

(Optional) Building the OpenXR Loader as a DLL

By default, the OpenXR loader is built as a static library on Windows and a dynamic library on other platforms. To specify alternate behavior, define the CMake option DYNAMIC_LOADER, e.g. by adding -DDYNAMIC_LOADER=ON or -DDYNAMIC_LOADER=OFF to your CMake command line.


Building the OpenXR components in this tree on Windows is supported using Visual Studio 2013 and newer. Before beginning, make sure the appropriate "msbuild.exe" is in your PATH. Also, when generating the solutions/projects using CMake, be sure to use the correct compiler version number. The following table is provided to help you:

Visual Studio Version Number
Visual Studio 2013 12
Visual Studio 2015 14
Visual Studio 2017 15

Specific sample command lines for building follow. If you're already familiar with the process of building a project with CMake, you may skim or skip these instructions.

Windows 64-bit

First, generate the 64-bit solution and project files using CMake:

mkdir build\win64
cd build\win64
cmake -G "Visual Studio [Version Number] Win64" ..\..

Finally, open the build\win64\OPENXR.sln in the Visual Studio to build the loader.

Windows 32-bit

First, generate the 32-bit solution and project files using CMake:

mkdir build\win32
cd build\win32
cmake -G "Visual Studio [Version Number]" ..\..

Open the build\win32\OPENXR.sln in the Visual Studio to build the loader.


The following set of Debian/Ubuntu packages provides all required libs for building for xlib or xcb with OpenGL and Vulkan support.

  • build-essential
  • cmake (of somewhat recent vintage, 3.10+ known working)
  • libgl1-mesa-dev
  • libvulkan-dev
  • libx11-xcb-dev
  • libxcb-dri2-0-dev
  • libxcb-glx0-dev
  • libxcb-icccm4-dev
  • libxcb-keysyms1-dev
  • libxcb-randr0-dev
  • libxrandr-dev
  • libxxf86vm-dev
  • mesa-common-dev

Specific sample command lines for building follow. If you're already familiar with the process of building a project with CMake, you may skim or skip these instructions.

Linux Debug

mkdir -p build/linux_debug
cd build/linux_debug
cmake -DCMAKE_BUILD_TYPE=Debug ../..

Linux Release

mkdir -p build/linux_release
cd build/linux_release
cmake -DCMAKE_BUILD_TYPE=Release ../..