Open Sourcing the Core of Meshmoon WebRocket

What is Meshmoon WebRocket

WebRocket is our fully in-house developed web browser client for the Meshmoon platform that you can find and try out at our website. WebRocket originated from the need to implement a client that works in modern web browsers without any additional plugin installation (Flash etc.). This would make our platform more appealing to modern internet users and make the “3D internet” mantra to mean more that just operating on the internet: to actually operate in the web browser. One of the main design goals was to have compatibility with the Meshmoon platform and the Rocket desktop client, getting everyone to the same Meshmoon space and interacting together no matter what client they used.

Meshmoon is based on the open source realXtend Tundra virtual world platform, as many might know we contribute a ton to the open source community. Essentially keeping only Meshmoon-specific login (authentication, talking to our servers/services) in our private repos.  Being based off of Tundra meant that we had to implement a server-side C++ plugin to accept WebSocket client connections and to talk to them with the realXtend Tundra protocol. We open sourced this server module as well earlier last year as part of the EU FI-WARE project, it landed to realXtend Tundra core and is part of the core SDK distribution.

After the server module was done came the bigger job of implementing a web side JavaScript application to connect to to our Meshmoon servers. The project was progressing steadily and there were no road blocks to signal that the target of a browser client would be impossible or impractical. Since then we have been working on it for almost a year now. WebRocket uses standardized WebSocket and WebGL as its base technologies. We leverage a lot of great open source libraries like three.js for rendering, jQuery for UI and DOM manipulation, and so forth. RequireJS was chosen to be our module/dependency system, which has been a great fit for as big as the already codebase is. Grunt is used for task automation, doing builds and generating documentantation is just one command away.

Open Sourcing

WebRocket was designed as a client for us to begin with. Open sourcing the codebase as is was not going to be possible, it required some amount of preparation work, restructuring the codebase, removing any Meshmoon code from the core etc. Luckily quite recently we got a sponsor to finish this work and to share our code with the realXtend open source community. The result is realXtend WebTundra core SDK which implements a Tundra SDK/client that facilitates the Tundra protocol both at the network level and at the scene level (Entity-Component-Attribute model). As well as utilities for app development like FrameAPI, UiAPI, InputAPI, ConsoleAPI, Rendering plugin etc. that will get you started fast with your development of 3D internet application.

The idea going forward is that people and other companies involved in the realXtend ecosystem will start working on a common web browser client codebase. Improving and adding functionality to it as we go along. This model has worked very well with the Tundra platform and we are happy it will be possible now with the WebTundra SDK as well.

The open source “dump” commit was about 87 KLOC, of which about 50 KLOC consist of from dependencies like three.js, jquery etc. The rest of the code is written by us, including good amount of documentation (that you can check out here). The whole public API is documented very thoroughly, and most of the internal API as well. Resetting the repository history is a unfortunate side effect of us building it from scratch and including Meshmoon specific logic into the SDK, but I think it is something we all can live with. This is why the commit was one huge one, not almost 400 different ones.

Here is a link to the pull request that was sent from us to the realXtend WebTundra codebase if you are interested in the details. Browsing the repo is easiest done at our fork until its merged.

Share Button