Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
J

janusweb

> 编程语言
Open source

An in-browser implementation of JanusVR

200 stars0 likes0 views
WebsiteGitHub

About

An in-browser implementation of JanusVR

A web framework/browser for building rich virtual reality experiences.

Examples

Features

  • Open Immersive Web-layer for browsing XR experiences across the web
  • Build immersive 3D environments for desktop, mobile, and VR devices using HTML and JS
  • Rendering functionality provided by Three.js / WebGL
  • Separately host WebXR experiences via (JML in) any textfile.
  • Oculus Rift, Vive, GearVR, Daydream, and Cardboard support via WebVR API
  • Realtime collaboration across all devices via built-in networking
  • Import Collada, OBJ, glTF, and other popular 3d file formats
  • 3D positional audio
  • Gamepad support via the HTML5 Gamepad API
  • Supports hand tracking peripherals like Leap Motion, Oculus Touch, and Vive controllers
  • Support for 2d, sbs3d/ou3d, and 360 degree video textures using HTML5 Video
  • Scriptable client enables many customized uses
  • And much more

Using

There are several different ways to use JanusWeb, depending on how much control you want to have over the whole system.

Use our viewer

Our default viewer is always available at https://web.janusvr.com/. You can write an HTML page with your JanusVR Markup and host it anywhere you would normally host a static website. Any regular webhost, AWS S3 static sites, CDNs, or even more exotic locations like IPFS distributed filesystems will work. You can even put your mark-up onto sites like PasteBin or PiratePad. Then just load the URL in our viewer by entering the URL into the navigation bar, and you can link directly to it, share on social media, or embed our viewer directly into other webpages, blog posts, or articles.

Single-binary server+client

Use our all-in-one janusxr.com multi-platform binary file: Run a local-first viewer locally on your desktop, raspberry pi (ARM64) or server.

executable platforms
janusxr.com

Run janusxr.com from anywhere, or put it into a folder with your 3D models or JanusXR rooms:

$ chmod +x janusxr.com          # only for non-windows users

$ ./janusxr.com 
I2026-01-19T15:41:10 (srvr) listen http://127.0.0.1:8080
I2026-01-19T15:41:10 (srvr) listen http://192.168.1.168:8080
Launching browser..

A browser will popup, and connect to https://janusxr.org via Janusweb.

Webbrowsers on the same network can access your node https://192.168.1.168:8080

Optionally, you can expose this janusweb-node to the internet. Check here for more commandline options.

Usecase: 3D file viewer

Make sure janusxr.com is in a folder with your 3D models

$ ls 
janusxr.com
world1.glb
world2.glb

Then make sure you rename janusxr.com to whatever you want to set as homepage:

$ mv janusxr.com world1.com
$ ./world1.com 
I2026-01-19T15:41:10 (srvr) listen http://127.0.0.1:8080
I2026-01-19T15:41:10 (srvr) listen http://192.168.1.168:8080
✅ detected /world1.glb (setting as spatial home)
Launching browser..

Usecase: all-in-one JanusXR runtime

You can bundle all your XR experiences with the server/client binary.

Just Make sure janusxr.com is in a folder with your JanusXR rooms or 3D models

$ ls 
janusxr.com
world1.html
world2.html
foo.glb

Then make sure you rename janusxr.com to whatever you want to set as homepage:

$ zip -r janusxr.com *              # add janus files to janusxr.com
$ mv janusxr.com world1.com         # hint homepage room (world1.html) sidecarfile
$ ./world1.com                       
✅ detected /world1.html (setting as spatial home)
I2026-01-19T15:41:10 (srvr) listen http://127.0.0.1:8080
I2026-01-19T15:41:10 (srvr) listen http://192.168.1.168:8080
Launching browser..

Profit! You can now send world1.com to a friend, and his browser will launch straight into world1.html

NOTE: you can also point directly to a 3D model (foo.com would load foo.glb) or PDF-file etc!

Usecase: run as a docker

You can run our docker-image as following:

$ docker run -p 8080:8080 codeberg.org/coderofsalvation/janusxr:1.5.56

Profit! You can now point your browser to http://localhost:8080 or configure your reverseproxy for SSL certs/domain etc.

Or optionally, serve your own XR experiences with it:

$ ls
myworld1.xml myworld2.html myworld3.glb
$ 
$ docker run -p 8081:8080 -v $(pwd):/data codeberg.org/coderofsalvation/janusxr:1.5.56 /www/janusxr.com -D /data

Profit! You can now use URLs like http://localhost:8080/#janus.url=https://localhost:8080/myworld1.xml e.g.

Btw. you can build the docker image yourself too:

$ utils/release.binary.sh # build the janusxr.com binary 
$ docker build -t janusxr.com .
$ docker run -p 8080:8080 janusxr

Usecase: serve all-in-one-binary in different docker/OCI container

Make sure to run you're in a folder with your JanusXR rooms or 3D models, and janusxr.com

$ ls 
janusxr.com

