Exokit
Native VR/AR/XR engine for JavaScript 🦖
Install / Use
/learn @exokitxr/ExokitREADME
Examples
<a href="https://youtu.be/cd_DEwCDF6U"><img alt="Hands Reality Tab" target="_blank" src="https://user-images.githubusercontent.com/29695350/55507781-0e463300-561e-11e9-9b1a-f43b8259d041.gif" height="190" width="32%"></a> <a href="https://youtu.be/b-UKSg0QCRE"><img alt="Live Reload Magic Leap" target="_blank" src="https://user-images.githubusercontent.com/29695350/55507118-a216ff80-561c-11e9-829e-74d8244571c3.gif" height="190" width="32%"></a> <a href="https://youtu.be/O1xA1r5SZUM"><img alt="Tutorial Reality Tab" target="_blank" src="https://user-images.githubusercontent.com/29695350/55507125-a3e0c300-561c-11e9-835f-3a26a9e879b5.gif" height="190" width="32%"></a>
<a href="https://www.youtube.com/watch?v=m_QntqZmd_Q"><img alt="Reality Projection with HTC Vive and Magic Leap" target="_blank" src="https://user-images.githubusercontent.com/29695350/55507271-e60a0480-561c-11e9-87ad-7dc736ba0760.gif" height="190" width="32%"></a> <a href="https://youtu.be/i0MXRCNkdB4"><img alt="Emukit" target="_blank" src="https://user-images.githubusercontent.com/29695350/55507623-a8f24200-561d-11e9-97a3-194b6b4a1d8b.gif" height="190" width="32%"></a> <img alt="Various Exokit Apps" target="_blank" src="https://user-images.githubusercontent.com/29695350/55506701-ba3a4f00-561b-11e9-9e19-ba808bed7c5a.gif" height="190" width="32%">
Find more examples here and on YouTube.
Overview
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.
:eyeglasses: 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
:electric_plug: 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
:thumbsup: 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.
:thumbsdown: 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.
:book: 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.
Quickstart
Desktop
<h4><a href="https://unavailable">Download for current OS</a></h4>Run a WebXR site (desktop)
exokit https://aframe.io/a-painter/ # start A-Painter in Exokit
Magic Leap
<h4><a href="https://unavailable/magicleap">Download for Magic Leap</a></h4>Run (Magic Leap device)
mldb connect 192.168.0.10:1131 # 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:*
Architecture
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 BUILDING.md.
git clone https://github.com/exokitxr/exokit.git
cd exokit
npm install
node . <url> # or node . -h for home
Debugging
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.
Flags
--xr webvrMakes 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
- Join our Discord for hanging out.
- Follow @exokitxr on Twitter for updates.
Contributing
Get involved! Check out the Contributing Guide for how to get started.
License
This program is free software and is distributed under an MIT License.
Related Skills
node-connect
345.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
106.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
