Source: Steam Community (opens in a new tab)
vrOS v1.2.6 Patch Notes
Highlights
- The desktop app may freeze the first time it's launched after updating — restart vrOS from the system tray to use it normally.
Enhancements
- First-time entry into the compact dashboard now shows a one-time dialog explaining how to return to the full-size dashboard. The dialog reads your current logo-gesture binding and names the actual gesture (defaults to "long-hold the vrOS logo"), or points you to Settings if no gesture is bound. The acknowledgement persists across restarts.
Bug Fixes
- Popped-out FPS tab (and every other popout, ad overlay, and alert overlay) now correctly shows live data when SteamVR is running — a regression from the v1.2.5 IPC refactor silently dropped async bridge replies for any view other than the main dashboard, leaving popouts stuck on the "available in VR" stub
- Desktop window no longer freezes for up to 5 seconds when restarting VR overlays, opening popouts, or polling perf timings while the VR child is mid-recovery — these calls now run off the desktop's main event loop
- Eliminated the startup log cascade when launching alongside SteamVR (DX11 readiness queries piling up, UI frame cap dropping to 15 fps, abandoned readiness queries) — added a 500 ms grace window covering the SteamVR compositor handover
- UI frame cap now recovers back to 30 fps once temporary GPU pressure subsides; previously stayed pinned at 15 fps for the rest of the session
- Twitch and OBS reconnect loops resist flapping endpoints — a server that accepts the handshake but drops in under a second no longer pins backoff at 1 s. A healthy session of at least 2× the current backoff (minimum 5 s) is required before backoff resets
- Reconnect sleeps now use ±25 % jitter to spread out simultaneous attempts across Twitch IRC, Twitch EventSub, and OBS
- Integrations (Twitch, OBS, VRChat, OSC) now shut down cleanly via cancellation tokens with a 1 s drain instead of bare task aborts. OBS additionally sends a WebSocket Close frame on shutdown
- VR pose loop no longer stalls during playspace calibration if the event bus is contended
- Launcher now shows a Windows error dialog if the main DLL fails to load, instead of silently exiting with code 1
- Removed a startup warning about a missing recovery-incident handler in the VR child
- Reduced log noise: transient pipe-decode errors that auto-recover are now logged as WARN instead of ERROR
Improvements
- Heavy IPC traffic (audio meters, Twitch chat, video frame metadata) uses less CPU — pipe writes now reuse a single buffer and flush once per batch instead of per message
- VR child crash recovery is now near-instant for in-flight bridge requests: all pending callers receive a structured disconnect error immediately instead of timing out one at a time
- JS bridge callbacks now arrive in a single batched call instead of one round-trip per callback, smoothing burst response
- Stuck pipe requests evict after 8 s instead of accumulating across the session
- Bus event batches drain up to 32–64 messages per select iteration instead of one-per-iteration
- Twitch settings subtab no longer trips the "slow bridge poll" warning — 5 more handlers moved off the UI thread
- Channel Points Rewards panel renders faster — Soundpad / VRChat Avatar / Camera Control sections are collapsed by default and only mount their action lists when expanded
- Twitch channel-point redemptions and chat-command reloads no longer tie up an async runtime worker thread while the SQLite read completes — the load moved to tokio's dedicated blocking thread pool, so other async tasks scheduled on the same worker keep running
Notes
- This release closes the last items of the IPC audit started in v1.2.5. The desktop/VR pipe is now fully off the UI and main event-loop threads — no synchronous IPC waits remain on either side.