Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Simula is a VR window manager for Linux that runs on top of Godot. It takes less than 1 minute to install.

Video: Demonstration.

Compatibility: Simula is officially compatible with SteamVR headsets equipped with Linux drivers (e.g. HTC Vive, HTC Vive Pro, & Valve Index). We have also added experimental support to OpenXR headsets that have Monado drivers (e.g. North Star, OSVR HDK, and PSVR). Some people have gotten the Oculus Rift S to run Simula via OpenHMD (see here), though we have not officially tested this ourselves.

Mission: Facilitate a Linux future for VR & AR Desktop. In the short-run, this means allowing people to run 2D Linux apps with current generation headsets. In the long-run, this means allowing people to run Linux in standalone AR & VR HMDs.

Simula One Headset: We are also in the process of developing a (limited number of) portable VR headsets for sale which come with SimulaVR mounted on them by default. If you are interested in purchasing one, visit our website and join our waitlist to receive a place in line and/or periodic updates on its development.

Origins: Simula is a reimplementation fork of motorcar. To read about motorcar, see Toward General Purpose 3D User Interfaces: Extending Windowing Systems to Three Dimensions

Text Quality

A common objection to the viability of VR Desktop is that it exhibits poor text quality; however, with our low pass filter, Simula has taken special care to make text quality as clear as possible:


The left image is a VR terminal without our filter applied; the right is the same image with our filter applied. Compared to other VR Desktops, Simula allows for significantly longer sessions without uncomfortable eye strain.


To install Simula on all Linux distros, run:

# Clone
git clone --depth 1 --recursive
cd Simula

# Download (or build, if downloading fails)
source ./utils/ && installSimula

# Launch
./result/bin/simula # Needs SteamVR to be running

Installing Simula should take less than 1 minute: this script doesn’t actually compile anything on your system, but instead downloads the appropriate binaries from our cache in a way that is system and driver agnostic. Under the hood, we (i) check whether you have nix and cachix installed (and, if not, install them); (ii) check which graphics drivers you have and (iii) download Simula via cachix with the appropriate driver flags, falling back to a nix build if downloading fails.

On NixOS systems, you must ensure

nix.trustedUsers = [ "root" "<your_user_name>"];

is added to your configuration.nix, or the install command above will be unable to download Simula from our cache, instead falling back to a manual build (which takes 1hr+).

OpenXR Backend (Optional)

If you want to avoid using SteamVR, Simula supports an optional OpenXR backend (e.g. monado). To use, adjust _backend from OpenVR to OpenXR in ./config.dhall. You will then be required to ensure that an OpenXR runtime (e.g. monado-service) is running on your system before launching Simula. In addition, you must tell Simula where your is located:

monado-service &
XR_RUNTIME_JSON=/path/to/your/openxr_monado-dev.json ./result/bin/simula

with openxr-dev.json encoding the location of your

    "file_format_version": "1.0.0",
    "runtime": {
        "library_path": "/path/to/your/openxr/build/src/xrt/targets/openxr/"


To update Simula to the current master (without losing your configuration adjustments), simply run

./source/ && updateSimula


Simula Mouse & Keyboard Controls

Windows become “active” once you look at them. Active windows receive typing events from the keyboard, and cursor events from mouse movement. In addition, the following window-manipulation shortcuts are provided by default into Simula (these can be adjusted by changing ./config.dhall):

Key binding.Action
Super + Shift + EscapeTerminate Simula
Super + zToggle Simula’s mouse & keyboard grab from your host OS (see below)
Super + /Quick launch terminal
Super + ApostropheSend window cursor to gaze point (hold down to make cursor follow gaze)
Super + EnterLeft click surface cursor at gaze point
Super + Shift + EnterRight click surface cursor at gaze point
Super + AltGrab surface for movement (release to let go)
Super + mGrab all surfaces for movement (release to let go)
Super + Shift + mGrab all surfaces in all workspaces at once for movement (release to let go)
Super + aLaunch Simula’s app launcher (synapse)
Super + eCycle Simula’s background environment
Super + fOrient window towards user gaze
Super + 9Scale window to smaller size
Super + 0Scale window to larger size
Super + <number between 1 and 8>Switch to workspace <num>
Super + Shift + <number between 1 and 8>Move window to workspace <num>
Super + Shift + 0Pin window to all workspaces
Super + -Increase window resolution (“zoom out”)
Super + =Increase window resolution (“zoom in”)
Super + <right>Extend window horizontally
Super + <left>Contract window horizontally
Super + <down>Extend window vertically
Super + <up>Contract window vertically
Super + Alt + <down>Decrease window transparency
Super + Alt + <up>Increase window transparency
Super + sResize window to take its default (typically square) dimensions
Super + CommaMove window towards you
Super + PeriodMove window away from you
Super + BackspaceKill surface being looked at
Super + kQuick launch firefox (requires firefox to not already be launched on host)
Super + gQuick launch google-chrome (requires chrome to not already be launched on host)
Super + wLaunch headset webcam view
PrtScToggle “screenshot” mode (drag a selection on the current window to generate a ./media/*.png and copy it to the X clipboard).
Shift + PrtScTake global screenshot (saved to ./media/*.png)
Super + Shift + PrtScToggle video recording (saved to ./media/*.mkv); useful for sending bug reports.
Super + rReload Simula’s configuration (./config.dhall)

NOTE: In order to prevent Simula’s keyboard shortcuts from conflicting with your existing window manager’s shortcuts, Simula “grabs” the system keyboard and cursor from your host OS to prevent input events from propagating past Simula. This creates a problem: it is then impossible for you to escape Simula once you launch it! In order to get around this, press Super + z to ungrab Simula, which will restore mouse and keyboard control to your normal window manager.

VR Controllers

  • Left-clicking. Use (7) gently (you don’t have to go all the way down to click).
  • Right-clicking. Use (1).
  • Scrolling. Scroll up and down via (2).
  • Text dragging. Hold (7) down and drag.
  • Window manipulation. Point at a window and, while holding (8), move your controller around. The windows should “levitate” in the direction of your movement.
  • Window rescaling. Point at a window, hold (8) down, and then scroll up and down on (2).

Mouse & Keyboard View

Simula has a headset webcam view (binded presently to Super + w) that allows you to see your mouse and keyboard from VR.


  • Many things are configurable in Simula. See ./config/config.dhall for a self-documenting list of things to adjust.
  • Simula also uses i3status to display system information in its HUD. The default configuration can be found in ./config/i3status.config, and can be adjusted per these instructions.

Simula One Headset

We are in the process of developing a (limited number of) portable VR headsets for sale which come with SimulaVR mounted on them by default. If you are interested in purchasing one, visit our website and join our waitlist to receive a place in line and/or periodic updates on its development.


For troubleshooting and discussion, join our community at