Skip to content
Native VR/AR/XR engine for JavaScript πŸ¦–
JavaScript Python C++ Inno Setup Shell Java Other
Branch: master
Clone or download

Latest commit

avaer Merge pull request #1422 from jcc10/master
Added documentation for `--xr webvr` flag
Latest commit 29e5df2 Apr 1, 2020


Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Rename GitHub issue template to be a single one May 6, 2019
android Clean up android webview java mouse event offsets Jun 23, 2019
assets smaller chevron size in background Apr 22, 2019
buildtools Revert "Add buildtools: curl, unzip" Apr 15, 2018
examples simplify per CR feedback Sep 1, 2019
lib Revert to older three-min.js Jun 3, 2019
metadata Merge branch 'master' into user-parallel May 21, 2019
res/Icon_Grid Update magic leap icon model Dec 31, 2018
scripts remove magicleap-js submodule Aug 11, 2019
src Bugfix xrOffset pose adjustment matrix inverse Sep 15, 2019
tests/unit Remove remaining sinon references Jul 4, 2019
.eslintrc.json add linter Jul 4, 2018
.gitignore add android build files to gitignore May 5, 2019
.travis.yml Merge branch 'master' into cleanup-scripts May 23, 2019 Fixed per review Feb 19, 2020 Fix broken link to documentation in Jul 9, 2019
Dockerfile update node 12.0.0 to 12.2.0 May 18, 2019 Update year to 2019 Apr 13, 2019 Clarification as to what the flag actually does. Apr 1, 2020
android.Dockerfile Update android Dockerfile to be based on Debian Stretch Jul 10, 2019
appveyor.yml Merge pull request #1080 from exokitxr/appveyor-commit May 21, 2019
binding.gyp Converted globs to relative file paths Aug 22, 2019
bugsnag.txt Add bugsnag.txt Bugsnag API key Jun 23, 2018
exokit.cpp Bugfix native browser exposure Jun 19, 2019
main.cpp Add main.cpp --experimental-vm-modules Jul 14, 2019
package.json Remove dead cross-env dependency Sep 5, 2019



πŸ•ΆοΈ Native VR and AR engine for JavaScript πŸ¦–

Site β€” Docs β€” Discord β€” Twitter β€” Email List


Hands Reality Tab Live Reload Magic Leap Tutorial Reality Tab

Reality Projection with HTC Vive and Magic Leap Emukit Various Exokit Apps

Find more examples here and on YouTube.


This project enables developers to build XR experiences using the same code that runs on the web. Exokit engine is written on top of Node and emulates a web browser, providing native hooks for WebGL, WebXR, WebAudio, and other APIs used in immersive experiences.

πŸ‘“ Exokit currently targets the following platforms:

  • OpenVR Desktop VR (Steam compatible)
  • Oculus Desktop (Oculus Rift/Rift S)
  • Oculus Mobile (Oculus Quest/Go, GearVR)
  • Magic Leap
  • iOS ARKit *
  • Android ARCore *
  • Google VR (Daydream / Cardboard / Mirage Solo) *
  • any XR device, start a pull request with a native binding if it isn't listed here! *

* not supported yet

πŸ”Œ Since Exokit supports anything that runs on the web, it powers experiences built with:

  • Three.js
  • Unity
  • Pixi.js
  • Babylon.js
  • A-Frame
  • Custom WebGL frameworks
  • WebAssembly, TypeScript, and any language that transpiles to JavaScript

πŸ‘ Why Exokit?

  • You want your WebGL/WebXR to run fast.
  • You want the hot new web APIs.
  • You want to add your own integrations -- including native -- into a browser environment.
  • You want a lightweight browser as a hackable node module.
  • You want to combine the web with a 3D engine like Unity.

πŸ‘Ž Why not Exokit?

  • You're looking for a traditional "web browser".
  • You don't care about 3D or mixed reality.
  • You're looking for strict and/or legacy standards support.

πŸ“– Manifesto

  • The future is immersive. The web is the best application platform. Javascript is the best ecosystem.
  • Content should be hardware agnostic. Tomorrow will have different hardware. VR and AR should be compatible.
  • It's not possible to do both 2D and 3D well. We don't do 2D. We can use an external 2D browser.
  • Use your favorite game engine. Exokit is not a game engine.
  • Legacy browser design choices don't make sense in XR.
  • Exokit empowers and connect apps, even (especially) if they aren't designed to cooperate.
  • Apps should run in "reality tabs", layers of reality that blend together.



Download for current OS

Run a WebXR site (desktop)

exokit # start A-Painter in Exokit

Magic Leap

Download for Magic Leap

Run (Magic Leap device)

mldb connect # mldb needs to be connected; see MLDB documentation
mldb install -u exokit.mpk # downloaded or built package
mldb launch com.webmr.exokit -v "ARGS=node . file:///package/examples/hello_ml.html" # or URL to load
mldb log exokit:*


Exokit is a Javascript Node.js module.

C++ bindings hook into WebGL, WebXR, Magic Leap, Leap Motion, and various other device APIs.

const {window} = require('exokit')() to get an immersive browser in another project.

Exokit runs on Windows, macOS, Linux (x64), Linux (ARM64), and Magic Leap (ARM64).

Web API support

  • HTTP/S
  • HTML5
  • <script>
  • DOM
  • WebGL
  • WebXR
  • WebVR
  • WebRTC
  • Canvas2D
  • WebSocket
  • Web Workers
  • <img>, <audio>, <video>
  • WebAudio
  • Keyboard/Mouse events
  • Gamepad API
  • <iframe>
  • HTML layout
  • HTML rendering
  • CSS
  • Legacy APIs

Hardware bindings

  • OpenGL
  • OpenVR (Steam VR)
  • Oculus
  • Oculus Mobile
  • Magic Leap
  • Leap Motion

Local Development

See full building instructions in

git clone
cd exokit
npm install
node . <url> # or node . -h for home


Uses ndb.

npm run debug

Then in the console, input:

let window = await require('./src/').load(yourUrl);

Now you have a handle on the window object as you test your application, and you can set debugger breakpoints, inspect memory, profile CPU, etc.


  • --xr webvr Makes exokit WebVR mode regardless of the webpage. If exokit is always opening in pancake mode you can use this to try to fix that.

Stay in Touch


Get involved! Check out the Contributing Guide for how to get started.


This program is free software and is distributed under an MIT License.

You can’t perform that action at this time.