Primrose VR for Web-based applications


Looks like many are jumping on the bandwagon. Happy New Year to all.


I honestly see AFrame becoming a better framework than primrose from my experiments. Especially since Mozilla is pushing for that project vs single guy project. Both use Three.js as base.

Its also a tad bit early for multiuser web VR. Still waiting http 2.0 to be supported by most server software too, while webRTC support is still not standardised. So for now it is a lonesome experience not to mention the lack of advanced controller support into ecmscript standards. It is a lot of work to write those from scratch. Even more work with workers.

Its a direction and it is a challenge for HiFi to overcome as currently its potential advantage is the full native hardware acceleration, p2p hosting, built in physics simulation, polygon culling tech, sound, and facial tracking vs accessability and portability.

But honestly it is starting to feel like everyone is simply reinventing the wheel over and over again as all these projects are recent.


It’s neat to see emerging WebVR solutions – in part because they are like olive branches suggesting that we might finally be nearing some VR landfall!

Random factoid: from its github commit logs Primrose will celebrate a 1 year first-commit anniversary this upcoming Saturday.


Hi there, this is Sean McBeth, creator of PrimroseVR.

I know this is an old post, but it’s new to me. It came up while I was trying to look for press on Primrose to see what sort of reactions are going on. Since it does come up in a search for Primrose, I wanted to take a minute to answer some of the points that were brought up, both for anyone who has been here already, and for people coming here from Google.

In regards to A-Frame, A-Frame is really more of a data format than it is a framework. It’s a great project and people are making really awesome thing in it. But it’s really focused on an XML/HTML-oriented authoring workflow and expects most of the features to come out of the community in the form of components. A-Frame is much more akin to VRML (though not exactly the same thing, for a variety of reasons), than it is to, say, Unity. They’ve very recently added more framework-y features like multiplayer, but I think their core userbase is in tinkering with the data format.

Primrose, on the other hand, is much more of a traditional, object-oriented application framework, built on top of Three.js. Whereas A-Frame could theoretically be implemented in raw WebGL and it shouldn’t matter to A-Frame, Primrose has Three.js at its core, exposes it, builds on top of it. Three.js brings a lot of really great features for basically free. Indeed, converting standard Three.js projects to use Primrose is a simple and straightforward process, by design. The aim is to make something that looks very familiar to web developers used to building single page applications in JavaScript, manipulating DOM objects, and working with Three.js.

Primrose is also centered around a live-programming concept. You typically build a Primrose project by starting with the editorVR demo to program your features live, in VR, then copy your code out to a static JavaScript file to save it and present it on the Internet. It makes for an extremely productive experience.

Similarly, High Fidelty is an awesome project and they have a specific direction they are going. For my particular project needs, many of the features of HiFi are overkill, while some features like running in the browser are sorely missed. That’s why Primrose exists. That’s why all alternatives exist. We are all expressing our opinions of how certain types of applications will want to be built in VR. Primrose is not meant to be an all-encompassing framework. Neither is HiFi. Neither is A-Frame. Neither is WebVR-Boilerplate. You’re not going to make a flight simulator in any of these. You’re not going to wage virtual war in any of these.

I don’t think Primrose and A-Frame or even HiFi compete. I think they are fundamentally different things. Indeed, A-Frame as a data format for objects and components is even on my roadmap, among many others like COLLADA and glTF. Out of expedience, I’ve mostly focused the workflow around Wavefront OBJ, though you can certainly load for yourself whatever Three.js can load. And I’d love to one day be able to expose the functionality of applications built with Primrose in environments like HiFi or AltspaceVR or JanusVR. And you may certainly pay for support, as any good open source project provides, to build out features on a timeframe prioritization that you see fit over my own selection.

I know some people worry about single-person projects just dying out. But I think that’s more of a symptom of irrational exuberance for new project maintainers who don’t understand what it’s like to get into the weeds on a project and quit when technical debt shows up in any form. I’m a much more experienced software engineer than that. I’ve been building a business around using Primrose as my swiss army knife for consulting projects, an effort that should bear fruit very soon. I’ve been evangelizing for the framework here in the DC area and have a few adopters so far. It’s grown far enough beyond just my usage that I’ve even attracted the attention of a sponsor with whom I’ll be working to keep Primrose development going, implementing projects for clients, bringing on more developers, and growing the features.

