JSAR (/dĘ’:-sar/) is a Web browser engine designed for the spatial Web. It enables you to create and present immersive Web contents using the modern Web technologies (HTML5, CSS3, TypeScript) and seamlessly integrate them into mainstream 3D engines like Unity, UnrealEngine, and other 3D engines.
To understand the architectural decisions and core concepts behind JSAR, read our comprehensive guide: Understanding the Spatial Web Browser Engine.
The Spatial Web represents the next evolution of the Web, where every HTML element exists in three-dimensional space with real 3D coordinates, rather than being confined to flat 2D screens. This spatial transformation enables developers to freely leverage Web technologies to create truly immersive experiences, seamlessly blending virtual reality (VR), augmented reality (AR), and mixed reality (MR) into both our physical world and any digital virtual environments.
Key characteristics of the Spatial Web include:
- 3D-First Design: Content and interfaces are designed to exist in 3D space
- Natural Interaction: Users can interact with digital content using natural gestures and movements
- Contextual Awareness: Digital experiences that understand and respond to their physical surroundings
- Persistent: Digital content can remain anchored in physical space across sessions
- Designed for the spatial Web - Every HTML element (including 2D & 3D) is spatially rendered in the browser.
- Web Standards Compliant - Supports modern Web standards, including HTML5, CSS3, DOM, WebGL, WebXR and others.
- High Performance - Dynamically batches all spatialized HTML elements into ≤10 GPU draw calls per frame.
- Cross-Platform - Delivers flawless performance across every platform (desktop, mobile, and XR) with pixel-perfect consistency.
- Web Developer Friendly - Deep Chrome DevTools integration for seamless debugging and profiling.
Like the classic Web browser, it supports not only the HTML document, but also lots of formats, such as SVG, 3D models, etc. The following formats is expected to support:
Format | Status | Recommended Use Case |
---|---|---|
HTML | Partially | Browsing classic Web pages |
GLTF | OK | Displaying 3D models |
JPEG/PNG | OK | Displaying images |
SVG | OK | Displaying SVG images |
API | Status | Test Suite |
---|---|---|
JavaScript | Ok | - |
TypeScript | Ok | - |
ECMAScript Module | Ok | - |
WebAssembly | Ok | - |
Web Worker | Ok | - |
The following are supported renderer backends:
Backend | OS | Status | Test Suite |
---|---|---|---|
OpenGLES3 | Android | Ok | - |
OpenGL | macOS | Partially | - |
Metal | macOS | Not started | - |
D3D11 | Windows | Not started | - |
API | Status | Test Suite |
---|---|---|
Spaces and Reference Spaces | Ok | - |
Stereo Rendering | Ok | - |
Inputs and Input Sources | Ok | - |
Input Source | Status | Target Ray Mode | Gamepad | Profiles |
---|---|---|---|---|
gaze | Ok | gaze | No | - |
hand(2) | Ok | tracked-pointer | No | - |
main controller | Ok | tracked-pointer/screen | Yes | - |
transient | Not implemented | transient-pointer | No | - |
Note: Gamepad is not supported in the current version.
Feature | Status | Test Suite |
---|---|---|
Hit Test | Not implemented | - |
Anchors | Not implemented | - |
Hand Tracking | Ok | - |
Eye Tracking | Not implemented | - |
Depth Sensing | Not implemented | - |
Face Tracking | Not implemented | - |
Body Tracking | Not implemented | - |
Environment Probes | Not implemented | - |
Light Estimation | Not implemented | - |
In Web multimedia, there are the following APIs that JSAR would support:
- Playback: play audio and video, and use Web Audio API to create audio effects.
- Capture: capture audio and video from the device.
API | Status | Test Suite |
---|---|---|
HTMLAudioElement |
Ok | - |
HTMLVideoElement |
Not started | - |
Web Audio API | Not started | - |
API | Status | Test Suite |
---|---|---|
MediaDevices |
Not started | - |
MediaRecorder |
Not started | - |
API | Status | Test Suite |
---|---|---|
RenderingContext2D |
Ok | - |
PDFRenderingContext |
Not started | - |
HTMLRenderingContext |
Not started | - |
Note:
PDFRenderingContext
andHTMLRenderingContext
are introduced by JSAR, which is used to customize the PDF and HTML rendering.
API | Status | Test Suite |
---|---|---|
DOM API | Partially | - |
HTML5 | Partially | - |
CSS3 | Partially | - |
Web Component | Not started | - |
To contribute to the project, you need to follow the steps below to build this project from source.
And you need to add the following targets to your Rust toolchain by your need:
$ rustup target add aarch64-linux-android
$ rustup target add aarch64-apple-darwin
$ rustup target add x86_64-apple-darwin
$ rustup target add x86_64-pc-windows-msvc
Firstly, you need to install the dependencies and build the JSAR JavaScript bundle which is used in the runtime.
$ npm install && make jsbundle
Then you can build the runtime library:
$ make darwin # for macOS universal library
$ make android # for Android-aarch64 library
If you want to do a clean build, you can run:
$ make darwin CLEAN=yes
Supported parameters:
CLEAN
: Clean the build directory before building.RELEASE
: Build the release version of the library.INSPECTOR
: Enable the inspector.
The loaders are more convenient way to integrate JSAR into your applications, the following loaders are planned to be developed:
Loader | Status | Description |
---|---|---|
jsar-loader-unity | Ok | Integrates JSAR into Unity applications |
jsar-loader-unreal | Not started | Integrates JSAR into Unreal Engine applications |
To develop a new loader, you could see the Embedder API Documentation for more details.