VR Library confusion

Hello. I’m starting a VR project in C++ and I am a bit confused on the libraries and utilities I can use for VR development.
I have a Valve Index at home for testing my game and so far I used some of the engine UMotionControllerComponent to detect my controller and move my hand mesh based on their position. While Im moving forward I start to realise that there are so many libraries and plugins for VR develpment and I dont know wich one to stick too. There is the XR from Unreal, SteamVR and openVR seen so far. Can I use functions from all of them or stick to just one ?
Thank you.

Unreal uses a plugin based XR abstraction layer for most of the functions, available as the HeadMountedDisplay module. The features in it, like UMotionControllerComponent should work the same regardless of what plugins you use. Note that all the features are not implemented for all plugins, but the most commonly used should be.

The engine communicates with the VR runtime using the plugins attached to the XR abstraction layer. For the SteamVR runtime, you have the option of using the OpenXR plugin or the old SteamVR(OpenVR) plugin. The OpenXR plugin is the only one active maintained by Epic, but the SteamVR have some features that haven’t been added to the OpenXR plugin yet.

The vendor specific runtime plugins like the SteamVR one have some additional features not available in the abstraction layer. If you use them, those features will not work if you switch the active runtime.

Unless you absolutely need something from the SteamVR plugin, I’d suggest disabling it and only enabling the OpenXR plugin, together with OpenXRHandTracking if you want to use the Index controller finger positions.