vrOS
Docs

Extensions

Add what you need. Nothing you don't.

The core of vrOS is overlays, input, performance, and playspace. Creator tools are extensions you turn on one at a time — each one declaring the capabilities it uses, and stopped until you decide.

vrOS 2.0.0 ships that foundation first. The creator features return as extensions, incrementally, and this page says which ones and when.

How they work

Separate programs, running on your permission.

Supervised, not stitched in

A third-party extension runs in its own process. If it crashes it restarts on the policy in its own manifest, and the rest of vrOS keeps running. Built-in extensions run as supervised tasks inside the app on the same discipline.

Consent, one capability at a time

Before an extension runs, vrOS lists what it asked for — overlays, capture, audio, the event bus, network — in plain words. You grant each one, and you can revoke any of them later in Settings → Extensions. An update that asks for something new asks again for that one thing.

Honest about what a grant is

Capabilities the vrOS API controls are enforced by vrOS. Network access is disclosure, not a sandbox: a native program can open a socket without asking vrOS, so the manifest declares it and you see it before you enable anything.

State that survives a crash

An extension's state lives in the vrOS store, not in the extension's process. A crash, a restart, or a reboot brings it back where it was, and SteamVR coming and going never tears it down.

Works with the headset off

vrOS is a desktop app first and so are its extensions. Sending an OSC message or firing a soundboard pad works with SteamVR closed.

Idle means idle

An extension that is enabled but doing nothing runs no timers, polls nothing, and repaints nothing. OBS control polls stream and recording status only while a panel showing it is on screen.

Extensions install from a folder on your own machine, and the consent screen comes before the first run. Signed distribution is a later step.

Panels

An extension's UI is the same UI.

Extensions ship their panels as Slint files and vrOS renders them itself — same renderer, same theme, no web engine anywhere near it.

  • A panel can be a tab in the Dash or a floating overlay you place in your space
  • The built-in extensions' panels ship in all nine languages, like the rest of vrOS
  • Overlay panels anchor to the world, your head, or either hand, and come back where you left them after a restart
  • The VR keyboard types into an extension panel the way it types into a vrOS one
  • A panel that fails to load names the extension and the error instead of going blank

The roster

What ships, and when.

Four extensions, in the order they are being built. VRChat OSC, OBS control, and the soundboard are in the v2.0.0 launch set. Twitch chat is last in the order and has no release date yet.

VRChat OSC

At launch

The VRChat OSC surface in one place: a chatbox with a typing indicator and a sound toggle, avatar parameters in and out, avatar changes, the input namespace, and the camera namespace. OSCQuery and mDNS let VRChat find it and the port it listens on. That port is bound to loopback by default, so nothing else on your network can push parameters at your avatar. The chatbox panel anchors to your wrist.

OBS control

At launch

Connect to any number of OBS instances, local or remote, over obs-websocket. Switch scenes, start and stop the stream or the recording, toggle and lock sources, and read the stats. A compact director panel floats in front of you with the scene grid, stream and recording state, and tally.

Soundboard

At launch

Pads with per-entry volume and loop, played through the vrOS audio engine. One sound can reach more than one output at once, so a clip hits your headphones and a virtual mic together. Pads are commands, so you can bind them to a controller in SteamVR.

Twitch chat

No date yet

Chat on a panel, next to everything else. Signing in uses the device-code flow, so vrOS never sees your password. It is last in the order.

Built-in extensions arrive with their capabilities already granted. You can revoke any of them in Settings → Extensions, the same as a third-party one.

Building one

The API the built-in ones use.

Extensions talk to vrOS over a local socket — JSON-RPC, one object per line — so an extension can be written in any language. First-party features are built on that same API on purpose: if VRChat OSC cannot be built on the extension API, the API is wrong.

The extension SDK is not public yet.