Skip to content
← Projects

XiloOVR

Windowless SteamVR wrist overlay in C#: loot checklist, laser input, Twitch and YouTube chat — without touching the game.

Year
2026
Status
In progress
Type
Tool · Open source
Stack
C# · .NET 8 · OpenVR · GDI+
Links
GitHub
Runtime
.NET 8, one self-contained executable
Rendering
GDI+ into a pixel buffer, raw overlay
Item database
1400+ items in 18 categories

checklist.json

{
  "entries": [
    { "itemId": "valuable.task.ark_floppydisk", "needed": 1, "collected": 0 },
    { "itemId": "valuable.task.johnny_drill", "needed": 3, "collected": 1 }
  ]
}
The active checklist is a plain JSON file: edit it on the desktop and the wrist panel reloads.

What it does

A small panel attached to your controller in SteamVR — LIV or OVR Toolkit style — for Contractors Showdown: ExfilZone. It shows a checklist of loot and quest items with collected/needed counters, so you can check what you still need without opening the in-game menu. You point with the free hand: a visible laser beam, trigger adds one, grip removes one; the plus cell opens an item search on the VR keyboard over a database of 1400+ items with icons. The same panel carries your Twitch chat (with replies typed in VR), YouTube live chat merged into the same feed, and banners for subs, raids and follows. Settings live in a tab of the SteamVR dashboard, and one toggle registers the app in SteamVR's own autostart list.

How it's built

C# on .NET 8, talking to OpenVR directly through Valve's official C# binding — no Unity, no game engine. The panel is drawn with GDI+ into a pixel buffer and submitted to the compositor as a raw overlay, which keeps the whole thing a single self-contained executable with a tray icon and no windows. Pointing is custom hit-testing over the overlay's intersection API; the wrist attachment re-asserts itself after controller reconnects and scene switches. Config, checklist and item database are plain JSON files, watched and hot-reloaded, so you can edit them on the desktop and see the panel change. Twitch chat is anonymous IRC by default, so reading needs no login. The code cross-compiles from macOS; every push to main builds a downloadable Windows artifact.

  • Out of scope by design: memory reading, DLL injection, traffic parsing, OCR — the app knows nothing about the running game
  • Item data is generated from game data extracted by contractors-data; the icons come from the community project exfil-zone-assistant (MIT)