It’s been about six months since we released 3.0 stable into the world, and the whole team is proud to see it being adopted so well by the community at large. Since then, we've had over 500 pull requests to our core, mostly targeted at the new version, which is a fantastic result.
Typically, you had to wait for at least a year to get to the next major stable version. In the spirit of continuous delivery, we want to shorten this time frame a bit, and provide you with slimmer, but more frequent releases. Accordingly, the 3.1.0 beta 1 release has a lot of incremental, but less visible improvements. With the release being in beta status, we don’t expect any further API changes, and encourage you to download it and try the codebase (changelog, upgrading guide).
Even after extensive peer review on early CMS designs on the community mailing list, our major focus is still on interface usability, and ensuring that we provide adequate feedback on user actions. In SilverStripe 3.0 (like in most CMSes), you had to switch between the editing interface and a preview of the actual website. In 3.1, you can see the two side-by-side, provided you have a decent screen resolution. There are new options for previewing at different widths, and more useful controls for switching between draft and live content.
Image: Side-by-side view
Image: Preview modes
Talking to many CMS users, we also found that they are commonly overwhelmed by the various buttons to affect a page, e.g. to save its content to draft. So we’ve moved the minor actions into a flyout, alongside some useful metadata about the page itself. There’s an API for that, so you can add your own minor actions as well. In addition, the CMS change detection now highlights if a page needs saving by changing the button style.
Image: Grouped buttons
On the framework side, we’ve made some architectural changes to DataList and ArrayList, ensuring that they are consistently immutable, meaning they’ll always return copies rather than modifying themselves. This means that you can pass DataLists to other parts of your application without worrying that they will get modified, making code more modular and maintainable. We’ve removed a whole bunch of legacy APIs which were previously deprecated, most prominently the TableListField and ComplexTableField classes which are now replaced by the infinitely more awesome GridField class (there’s a legacy support module if you really can’t switch to GridField right now).
We’re also pleased to announce support for the Composer dependency manager, which makes installing a SilverStripe project as well as new modules much easier (see docs). Modules can define their own dependencies programmatically, which should make it effortless to create modular solutions and share nicely decoupled code between modules. Over 50 SilverStripe modules managed by Composer are already listed on packagist.org, a common repository for PHP modules.