Exokit
Javascript post-screen AR/VR/WebXR engine 🦖

Quickstart
Download for current OS
Build your own
git clone https://github.com/webmixedreality/exokit.git
cd exokit
npm install
node . # or node -h for home
Run a WebGL/WebXR site
exokit https://emukit.webmr.io/ # start Emukit in Exokit
Introduction

Exokit is a post-screen web engine.
It loads regular HTML5 pages using standards like:
- WebGL
- WebXR
- WebAudio
- Etc.
It's designed for WebGL, WebGL2, WebXR, and immersive AR/VR. It's faster than Chrome, extensible and embeddable into other environments.
The catch? It doesn't do 2D. (But it comes with a build of Chromium, which does.)
It can open blend multiple WebXR sites at a time with "reality tabs".
Exokit is agnostic about how you write your code. It works with frameworks like THREE.js, A-Frame, Babylon.js, and web builds of Unity.
Architecture
Exokit is a Javascript Node.js module.
Lightweight C++ bindings hook into WebGL, WebXR, Magic Leap, Leap Motion, and various other device APIs.
It's also extensible and embeddable -- you can add your own things to the browser core, and const {window} = require('exokit')()
to get an immersive browser in another project.
Exokit runs on Windows, macOS, Linux (x64), and Linux (ARM64).
Web API support
- HTTP/S
- HTML5
<script>
- DOM
- WebGL
- WebXL
- Canvas2D
- WebSocket
- Web Workers
<img>
,<audio>
,<video>
- WebAudio
- Keyboard/Mouse events
- Gamepad API
<iframe>
- No HTML layout
- No HTML rendering
- No CSS
- No Legacy APIs
Hardware bindings
- OpenGL
- OpenVR (Steam VR)
- Magic Leap
- Leap Motion
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 "web browser".
- You don't care about 3D or mixed reality.
- You're looking for strict and/or legacy standards support.
Debugging
Uses ndb.
npm run debug
Then in the console, input:
let window = await require('./index').load(yourUrl);
Now you have a handle on the window object as you test your application, and
you can set debugger
breakpoints and such.