Mozilla Messaging, the organization behind the Thunderbird e-mail program, has introduced a new open source messaging aggregation platform: Raindrop. The project is at an extremely early stage of development but the code has been made available through Mozilla Labs with the hope of encouraging third-party developers to participate in the effort. Ars put an early build through its paces and looked at aspects of the project that are relevant to developers.

What's in a raindrop?

Raindrop is a Web service designed to collate, filter, and present content from disparate messaging services. It currently comes with support for Twitter, GMail, IMAP e-mail, and Skype. One of the key goals is to use smarter filtering methodology to increase the visibility of important messages and reduce the amount of noise that tends to bog down Internet communication. Raindrop is built with a strong emphasis on extensibility, making it trivially easy to customize and enhance with new capabilities.

It's important to understand that Raindrop is not a conventional desktop client application like Thunderbird. It's a Web application in the sense that you run it as a background service and access it entirely through a browser. It's designed to be self-hosted, however, so it isn't quite like a conventional Web service either. The backend components that are responsible for retrieving and processing messages are coded in Python on top of the Twisted networking framework.

The frontend is implemented with HTML and JavaScript, with extensive use of the Dojo JavaScript library. The main frontend messaging user interface, which is called the Inflow, is populated with JavaScript widgets. It displays messages and provides navigation controls that allow the user to filter and interact with their message stream, and it can be accessed in any modern browser.

Raindrop is built largely on top of CouchDB, an Erlang-based open source database framework. Unlike conventional relational database systems such as MySQL, CouchDB stores its data in JSON documents and exposes its functionality through a REST API. The Raindrop frontend is served directly from CouchDB, meaning that the actual HTML, JavaScript, and CSS files are stored as attachments within a CouchDB database and are served to users by CouchDB's internal Web server.

One of the most powerful features of Raindrop is that it can be enhanced and reprogrammed directly from the browser. Developers can use Raindrop's built-in "Extender" to modify the extensions that control the program's message presentation and underlying filtering capabilities. The Extender uses Mozilla's experimental browser-based Bespin editing tool, which renders an interactive text editor with syntax highlighting in an HTML5 Canvas element.

Testing Raindrop

Experienced Web developers will have no trouble getting an instance of Raindrop up and running, but the nature of the dependencies will make setup prohibitively difficult for regular users. Mozilla says that it will eventually provide a simple installer or run its own hosted variant of the service at some point in the future to make it more accessible to non-developers.

Using the instructions supplied at the Mozilla wiki, I was able to test Raindrop on the Ubuntu 9.10 RC. Most of the required packages were available directly through the Ubuntu repositories. (Ubuntu users who want to test Raindrop should generally use 9.10 because 9.04 doesn't have a sufficiently recent version of CouchDB.) After installing the required dependencies, I obtained the Raindrop code from Mozilla's Mercurial repository. You can run the code directly from the checkout and you don't have to install it anywhere.

The next step is configuration. The Inflow has its own settings user interface, but it's not actually plugged into anything yet—it's still just a placeholder. To configure Raindrop, the user will have to manually write a settings file and store it in their home directory. The settings file, which uses an INI-like format, allows the user to specify their account credentials and the host/port of their CouchDB server. After the configuration file has been created and saved as ~/.raindrop, the user can start the service by executing the run-raindrop.py script.

To access Raindrop in your browser, you just navigate to http://localhost:5984/raindrop/inflow/index.html. Of course, you can substitute the host and port as needed if you are running CouchDB on a remote server or somewhere else on your local network. The Extender interface is located at /raindrop/extender/extensions.html.

Conclusion

Raindrop is an intriguing project with a lot of potential, but the current implementation is mostly rough edges. It's clearly a primitive prototype and is not intended yet for production use, but if the project can attract a community of code contributors, it might well evolve quickly. I suspect that the built-in Extender system will also help accelerate development by lowering some of the barriers to entry.

Raindrop's most significant weakness is that its complex dependencies will make widespread deployment extremely difficult. I'm skeptical that a sophisticated Web application built with Python, Twisted, and CouchDB will ever be trivial to install—especially on Windows. I also suspect that it's only going to get mainstream adoption if it's offered as a hosted service. At this stage in Raindrop's development, the app is only interesting to developers.

Additional details about Raindrop are available from the project's page at the Mozilla Labs website. The code can be found in Mozilla's Mercurial repository.