#vr #api-bindings #openxr


High-level, mostly-safe OpenXR bindings

33 unstable releases

0.17.1 Oct 8, 2022
0.16.0 Feb 12, 2022
0.15.5 Dec 23, 2021
0.15.4 Sep 4, 2021
0.3.2 Mar 24, 2019

#24 in Rendering

Download history 220/week @ 2023-06-04 39/week @ 2023-06-11 195/week @ 2023-06-18 146/week @ 2023-06-25 128/week @ 2023-07-02 89/week @ 2023-07-09 68/week @ 2023-07-16 77/week @ 2023-07-23 46/week @ 2023-07-30 76/week @ 2023-08-06 132/week @ 2023-08-13 68/week @ 2023-08-20 97/week @ 2023-08-27 139/week @ 2023-09-03 133/week @ 2023-09-10 89/week @ 2023-09-17

461 downloads per month
Used in hotham


34K SLoC

Rust 18K SLoC // 0.0% comments C++ 14K SLoC // 0.1% comments Python 1K SLoC // 0.3% comments Visual Studio Project 278 SLoC C 250 SLoC // 0.2% comments AsciiDoc 95 SLoC // 0.0% comments Batch 79 SLoC PowerShell 68 SLoC // 0.2% comments Perl 4 SLoC


Documentation Crates.io License: MIT License: Apache 2.0

Rust bindings for the OpenXR virtual/augmented reality runtime API. Refer to the specification for detailed documentation on individual API calls.


The high-level bindings provide abstractions focusing on ergonomics and safety. Escape hatches to the raw API are exposed to support unforeseen requirements, and patterns that cannot be efficiently exposed in safe terms are preserved as unsafe.

The crate exposes a number of cargo features:

  • static builds in the Khronos OpenXR loader, which can then be accessed with Entry::linked(). This is the easiest way to get going, provided your environment has a working C++ compiler and CMake installation.
  • loaded allows access to a manually identified OpenXR implementation at run time. This allows for cases where a built-in Khronos loader, normally responsible for that task, cannot be used.
  • linked attempts to link to an OpenXR loader in the build environment. This is appropriate for target environments like desktop Linux which guarantee the presence of an OpenXR implementation or loader at a specific location, making a built-in loader redundant.
  • mint exposes From impls for converting to and from mint types where appropriate.

See openxr/examples/vulkan.rs for an example high-performance Vulkan rendering workflow.


The low-level bindings provide faithful unsafe access to the raw API, with ergonomics and type safety improved as much as feasible compared to a bindgen-style binding without reducing expressiveness. For example, symbols are named according to Rust conventions, enums and bitmasks are strongly typed, and many types have helpful Debug impls. This crate is almost entirely generated from the Khronos XML registry.