$ unzip janusxr.com          # extract the viewer files

$ ls 
janusxr.com
world1.html
world2.html
foo.glb

$ docker run -d -v ./:/www -p 8080:8080 --name janusweb busybox:latest /bin/httpd -f -h /www -p 8080
e7928798379e872983b7ec9b89237ebc

$ docker ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS         PORTS                   NAMES
6711ed9739f3  docker.io/library/busybox:latest  /bin/httpd -f -h ...  16 seconds ago  Up 16 seconds  0.0.0.0:8080->8080/tcp  janusweb

Profit! You can now point your browser to http://127.0.0.1:8080 or configure your reverseproxy for SSL certs/domain etc.

Usecase: deploy janusweb as github/gitlab/codeforge webpage

TODO provide action-files

Usecase: get the latest build files

Sometimes, developers just want the latest janusweb files.

Good news, the executable is also a zip-file.

$ ls 
janusxr.com
$ unzip janusxr.com
$ ls
index.html
janusweb.js
(...)

$ janusxr.com 
I2026-01-19T15:41:10 (srvr) listen http://127.0.0.1:8080
I2026-01-19T15:41:10 (srvr) listen http://192.168.1.168:8080
Launching browser..

( the webserver will prioritize the unzipped files )

$ zip janusxr.com index.html   # you can even update the binary 

Profit!

Pull our scripts into your page

Using the above method, all of your links would go through community CORS-proxies. If you'd prefer to link to your own servers, you can pull our JS into your page and use JanusWeb as a scriptable client via its API. This looks something like this:


  
    My JanusVR Room
  
  
    

    
      
        
          
          My First Room
        
      
    
  

The elation.janusweb.init() function can take a number of arguments, and returns a promise which receives an instance of the client. This client reference can be controlled via its API:


  
    My JanusVR Room
  
  
    

    

    

  

NOTE: you can also update the janusxr.com binary to your likings: (unzip janusxr.com index.html && vi index.html && zip janusxr.com index.html see 'get the latest build files' above)

See the sections on Arguments and Scripting below.

See also Using a specific version of JanusWeb below.

Install from NPM

(TODO - we will start shipping official NPM packages of JanusWeb once we release v1.0)

npm install janusweb

Build from source

If you'd like to build JanusWeb from source, you can check it out from Github and build using the following steps:

$ git clone https://github.com/jbaicoianu/janusweb
$ cd janusweb
$ npm install --only=prod
$ npm run build

This will give you a full build of the latest verson of JanusWeb in your build/ directory. You can then modify build/index.html however you see fit, and host it as suggested above.

Arguments

JanusWeb supports several arguments at initialization time to control how it behaves.

Name Description Default

autostart call elation.janusweb.init({..}) automatically or manually true

autoload Load URL by default or wait for script true

crosshair Show player crosshair true

homepage Default page to go to when user presses home button https://web.janusvr.com/

networking Enable networking true

picking Enable mouse interactions true

resolution If specified, restrict the renderer to the specified size (none)

server Presence server to connect to wss://presence.janusvr.com:5567/

stats Enable render performance stats false

url Default page to load (homepage)

urltemplate Optional template for generating URLs (none)

useWebVRPolyfill Enable WebVR polyfill for mobile phone compatibility true

usevoip Enable or disable VOIP functionality (NOTE - disabled pending browser support for Opus via WebAudio) false

NOTE: see client.js for the most up to date arguments

Scripting

After initializing the client, elation.janusweb.init() returns a Promise which provides a reference to the client. You can programatically control this client to do all sorts of things. For instance, we can make the client load a URL, wait for the world and all of its assets to load, and then take a screenshot of the world after a specified delay:

     
                      

Many other aspects of the JanusWeb client can be controlled this way as well. Our users are always thinking up new and inventive ways of using the JanusWeb client. Embed it in your blog posts, use it to render 3D content behind your 2d webpage, put a virtual security camera in your world and view a live stream of the virtual world from any web browser. Control the virtual world via a web interface. This is your scriptable live portal into the metaverse, to do with whatever you please. The possibilities are endless!

You can even run JanusWeb in NodeJS for headless server-side operations. Use it to write a bot that wanders the metaverse, or run your game logic and physics on a server to have one authoritative source of state for your world. If this sounds interesting to you let us know, we will be more than happy to help you through this (it's all very experimental right now!)

Using a specific version of JanusWeb

If you need to load a specific version of JanusWeb, all previous versions are stores on the same server, and can be accessed by construction a URL of the form https://web.janusvr.com//. This is useful if you have a room which you know works with a specific version, which relies on features which have since been deprecated or changed, or to determine whether bugs have been introduced.

JanusWeb versions follow the Semantic Versioning 2.0.0 spec, which follows the format .. - for example, at the time of writing (March 2017) the current stable release is 1.0.15. So if you want to view this version, you could go to https://web.j

Issues· 56 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

JavaScript3ddaydreamgame-enginejanusvr

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 18, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言