lloyd.io is the personal website of Lloyd Hilaiel, a software engineer who works for Team Ozlo and lives in Denver.

All the stuff you'll find here is available under a CC BY-SA 3.0 license (use it and change it, just don't lie about who wrote it). Icons on this site are commercially available from steedicons.com. Fonts used are available in Google's Web Font directory, and I'm using Ubuntu and Lekton. Finally, Jekyll is used for site rendering.

Finally, Atul, Pascal, and Stephen inspired the site's design. And in case you're interested, this site's code is available on github.

The Road to Chromeless 1.0
2011-06-09 00:00:00 -0700

Mozilla's Chromeless project is an experiment toward building desktop applications with web technologies. So far, it's been more of a fancy-free exploration of interesting features or applications than the serious and sometimes stodgy stuff that platforms are made of. A recent surge of community interest in the project, however, suggests that the best path forward is for the primary developers of the platform to buckle down and focus on producing a stable system upon which others can experiment, play, and ship products.

This post attempts to define a Minimum Viable Product for Chromeless: the simplest possible set of requirements for a meaningful 1.0.

Please note, this is a proposal intended to start the conversation. My hope is to collaboratively refine this into an actual phased plan for getting to 1.0.

So, what will 1.0 look like?

Chromeless 1.0 will be a well documented and tested platform that lets you build production quality desktop applications with web technologies. A skilled web developer can understand how it works in five minutes, and could be building their own application in about five more.

The Details

While the above statement is a pretty vision, there is no shortage of details to be worked out and priorities to be set. Let's run through the various areas where there is work to be done:

Testing

At present there are several high level tests, but a low level unit testing framework is missing. By 1.0 we should have unit tests for nearly every exposed API which may be reasonably tested.

Documentation

A lot of time has been spent on the Chromeless documentation system (heck, we've written yet another documentation extractor just for it). This system in its present state is a fine foundation for quality documentation, but what's missing at this point is refined content for all exposed core APIs, as well as overview and architecture documentation.

API Review

Given the history of the project (a fork of addon-sdk that was in a heavy experimentation mode for a while), there are far too many modules that have stubbed functions or just don't make any sense in Chromeless.

Testing, documentation, and API review are complementary activities that can all occur in lockstep in one great romp through the modules of Chromeless today.

Distributed Development

The tone of the previous tasks might lead you to think that feature explorations are dead for now in Chromeless. But no. I think attempting to freeze feature development is dumb given the inspiring community activity at the moment. Instead of trying to lock down development in some way, I believe we must instead rapidly grow core features that enable distributed development.

This means two things: First, we must be very careful about functionality that becomes part of the Chromeless standard library: that which resides in modules/. So how do we determine what modules are part of Chromeless proper? I propose:

Modules distributed with Chromeless must have utility to a significant number of applications, or must be impossible to implement effectively outside of Chromeless, or must be required by modules for which one of the previous is true.

Second, I'm proposing that the minimum viable product include basic mechanisms to make it possible to discover and include 3rd party modules in your apps, while simultaneously paring down the set of modules exposed by the core platform. I personally think that git sub-modules and module_dirs get us most of the way there in terms of inclusion. As far as discovery goes, perhaps it's as simple as a wiki page for the purposes of 1.0? (though a system which resembles npm is an interesting thing to dream about for future releases).

Web Content Embedding

The initial focus of Chromeless was to make it possible for developers to prototype web browsers with web technologies. A fallout of that focus was considering the ability to safely sandbox web content inside souped up iframes a first class feature. Given that we've already committed to this feature, that some of the most interesting products of the community rely on it, and that nowadays most desktop apps need the feature anyway: web content embedding must be secure and stable in Chromeless 1.0.

There are several open issues around embedding content inside iframe (in such a way that it's not aware it's embedded), that should be addressed before we label 1.0.

Debugging

printf debugging is not quite state of the art, and it's what's for dinner right now in Chromeless. While the debugging tools built into Gecko right now are not the most awesome, they are getting attention and are rapidly getting better. We should allow Chromeless developers to leverage the web console and levy requirements on the devtools team. This feels like a much more useful direction than attempting to embed firebug, a path likely wrought with peril.

Having excellent logging and debugging tools must be a prerequisite to 1.0.

Deployment

The Chromeless appify command makes it easy to go from a pile of web content to a all-in-one application folder. There are a couple of refinements necessary to really complete the story, basic things like application icon support.

In addition to the most basic required features, there are several things that are very interesting but are not required for 1.0:

Communication

A final missing piece for Chromeless is a web presences that properly introduces the project and provides links to all available resources. The present landing page is out of date and information poor. This task is really complementary to the labs/research site redesign that is in progress and should aim to present Chromeless with a level of polish that corresponds to the quality of the platform (which should be high at 1.0!).

This site should be useful as both a introduction into the project and a place for all to understand the present state and get involved.

Participating

There are many ways to participate in the journey to Chromeless 1.0: the first is to react to this plan.

After things settle, my hope is turn this into a concrete road-map using milestones and issues on github. Once that's done all you have to do to join all the other contributors is pick an issue you care about, fix it, and send a pull request.

The other form of participation will be telling us about modules you've written for inclusion in the module directory, or in some cases the platform itself.

I look forward to your thoughts! You can share them here, on IRC (#chromeless on irc.mozilla.org), or via the mailing list.