Drupal-NG: Spaces, Context and Features modules

I recently found, downloaded and started to play with Open Atrium from Development Seed. I was impressed with the quality of this Drupal distribution, so I started to poke around. At first I was mostly interested in their install profile, since that's what I was trying to get working myself, but their theme (Gingko) is by far the best theme I've ever used with Drupal. I was impressed with the use of the Admin module, which I've never used myself (i like admin_menu)....but after some more digging, I noticed this suite of modules I had never used before: Spaces module, Context module and Features module. I believe these will become the future of Drupal development.

Context Module

Context for one is a module I've been looking for forever. It's always been a pain in Drupal to get "active trail" working consistently among several sections of your website. Essentially what the Context module allows you to do, is choose pages, paths, node-types, panels and views within a "Content" in which you can do certain things, like set a body tag, configure blocks and set the active menu. Superb! This is certainly a piece of glue Drupal has been missing for years and I predict this (or some variant of it) will eventually end up in core (as it should). Development seed has gone above and beyond and created a wonderful UI for context as well, to make it simple to admin. Context UI Video Read more here.

Features Module

The Features module provides a way of lumping a bunch of common feature tasks into an exportable (CODE!) feature set. Let's say you create an ImageGallery feature, which contains a CCK content type with some fields, some imagecaches, some views pages and blocks and a taxonomy. The features module along with the UI will allow you to export this set of features into a module. This means that you can easily create a share this feature set with your friends (or in house among your clients). This is wonderful because normally, we do not create modules for this kind of stuff. We configure it using various other UI admin interfaces and have to repeat these tasks on pretty much every project we work on. Easily exporting a common set of features into a module will not only provide us with an easy way of sharing these, but it keeps your functionality out of the database which is easier to stage and maintain.

The features module enables the capture and management of features in Drupal. A feature is a collection of Drupal entities which taken together satisfy a certain use-case. Features provides a UI and API for taking different site building components from modules with exportables and bundling them together in a single feature module. A feature module is like any other Drupal module except that it declares its components (e.g. views, contexts, CCK fields, etc.) in its .info file so that it can be checked, updated, or reverted programmatically.

Here's run down of features from Development seed

Making and Using Features in Drupal from Development Seed on Vimeo.

Spaces Module

Not going to lie, I haven't gotten this far yet. To my understanding spaces allows us to group various contexts and features in a "space", which I believe is separated by a persistent URL (purl). I'm going to have to follow up on this more.

Feature Server Module

The most promising idea Development seed has come up with is the Feature Server, which allows developers to easily share the features they've created with others. It works much like Drupal.org and provides developers with the ability to post tars of their code for their readers to download. Readers can subscribe to the particular developers Update Status feed for his feature, which will notify them, should the developer roll out another version of his feature.

Feature Server allows you to create projects, make new releases of Drupal features and themes, and lets users subscribe to updates via the Update status module provided in core. It is simple by design, asking you to fill out version information for releases and upload packages through a filefield. For greater integration with version control systems or for automatic packaging consider using the Project module.

While I'm not a huge fan of decentralized development, I believe that these Feature Servers will open up the door to more tasks specific development and allow developers a lower learning curve to post up their code. I for one, have created a couple Drupal modules, but haven't posted them to Drupal.org because I don't want to spend the time to learn how it all works. I have posted my code at Ubercart.org, because that was easy :D and I would roll out code on my feature server, even if I just used it for myself and my clients. Feature Server Video rundown of features server module:

First Look at a Feature Server from Development Seed on Vimeo.

Predictions

I really feel like the work Development seed is doing here will be the future of Drupal. I can see how the Features Module will get expanded to work further with Install Profiles, which are currently too hard to make. Install profiles at the very least can learn from the Features Module on how they can make this easier for the end users. I guarantee we'll be hearing a lot more about the Context module and Features module once more people find out about it. I would expect some deeper integration or merge of context and panels, since I believe they have some overlap. A module like Context will get added into Drupal 8 core.