We’ve been using Node for various projects including our project management system, and Ubiest.co (a world news reader on a map). We’ve used it in production for Sondry.com also.
That said, most of our business is setting up CMSes with a custom template for client websites. We’ve started to see a lot of CMSes come out of the Node camp and we got curious. Here’s our Node CMS Comparison…..
We wrote in our PHP CMS Comparison about our criterias for a good CMS:
- Has Post Types or similar type of features for implementing content storage beyond the default types (EX: Custom Post Types in WordPress)
- Ability to add Extra Fields or Custom Fields natively or otherwise (EX: K2 and Extrafields in Joomla or Advanced Custom Fields in WordPress) Also, can it repeat those fields? It makes our lives so much easier when we don’t have to add fields in manually and let the client choose!
- Plugin Availability
- MVC based to make development more standard and streamlined
- Documentation for Theme Development (Very important for my business)
- Community Support (Are there other folks who develop on this platform?)
- Can be package manager based: Uses Composer or NPM to install or to manage third party packages
- How forward thinking does the overall design seem to be?
- By Design, Who is it for? (or rather a good mix of not being just dev or client centric)
Here are today’s lucky contestants
- Apostrophe 2
- Pencil Blue
Ghost is getting a lot of attention and if one of the few I hear mentioned in conjunction with WordPress on a daily basis. It is in its own words, “Just a Blogging Platform”. It started when its founder got tired of using WordPress for blogging. WP had become too encumbered to cover its CMS and other complex needs. https://ghost.org/
Additional Post Types No. It doesn’t have additional post types. That said, as of July 2015, they’re working on “Customizable Channels”
Custom Fields Not really. Well, they’re working on it. Plugin Availability They’re working on this too, but their Apps project isn’t quite there yet.
“The Ghost Open Marketplace is a long term project where we hope to create a large directory of themes, apps, and resources which have been created for Ghost. Think of it like the Apple App store or the Google Play store, but filled with both free and premium products which are all for Ghost.”We’re pretty eager about this: https://github.com/TryGhost/Ghost/wiki/Apps-Getting-Started-for-Ghost-Devs MVC Based? Yup. It does have an MVC component to it. Ghost uses Express as its base so it has a structure that everyone should be familiar with. Documentation for Theme Development Its very straightforward. It is available and well documented. It uses my favorite Handlebars templating system which is great. Community Support Ghost is based on community support. It started out as a crowdfunded project. Their forum is active with a lot of the founding members answering questions: https://ghost.org/forum/ Packaged? It is packaged as an npm package, but it is also packaged as a zip for a more traditional installation process. Future Their roadmap is pretty clear and open to the public: https://trello.com/b/EceUgtCL/ghost-roadmap Hopefully they’ll be able to get custom fields in there soon. Who is Ghost for? Bloggers, and I think soon for SEOs. The platform already outputs schema.org, Twitter cards, and Opengraph meta right now. You have to install plugins on WordPress to do that stuff (its a good plugin though). Its working hard to make on-site SEO optimizations easy from the get go. That said, I hope it stays true to being, “Just a Blogging Platform” and not go well beyond its reach like WordPress has done.
Keystone is closer to being a CMF (content management framework) than it is to a CMS. It comes with a Blog, Image gallery, and Contact components built in so it isn’t super spartan either. http://keystonejs.com/ Additional Post Types So, keystone is more of a wrapper around Express to make it work as a CMS. To add additional post types, you have to define a new Keystone List. This allows you to define a new post type in addition to all of its fields. Its not much more work than defining a new Custom Post Type in WordPress. Adding Post Types and Custom Fields is well documented in their database section.
Custom Fields Because additional types allows you to define every field, there really isn’t a need for a separate custom fields system. That said, there isn’t a system for repeating fields like in Advanced Custom Fields for WordPress.
Plugin Availability There really isn’t a plugin system for Keystone. All of the customizations are meant to be handled through the model based system. This CMS isn’t meant to be a click and go system. MVC Based? As with Ghost, Keystone is Express based. Again, this software design pattern makes it easier to know what’s going on within. Documentation for Theme Development One of the coolest functions I noticed during installation was the ability to choose between Less and Sass along with templating engines such as Handlebars, Jade, NunJucks and Swig. With a lot of choices built in, it seems to be very flexible to the theme developer’s whims. There really isn’t a good “theme development” doc here. Keystone only allows for a single theme per system. That said, because of the flexibility in choice between all the templating engines as well as the SCSS/LESS, it should be quick to get going. We prefer SCSS and Handlebars and having access to those makes our life that much easier. So, in reality, if you know what you’re doing with an MVC, this really isn’t an issue. Community Support The source is hosted on GitHub, and there is active development. The forums are on Google Groups here: https://groups.google.com/forum/#!forum/keystonejs
Packaged? Keystone is packaged on its own as an NPM module, but the actual piece used to generate a working website is called “generator-keystone”. This seems to be a common move for a lot of node based projects where a generator is made outside of the actual package to manage the initialization process. The actual initialization is done through Yeoman “yo keystone” command.
Future Apparently, part of their next move is to change a lot of the functionality/templating over to React.js. This is probably a good move for speed/function. Who is Keystone for? Right now, agencies and developers. People who have easy access to developers or are developers themselves would find Keystone useful and fresh. Another agency decided to ditch WP for Keystone: https://s3.amazonaws.com/mnb_keystone/slidedecks/keystonejs.pdf Keystone looks to be a great option if you know what you want (aka probably not a crazy client project).
Apostrophe is a completely front-end based CMS (all editing happens from the front). I think the point and the goal of Apostrophe is to make editing as seamless as possible to the end-user. http://apostrophenow.org/
Additional Post Types & Custom Fields The concept here is a little bit different. If/when you want to add a page, you go to the parent page and click on the “gear” button at the bottom left. This will let you create a new page under the existing page. You will of course have to link things manually to make them work. There is a way to use the navigation code here: (http://apostrophenow.org/tutorials/frontend-development/navigation.html)
The concept here is so different that I’m not sure if either of Post Types/Custom Fields really apply to Apostrophe. You write what you want, where you want, how you want. That said, because it is missing a lot of traditional programmatic systems, I’m not sure if it would be a good match for some clients. Plugin Availability There isn’t much plugins (or widgets in this case), in fact the only ones I found was Apostrophe’s own Twitter and RSS widgets. They do provide a sample widget here though and it does look to be relatively self explanatory: https://github.com/punkave/apostrophe-schema-widgets There are also additional Node modules for Forms and Donations which appear to not be included with the default sandbox install. MVC Based? The code is MVC based, again using Express. Apostrophe actually is comprised of multiple pieces of software even within itself. There is apostrophe, apostrophe page, apostrophe schemas, and apostrophe-snippets. These work in conjunction on top of their apostrophe-sandbox package to create a website. Documentation for Theme Development There is a section of the documentation aimed at front-end development: http://apostrophenow.org/tutorials/frontend-development/index.html Apostrophe uses Nunjucks for templating. I’m not familiar with it, but it looks just like any of the other ones. They also have a system called “types”. Types is basically a page template (http://apostrophenow.org/tutorials/getting-started/creating-new-page-templates.html). You can create a new file in the “views/pages” folder and define the page types in app.js file.
Community Support Apostrophe’s forum is at Google Groups here: https://groups.google.com/forum/#!forum/apostrophenow
Packaged? As with keystone, Apostrophe ships a generator that pulls in their sandbox installation. The setup process could be done with mostly NPM, but the package does require GIT to complete the process. Future They are currently working on refactoring the backend of Apostrophe for their 0.6 release. They appear to be relatively feature complete either way. Who is Apostrophe for? I think Apostrophe is for website builders and high-end boutique clients who are willing to pay good money to have very easy to edit CMS. That said, I’m not sure if I would really want to build with Apostrophe. I’ve never really had a good experience letting clients move everything around in a page without a specific template in mind. The issue comes up all too often when WYSYWIG is used incorrectly. While my clients would love the idea of Apostrophe, I’m not sure if my designer would love a misplaced image on a beautiful template.
PencilBlue is a full featured CMS with a plugin system, and server cluster management. First impression I got after installation was of the effort that PencilBlue is putting into the product. PencilBlue tries to be a traditional CMS product while using newer technologies to improve on the concept. https://pencilblue.org/
Additional Post Types & Custom Fields This is supported natively. You can click on the “Custom Objects” link under the “Content” section. This section will allow you to define a custom object with as many fields as you want. Custom Objects can also be implemented as a plugin in PencilBlue. There is an example video with an explanation here The code that you might specifically want to look at is here It should look familiar to anyone who has dealt with either migrations or with WordPress’s CPT formats. Very nice. Plugin Availability They have 16 plugins as of July 2015 (couple themes included). Not a whole lot, but since Ghost doesn’t have plugins yet, they are further along. MVC Based? PencilBlue does use an MVC structure. It appears though that they implemented their own MVC rather than piggying back on Express like all the other CMSes so far. Documentation for Theme Development There is a full video tutorial as well as a full example source for a complete template. Again, these guys are trying hard in the right ways. Community Support Everything seems to surround Github and there isn’t really a community as far as I can see. Not a whole lot on Stackoverflow either. Packaged? PencilBlue is packaged with a control command “pbctrl”. Like the other systems, it uses NPM to manage itself. Future They have a clear roadmap laid out like Ghost does. Checkout this blog post. Whos is PencilBlue for? I think PencilBlue is on the right track. It looks and works a lot like WP. It is better organized in some ways. If the plugin ecosystem flourishes, it could be a pretty sweet CMS to work with. There really is no bias towards any user type.
I like Buckets. I think it doesn’t need a long intro. It just makes a ton of sense. What are Buckets anyway? https://github.com/asm-products/buckets
Additional Post Types (or Buckets as they call it) So, the whole idea of this CMS is that you get to call your own shots on what the buckets contain. You can continually add as many buckets are you need. Custom Fields Custom Fields are handled during the creation of the Buckets themselves. Its a little bit limited, but its more than enough to build a website with.
Plugin Availability They’re not quite there yet. MVC Based? Again, like most of the other CMSes on here, Buckets uses Express. It can even be used as a middleware for an Express app so that you don’t have to worry about the blog or the about page on your web application. Documentation for Theme Development Templates are based on Handlebars so its not too hard to work with. https://github.com/asm-products/buckets/blob/master/docs/user-docs/templates.md The only part that was slightly hard to figure out was how to route the content to a template. Community Support Its a relatively small alpha project so it doesn’t seem to have a large community. Packaged? Its packaged as an NPM module so it can be used in many scenarios as mentioned earlier. Future They are looking to a place where there is a real eco-system around buckets. Bucket’s vision can be found here: https://github.com/asm-products/buckets/blob/master/docs/vision/vision.md They are going after the “sustainable open-source” model of SaaS/Plugin marketplace. Git entries do look a little sad for the last 6 months. Makes me sad since I like this one so much ;( Whos is Buckets for? I think Buckets is great for a lot of folks. If I had to choose out of all of the above system, I would choose Buckets over Ghost right now. Why? I don’t care about having a super nice editor as I do about having custom fields. That said, I can see how Ghost’s markdown editor is a killer feature for a true writer.
Most of these CMSes all have different takes on content management than traditional systems like WordPress, Joomla or Drupal have. Ghost specializes in blogging. Keystone and BluePencil are full-feature CMSes. Apostrophe takes front-end editing to the next level. Buckets keeps UI simple, but content flexible. Because a lot of these are Apples and Oranges comparisons, it is hard to tell if there is a clear winner of sorts. Sure, Ghost has a lot of money flowing through it, but I’m personally more excited by Buckets and its content flexibility. After all this, none of these CMSes can fill the role of WordPress just yet. None of them have a native method or a plugin that can systematically handle repeating content (ACF repeater or Flexible content fields) in the same way. I would be stoked if such feature was added to any of these CMSes. It shouldn’t be especially difficult to do for the MongoDB CMSes as they could store the multiple items as an array within a sub document. After writing this Node CMS comparison, my conclusion is that none of these have everything just yet. Maybe in 6 months to a year? Only time will tell. Links you might also be interested in (we found them after writing this): http://blog.budacode.com/2015/05/08/node-js-cms-framework-comparison/ http://waitingfortheelevator.com/a-review-of-node-js-content-management-systems/
If you're willing to take the leap!
If you are willing to take the leap, we can help you fly! That is, if you want us to build you a Node based CMS site we can do it. We’re already building systems using Node for most of our internal tools. We’d be happy to help you with your node.js or CMS needs!