Build Preparation for SteamVR Distribution

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.
Showing 1 of 1 servicesAll 242 services
Build Preparation for SteamVR Distribution
Simple
~2-3 business days
FAQ
Our competencies
What are the stages of Game Development?
Latest works
  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    663
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    859
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    533

tags: [vr-ar]

Preparing builds for distribution in SteamVR

Publishing VR game in Steam technically harder than regular desktop. Issue not in Steamworks SDK itself — it's well documented. Complexity in that SteamVR app services multiple layers simultaneously: Steam Runtime, OpenVR/OpenXR overlay, compositor, all must launch correctly, register manifest and not conflict with other headset-specific layers like Oculus Runtime on PC.

What specifically prevents normal launch from Steam

First breaking point — vrmanifest. JSON file SteamVR uses to register app in OpenVR. If not written correctly or in wrong place relative to executable, SteamVR won't understand app is VR. Game launches in desktop mode, no stereo rendering, user gets black screen in headset.

manifest.vrmanifest structure:

{
  "source": "builtin",
  "applications": [{
    "app_key": "steam.app.YOUR_APP_ID",
    "launch_type": "binary",
    "binary_path_windows": "YourGame.exe",
    "is_dashboard_overlay": false,
    "strings": {
      "en_us": {
        "name": "Your VR Game",
        "description": "..."
      }
    }
  }]
}

Field app_key must exactly match App ID in Steamworks. One character error — manifest ignored without errors in log.

Second problem class — Steam Depots and Build configuration. VR game should have minimum two depots: base content and separate high-quality textures depot, so users with less powerful machines load lighter version. Launch Options in Steamworks should explicitly specify -openvr or -openxr flag depending on backend in Unity/Unreal.

In Unity with OpenXR Plugin important to check XR Plug-in Management configured with correct provider order: OpenXR must come first, else launching via Steam without active VR Runtime game crashes on init with XRLoader failed to initialize.

Package preparation: from build to Steamworks

Release build for Steam differs from dev by several parameters. In Unity: IL2CPP backend (not Mono), Strip Engine Code enabled, Managed Stripping Level — Minimal or Low for VR (aggressive stripping regularly breaks reflection-based code in XR SDK). Compression Method — LZ4HC for faster unpacking on first launch.

After build — verify via Steam Content Builder (steamcmd). Local test via steam://run/APPID before uploading to Steam guarantees manifest picked up. If SteamVR doesn't launch automatically when running via Steam — check C:\Program Files (x86)\Steam\logs\vrserver.txt and openvr.log in game folder.

For OpenXR projects additionally check openxr_loader.dll present in executable folder and XR_RUNTIME_JSON environment variable correctness — Steam may override it at launch.

Testing before publication

Mandatory scenarios before submission:

Cold start: launch via Steam without pre-opened SteamVR — VR Runtime should start automatically. Hot switch: launch with already-open SteamVR, then headset change (if testing multi-HMD support — Index + Quest via Link). Non-VR launch: game shouldn't crash if VR Runtime unavailable — either graceful fallback or clear message.

Test on Valve Index if game positioned as PC VR — mandatory: different specifics with finger tracking via SteamVR Skeletal Input and Lighthouse tracking.

Task scope Estimated timeline
Manifest setup + Steamworks config 1–2 working days
Full package preparation with depot setup 3–5 working days
Iterative fixes after Steam QA 1–2 days per cycle

Cost determined after project analysis and current build state.