I was intrigued to find out what sort of formats the Chrome Web Store was using for its “installed web applications”, and discovered somewhat to my surprise it uses yet another packaging and manifest format! This is in addition to the two manifest formats Google already uses (for Gadgets/OpenSocial/Wave and Google App Market).
The format uses the file extension “.crx” and consists of a 7-Zip archive and a manifest file in JSON. The actual contents however are almost identical to W3C Widgets, and so I created a proof-of-concept set of conversion code.
First off I had to actually download some .crx files, which Google doesn’t make an easy job. With a bit of poking around however I managed to create a simple Greasemonkey script for Firefox that adds a “Download .crx” button to the Chrome Web Store. (A bit alarming is that this would also have allowed anyone to download paid apps for free! Thankfully Google fixed that hole a few days ago or I would have posted this earlier…)
Once in possession of the files I can un7zip them, create a config.xml file according to the W3C Widgets spec, and rezip them with a “.wgt” extension. I’ve posted the code for doing this on Github. Its a bit hacky to say the least, but does prove the point.
Using this process I’ve been able to play around with a few apps, installing them in Apache Wookie and then deploying them inside Moodle and WordPress. I couldn’t see anything that would cause a huge problem.
The “.crx” format is already used by Chrome Extensions, which may be why Google went down this route. However, Opera already bases its browser extensions on W3C Widgets.
Which does kind of beg the question – why does Google keep on churning out new specifications in this space rather than adopting existing ones?