Skip to main content

Monadeck — a SteamVR-style Launcher for Monado

Envision works, but I never liked its GTK UI or its PATH-bound, .desktop-file plugin system — and it does a lot of things (source builders, driver profiles, dependency checks) I never use. So I built Monadeck: a SteamVR-style launcher and orchestrator for my Monado fork, focused on the ~40% of Envision I actually reach for.

Repo: github.com/Eidenz/monadeck — grab the latest release there.

Think of it as the SteamVR you no longer have: it starts the runtime, shows you what's connected, and gives you an in-headset dashboard to launch games and adjust your playspace.

What it does

Runtime orchestration (the desktop app):

  • Starts and stops monado-service with the right environment for your headset (render scale, pacing, compositor, NVIDIA/AMD tweaks) — no launch-option guesswork.
  • Registers Xrizer as your OpenVR runtime automatically.
  • Shows a live device strip (headset, controllers, trackers, gloves) with battery levels via libmonado.
  • Launches overlay plugins by explicit path or by picking an installed app.

One-click setup (no building):

  • If no Monado is found, Monadeck can download the prebuilt portable fork and Xrizer for you, into its own folders — it never touches or overwrites an existing install.
  • A built-in pre-flight check verifies the xr-hardware udev rules and pkexec are present, and tells you exactly how to fix them if not.

Coexistence is a hard rule: every runtime switch backs up your active_runtime.json and openvrpaths.vrpath, and restores them when you stop — so Monadeck never breaks an existing SteamVR setup.

In-headset dashboard

Enable the built-in overlay and you get a curved, SteamVR-style dashboard you can summon over any game:

  • Game library — Steam and non-Steam titles (it parses shortcuts.vdf, which most launchers miss), with cover/hero/logo art, favorites, collections, sorting, and playtime.
  • Playspace mover — nudge and rotate your play space like OVR Advanced Settings, with per-game overrides on top of a global offset.
  • Timer, battery readouts, low-battery warnings, and in-headset toasts.
  • Set active / Freeze / Kill per running app (Freeze uses the fork's controller-freeze feature).
  • Haptics and optional UI sounds.
  • A Help button in Settings shows every gesture the overlay understands, in-headset.

Desktop viewer (the WayVR part)

Monadeck's overlay also mirrors your desktop into VR, so you don't need a separate overlay app for that anymore (WayVR still works alongside it if you prefer it):

  • Screens — each monitor is captured through the desktop portal and PipeWire straight into the GPU (DMA-BUF, zero copy) and shown as a flat or curved panel. Grip to move, grip + trigger to resize, stick to push/pull or curve; drop one next to another to dock them edge-to-edge. Per-screen opacity, a frame-rate cap and an optional downscale keep the cost down; capture pauses when you're not looking.
  • Mouse — the laser drives a real (uinput) mouse: trigger clicks and drags, A right-clicks, B clicks without moving, the stick scrolls. Scroll speed and drag threshold are sliders.
  • Keyboard — a full ISO keyboard with F-row, nav cluster, numpad and Copy/Cut/Paste, labelled from your real xkb layouts, with a layout switcher (KDE), clipboard preview, key repeat, Shift lock and one-shot modifiers. It floats or docks under a screen; both hands can type. Optionally it pops up on its own when a text field gets focus on the desktop.
  • Layouts — save the whole arrangement (screens, sizes, curves, keyboard) under a name, e.g. Standing and Lying down, and switch from the watch. The last one is loaded on start, hidden, and a double-B on the left hand brings it up where it was.
  • Wrist watch — clock and date, extra time zones, battery levels, a timer, now-playing with transport controls (MPRIS), the last notifications behind a bell, and four configurable quick buttons (keyboard, recenter, next layout, freeze, timer, screenshot, screens, mute, photos) plus a menu button and one toggle per screen.
  • Notifications — desktop notifications and XSOverlay-protocol messages (VRCX and friends, udp/42069) show as toasts with the app's icon, with their own sound and volume.
  • Screenshots — the fork's in-headset screenshots (finger-frame gesture, controller chord) land on the watch for a quick look, can be opened into floating photo windows (copy, delete, translate, share), and are browsable on the Photos page. This replaced my old standalone monado-frame overlay.
  • 360° background while no game is running (bring your own equirect image, or keep the default).

Visual binding editor

Instead of hand-editing Xrizer/SteamVR binding JSON (see the manual method), Monadeck bundles a visual binding editor: browse your games, click controller zones, assign actions, tweak parameters, and save straight to an Xrizer per-game override. Index/Knuckles are fully supported.

Bonus: flat games in VR (UEVR mode)

Monadeck can inject UEVR into flat Unreal Engine games for you — it downloads the injector, launches the game under Proton, and waits for injection, all from the in-headset library. See the UEVR page for the details.

note

Monadeck targets my Monado fork running from prefix /usr (or a Monadeck-installed portable copy). It also works against stock Monado — features that need the fork (like controller freeze) simply hide themselves when the loaded runtime doesn't support them.