The Symfony Content Management Framework has released its first stable version. This means that from now on, the 1.0 branches will only receive bugfixes and if there are any BC breaks for version 1.1, a clear upgrade path is documented. It took us a while to get the courage to call it stable, but people have been using the CMF successfully for months already. In fact parts of the CMF have been used in production for over a year. The CMF has been tried on various projects and has proven itself to work in the real world.

What do you get?

The CMF is built with maximal modularity in mind. You can simply add the CreateBundle to your project to enable inline editing. Or you can add the RoutingBundle to add flexible routing based on database entries to your application - without removing the standard configured routes, of course. Or you could just use the CoreBundle to use the publish workflow tool. Or the BlockBundle to get editable pieces of content that you can call from your templates. Or you can throw in the full suite of bundles and have a bare-bones CMS with the help of SimpleCmsBundle. For simple CMS needs, this is enough and will not collide with the rest of your Symfony2 application. Your options stay road open if you need to later add custom CMS features, or need to integrate your application with the CMS parts more tightly.

While by default we are using PHPCR, which saw its first stable release last week as well, everything is built database agnostic. So the RoutingBundle for example also supports Doctrine ORM. That being said we feel that PHPCR and PHPCR ODM provides an ideal API for dealing with the data storage challenges in a CMS with its support for unstructured data, tree structures, versioning, node types, full text search, native i18n and many more features specifically addressing the needs of CMS.

But and this needs to be understood, the CMF is a framework to build custom CMS. As such it requires the work of developers to bring it into the hands of end users. It provides some UI components out of the box but needs additional work to provide the kind of experience end users expect from a CMS. So while the CMF tries to be as un-opinionated as possible, developers using the CMF can and should try to build CMS solution that are focused on the needs of their specific users. As such we are excited that both Drupal 8 and ezPublish 5 have chosen to adopt our Routing component to enable dynamic routing. Furthermore there are already two projects building upon the entire CMF stack with PrestaCMS and Sulu. Furthermore Sylius, a Symfony2 ecommerce solution, is also looking to integrate with the CMF.

Where do we go next?

For those interested in how the project came about, I recommend reading our RC1 announcement. So instead lets discuss what is coming next. For one we are wrapping several open PRs to further improve the documentation. In terms of features people are starting to discuss and work on features for version 1.1. For example we will soon have support for Doctrine ORM in the CreateBundle. What will happen or not depends largely on the community and what people are willing to contribute. We especially expect that the various CMS projects build on the CMF will start driving feature requests. The main contributors will certainly stay around and contribute their own pieces, and help guiding contributors so that the system stays consistent. It has been a very exciting experience to build this part of the larger Symfony eco-system and hopefully the beginning of several projects building on the fruits of our work. One side benefit that the entire Symfony2 community is already enjoying is that our extensive functional testing in each Bundle has already caught several regressions in the development branches of Symfony2 itself. Showing once more, with todays tools like Github and Travis-CI, growing our eco-system will benefit everyone.