Skip to main content

FAQ

Start here

Before anything else, run this in your server console:
It checks the bridge and framework, ox_lib, oxmysql, your inventory, the locale, the valet price, Config.FirstPersonOnly, the roadvr_profiles table, whether every Beat song file is in place, and the optional xsound and RoadPhone integrations — and it names which one is unhappy. Most of the accordions below are things roadvr diag will tell you outright.

Installation

Nowhere. RoadVR has no license key step. In RoadVR, API.lua is the exports file for other developers, not a place to put credentials — it is in escrow_ignore precisely so people can read it.If you are used to RoadPad or RoadPhone, this is the one thing that is different.
RoadVR declares three dependencies and FiveM refuses to start it without them: OneSync, ox_lib and oxmysql. Check that OneSync is on and that both resources are ensured before roadvr.
No. Every table is created on first start, and an older installation has missing columns added automatically.The SQL files ship for two cases only: a database user without CREATE permission, and a server owner who wants to read the schema before a script touches their database. See About the database.
The player’s profile could not be loaded from the database in time. Check the oxmysql connection and the server console for database errors — RoadVR turns the headset off rather than letting a player edit a profile that never arrived.
roadvr_models is not running. It streams the headset the player wears and the one carried between hands and head. Ensure it before roadvr.Peds without a glasses slot need Config.Visor.mode = 'prop' — see Configuration.
ESX, QBCore, Qbox and standalone. RoadPhone is detected when present but is not a requirement. It has to be version 2.6.0 or newer — older versions are treated as no RoadPhone at all.
That line is informational. No RoadVR feature needs xsound.

Getting in

Check that the item name in your inventory matches Config.Item (roadvr_headset by default), and that the item is registered as usable. RoadVR registers the usable item itself, but the item has to exist in your inventory’s item list first.The player also has to be in first person — otherwise they get “RoadVr only works in first-person view.”
That is Config.FirstPersonOnly. First person is the condition for putting the headset on, and for keeping it on. Set it to false to allow every view.
Set Config.Item = ''. Everybody can then use the headset, and the way in is /roadvr_toggle or the FiveM keybind of the same name. On a standalone server this is the only way, because there are no usable items.
That is deliberate. A default would take a key away from every server that installs RoadVR. Players bind it once themselves under Settings → Key Bindings → FiveM.
F7 only works while the headset is on. In a car with the cockpit bar, F7 shows and hides the bar instead of the home screen. If neither happens, another resource has taken F7 — rebind it in the FiveM key settings.

Using it

You are in passthrough. Look at a window and press E to focus it — that is what frees the mouse. ESC goes back.
The widget key ships unbound. Open the editor with the Widgets button under the home screen, the Widgets switch in the Control Centre, or /roadvr_widgets — and bind a key to it in the FiveM key settings if you want one back.
Config.Locale sets the language of Lua-side messages — notifications and errors — and is the interface language for everybody who has not picked their own. Once a player chooses a language in Settings → General, their choice wins for the interface.A player seeing English windows on a German server is not a bug; it is their setting.
Check its anchor. Come along follows the player, Stay in place stays put. Every window has its own anchor button in the bar below it, and each player sets the default for new windows in Settings → Windows.
Four reasons, in order of likelihood:
  • the surface is tilted more than Config.Widgets.maxSurfaceTilt and counts as floor or ceiling
  • that spot already carries Config.Widgets.maxPerCluster widgets (3) within clusterRadius (5 m) — the notification says “that spot already has enough widgets on it”
  • you are further away than Config.Widgets.reach (6 m)
  • you already have Config.Widgets.max widgets up (12)
Look at the distance first — beyond Config.Widgets.renderDistance (10 m) a widget is not drawn, but it is still saved.They also step aside once Config.Widgets.hideAtPanels app windows are in view at the same time (3 by default), and they are hidden while an environment runs unless Widgets in an environment is on in Settings → Comfort.
Config.MaxPanels (4) app windows can be open at once. Opening a fifth closes the oldest, with a notification saying so.
A confirmed valet fee stays charged if the delivery fails later. There is no automatic refund.

Environments

Config.Environments.list is empty — usually an old config.lua from the panorama days. Put the three built-in landscapes back; see Environments.
Config.Environments.blockedApps — basketball, beat, chess, darts, drone and the map by default. Each of them puts something into the world, and the landscape is exactly what stands between the player and the world.
Panorama images were replaced by three built-in 3D landscapes. Entries with image are ignored and public/environments/ is no longer read. See Coming from panoramas.

Updates

With Config.Updates.enabled, the server checks RoadVR’s public version file on start and every intervalMinutes. The console announces a new release, and players see it under Settings → Updates with the release notes. Nothing is installed automatically.
Not if you keep your config.lua. Every block you do not add from the new version falls back to the shipped default, and the console names the missing blocks. See Updating.

Performance

Config.MaxPanels (4) caps app windows and Config.Widgets.max (12) caps widgets. Both exist for this reason. Config.Widgets.hideAtPanels sheds the decoration automatically once the workspace fills up.
Unthrottled, the map’s textures take about 420 MB of video memory. Halve Config.Gps.texture.base first.
The windows are drawn by the interface, separately from the game’s own frame, so on a very fast turn they can trail slightly. How much depends on frame timing and hardware — a steady frame rate keeps it small.

Developers

Yes, and that is the supported way. Your own resource registers an HTML page and it appears on the home screen — RoadVR is not modified, so an update overwrites nothing.See Custom Apps, Custom Widgets and Custom Games.
Yes — that is what the SDK is for. It also tells your page when its window is about to close.
In API.lua inside the resource. It is in escrow_ignore, so it is readable. The same list with parameters is at Client API.
No. The shipped package contains the built interface in public/ and no ui/ folder — which is also why custom apps are loaded as pages rather than compiled in.

Still stuck?

Discord Support

Post the output of roadvr diag — it saves a round of questions