Not gang-busters, but not too bad for “just a single guy”.


Aye, although Id say A-Frame is more akin to X3D than VRML (due to the nature of integrating into to an HTML, avoiding the use of embeds, instead using element notation) and Primrose a framework, but I see them as for competing for developers and users, like any good framework / environment . Ofcourse, if browsers did support WebVR fully then that would be amazing… but there is work to be done.

What you have done so far is impressive; especially for a single man project.

The post I made was after all 6 months old so its quite old.
At the time however, there wasnt really that much news on Oculus or the SteamVR regarding WebVR support. A few months ago though, a little bird on the grapevine says one or both of them are working on some support for the WebVR, but progress has not been as advertised without hunting them down and is currently hidden in experimental builds of the browsers. So far however, there is really good progress and hopefully be more in the future.

PrimroseVR does work fantastically on through Cardboard and friends; Been experimenting for RnD for my work dealing with mobile browser and new tech, but I just couldn’t get the comparison between A-Frame, Primrose, among others off my head even back then. This is however, due to the nature of the PC-headsets requiring this special browser build to work, and, atleast for me, to focus on live programming, without having access to the keyboard by default is quite annoying.

And yes, my skeptism also is compounded by you being a single developer in the project.
Although ofcourse there have been many examples where such has succeeded, but its also a source of worry.
Still Good fortunes to you if you keep trucking! I will still keep an eye on you :wink:


Much of this was the case 6 months ago. The last 6 months I’ve been focusing primarily on documentation, evangelizing, and finding consulting clients. I’ve also managed to get more features built in that time, but the generally positive nature of what is WebVR and what the future holds for Primrose has not changed. Primrose is and has always been free, open source software. A number of people have forked it and work on their own extensions. I’m the only developer on the main repository, but that doesn’t mean work isn’t being done or that the project is going away anytime soon. My 100%, full-time work is on Primrose. I haven’t had any other job for a year now.

I sincerely doubt we’re competing for the same developers. There isn’t a fixed pool of developers over which one group is going to try to “win”. There are people who use many of the current frameworks. A lot of the people getting into A-Frame are new to programming completely. Some of the people I’ve had using Primrose in here in DC are new to programming, too. And most people are only going to use one or the other, but it doesn’t matter anyway, because it’s a meaningless metric. The relative “lack” of Linux desktop users does not make desktop Linux an invalid environment.

And saying we’re competing for the same users is weird. Users don’t care what framework was used.

The XKCD comic you posted is about standards and frameworks are not standards. All WebVR frameworks are built on the WebVR and WebGL standards. It’s specifically because of the rich ecosystem of web standards that makes Primrose and A-Frame and PlayCanvas and Goo Creator and everything else at all possible.

Primrose works great on the Oculus Rift and HTC Vive. Yes, you do need a pre-release build of Chromium to get it working, but I think we’re still in early-adopter phase and early adopters should not expect to get to use ossified browsers like Internet Explorer or Safari. WebVR is in the W3C standards track. It will come out in production release browsers, eventually. The API has stabilized and will not receive backwards incompatible changes.

There isn’t any news coming from Oculus or HTC on WebVR because they have nothing to do with WebVR. Google and Mozilla have been the primary drivers of WebVR, but WebVR doesn’t need Oculus or HTC to be involved to be successful, because WebVR is just an application feature.

That’s the point of the open web. The web works because it provides a great experience for users. Your operating system manufacturer, your monitor manufacturer, your processor manufacturer, none of them get to have a say in how it works, outside of the same standards process we all get to be involved in. This works because we the software freedoms and the plethora of competing ways of doing things that they engender. Companies like Microsoft in the past and Apple today have tried to force their will in regards to the web, but the web ultimately swallows them. It will always happen, because the web is too democratic, moves too quickly, provides too much content that users care about to allow it to be controlled by one interest. As soon as an entity starts harming the web for users, the web morphs and squirts out somewhere else and all the users move over there.

I don’t know what you mean by “without having access to the keyboard by default”. Mobile devices aren’t exactly the best devices for any sort of content creation beyond selfies and tweets. All though, USB keyboards over USB-OTG or Bluetooth keyboards work perfectly fine. But I’m not going to make people nose-type code. Google Cardboard support in Primrose is so you can allow other users experience what you’ve built.

Also, X3D is literally the same thing as VRML. VRML 2 became X3D.