This guide explains how to set up and use the VR overlay system in EliteG19s, which works with both SteamVR and OpenXR VR platforms. The overlay appears as a floating window in your VR headset, allowing you to view and interact with the app's screens without removing your headset.
The VR overlay system renders the EliteG19s interface as a floating quad (flat panel) inside your VR headset. You can:
EliteG19s uses the OpenVR SDK to render overlays in SteamVR. This works with:
Note: Some older VR runtimes may have limited overlay support. Ensure SteamVR is up-to-date.
EliteG19s 4.3+ includes native OpenXR overlay support via a native API layer (EliteG19s-OpenXR.dll). This works with:
Advantages of OpenXR:
The OpenXR API layer is automatically installed with EliteG19s and registers itself when VR overlay is enabled.
The overlay should appear in your headset. If it doesn't, verify that:
Your VR controller buttons work as follows:
| Button | Action |
|---|---|
| Trigger | Left-click (activate buttons, scroll selections) |
| Grip | Right-click (open menu, go back) |
| Thumbstick / D-Pad | Navigate menus (up/down/left/right) |
| Face Buttons (A/B/X/Y) | Context-dependent shortcuts |
When you move your controller below the overlay, the toolbar appears with positioning and adjustment controls:
| Control | Action |
|---|---|
| Move | Position the overlay in space |
| Rotate | Change the angle (yaw/pitch/roll) |
| Resize | Adjust the overlay width in meters |
| Reset | Return to default position |
| Distance | Move the overlay toward/away from you |
| Monitor Mode | Toggle desktop mirror mode |
To use a toolbar button:
The toolbar also includes a Monitor Mode button (toggle icon). Pressing this temporarily enlarges the overlay to fill more of your view and increases the resolution, making it easier to read small text or interact with dense menus without taking off your headset.
The default overlay position is:
You can adjust this position using the toolbar or by editing options.json.
Repeat for Rotate, Distance, or Resize adjustments.
The toolbar provides three rotation axes:
EliteG19s automatically saves your overlay position per ship. This means:
When you adjust the overlay position while flying a ship, EliteG19s saves that transform to the ship's identity. The next time you fly the same ship, the overlay appears in that saved position automatically.
Per-ship positions are stored in: %AppData%\EliteG19s\memory.json under the OverlayTransforms dictionary, keyed by ship type or ID.
To reset a specific ship back to the default position:
%AppData%\EliteG19s\memory.jsonOverlayTransforms section"Anaconda")The next time you fly that ship, it will use the global default position.
When you're in the main menu (not flying), the overlay uses the default position. Once you board a ship, it switches to that ship's saved position.
Monitor Mode temporarily switches the overlay to a larger, higher-resolution view that fills more of your headset display. This is useful for:
Via Toolbar:
Via Menu:
Via Keyboard:
If not in VR, press M to toggle monitor mode on the desktop.
By default, Monitor Mode uses 1920×1080 resolution. You can adjust this in options.json:
{
"DisplayOptions": {
"SteamVRDisplay": {
"MonitorModeWidth": 1920,
"MonitorModeHeight": 1080,
"MonitorModeWidthMeters": 2.0,
"MonitorModeDistanceMeters": 1.5
}
}
}
Higher resolutions provide crisper text but increase GPU load.
New in version 4.3! VR-Only mode hides the desktop window and shows the overlay only in VR. This is useful for:
Note: You can still alt-tab to bring the desktop window back if needed.
New in version 4.3! When using OpenXR, your VR controllers provide haptic (vibration) feedback in response to in-game events:
Haptic feedback is automatic and works out of the box with OpenXR. If your controllers support haptic feedback, you'll feel these sensations during gameplay.
Note: Haptic feedback requires an OpenXR runtime and controllers with haptic actuators. SteamVR haptic feedback support is limited.
New in version 4.3! You can now bind VR controller buttons and gestures to macros for hands-free automation while in VR.
| Button | Macro Binding |
|---|---|
| Left Trigger | Macro trigger |
| Left Grip | Macro trigger |
| Left Thumbstick | Up/Down/Left/Right |
| Right Trigger | Macro trigger |
| Right Grip | Macro trigger |
| Right Thumbstick | Up/Down/Left/Right |
| Face Buttons | A, B (Xbox), X, Y (PlayStation) — depending on your controller |
| D-Pad Directions | Up, Down, Left, Right |
Create a macro triggered by pressing Right Grip:
GameAction: Request DockingDelay: 500 msGameAction: ConfirmNow whenever you grip your right controller, the app will request docking and confirm automatically!
VR overlay settings are stored in %AppData%\EliteG19s\options.json under DisplayOptions → SteamVRDisplay:
{
"DisplayOptions": {
"SteamVRDisplay": {
"IsEnabled": true,
"Width": 640,
"Height": 480,
"Opacity": 1.0,
"MonitorModeWidth": 1920,
"MonitorModeHeight": 1080,
"MonitorModeWidthMeters": 2.0,
"MonitorModeDistanceMeters": 1.5,
"DefaultTransform": {
"IsEnabled": true,
"WidthMeters": 1.5,
"Position": {
"X": 0.0,
"Y": 1.5,
"Z": -2.0
},
"Rotation": {
"X": 0.0,
"Y": 0.0,
"Z": 0.0
}
}
}
}
}
Configuration Options:
| Option | Type | Description |
|---|---|---|
IsEnabled |
bool | Enable/disable VR overlay |
Width |
int | Render target width in pixels |
Height |
int | Render target height in pixels |
Opacity |
float | Background opacity (0.0 - 1.0) |
MonitorModeWidth |
int | Resolution when in monitor mode |
MonitorModeHeight |
int | Height for monitor mode |
MonitorModeWidthMeters |
float | Virtual width in meters (monitor mode) |
MonitorModeDistanceMeters |
float | Distance from viewer in meters |
DefaultTransform.WidthMeters |
float | Overlay width in virtual space (meters) |
DefaultTransform.Position |
object | X, Y, Z position in meters |
DefaultTransform.Rotation |
object | Yaw, Pitch, Roll rotation in degrees |
Notes:
Width/Height values give sharper UI but increase GPU costWidthMeters controls how large the overlay appears (1.5m is comfortable)X = left/right, Y = up/down, Z = away (negative Z = in front)Per-ship overlay positions are stored in %AppData%\EliteG19s\memory.json under OverlayTransforms:
{
"OverlayTransforms": {
"Anaconda": {
"IsEnabled": true,
"WidthMeters": 1.2,
"Position": {
"X": -0.5,
"Y": 1.4,
"Z": -2.2
},
"Rotation": {
"X": 0.0,
"Y": 5.0,
"Z": 0.0
}
},
"Sidewinder": {
"IsEnabled": true,
"WidthMeters": 1.5,
"Position": {
"X": 0.0,
"Y": 1.5,
"Z": -2.0
},
"Rotation": {
"X": 0.0,
"Y": 0.0,
"Z": 0.0
}
}
}
}
Each ship type has its own transform entry. If a ship is not listed, the global DefaultTransform from options.json is used.
Check:
DisplayOptions.SteamVRDisplay.IsEnabled in options.jsonOpenXR specific:
EliteG19s-OpenXR.dll) exists in your Program Files\EliteG19s folder%AppData%\EliteG19s\log.txt) for OpenXR registration errorsSolution: Increase the render resolution:
Width and Height:"Width": 1024,
"Height": 768
"DefaultTransform": {
"WidthMeters": 2.0
}
Higher values = sharper UI but more GPU load. Start with 1024×768 and increase if your system can handle it.
Cause: Per-ship transforms are not being saved.
Check:
memory.json is writable (not read-only)%AppData%\EliteG19s\If the problem persists, you can manually edit memory.json to add a ship transform (see memory.json section above).
For SteamVR:
For OpenXR:
Check:
Haptic feedback is automatic; if it's still not working, it may be a hardware limitation.
Solutions:
Reduce render resolution:
"Width": 512,
"Height": 384
Lower VR target FPS — Some systems are GPU-limited
Use Monitor Mode sparingly — Monitor Mode uses higher resolution and is less efficient
Update your graphics drivers — Newer drivers often improve VR performance
For SteamVR:
For OpenXR:
The overlay is designed specifically for Elite Dangerous. Overlay support in other games depends on whether the game supports OpenVR (SteamVR) or OpenXR overlays. Some games may not support overlays at all.
For more help: Check the app log file at %AppData%\EliteG19s\log.txt for detailed error messages, or consult the main EliteG19s manual.