Oops! I did it again: introducing DecentCMS

There are a few things that nobody should ever do. One of these things is to write a new CMS. So about four months ago, I decided to write a new CMS using Node.js. It’s called DecentCMS, and I’ve had insane amounts of fun building it so far.

It doesn’t do much yet: it’s only a runtime, there is no dashboard at all, but most of the important architectural foundations are in place. It works well enough that I’m already hosting two sites (my business and the CMS’s new site) on a single multi-tenant DecentCMS instance running on Azure. I manage the contents using a text editor, and I deploy it through git.

DecentCMS builds on lots of ideas from Orchard, on what I know works, and it tries to find new ways of doing what I now know doesn’t work so well. For example, the idea of content types composed from content parts is still there, but I did away with fields, instead allowing parts to be named, thus removing a common source of confusion from new Orchard users.

Before I even started writing code, I worked on establishing a set of principles that are to guide the whole enterprise:

  • Modular: the core provides very little, all features are provided by services within modules.
  • Extensible: all services can be replaced and extended.
  • Composition: All components have a single, limited responsibility, and are composed to build larger entities.
  • Decoupled: services are loosely coupled, and hard dependencies are avoided.
  • Familiar: when a component, API, or pattern already exists and has been successful, use it. Don't reinvent, don't be exotic in the core. Weird and experimental stuff belongs in optional modules.
  • Simple: simple designs, with a focus on core features that are needed by all.
  • Open: everything is open-source, but can be used in commercial applications. Open standards are preferred.
  • Easy: different personas will get different and adapted entry points into the system. Developers get a clean, clear, and extensible API, designers get tools to determine what templates to write, webmasters get complete control over the structure of the site and its contents, content creators get an easy, task-based set of tools and wizards, and end-users get modern, responsive, and fast sites. The barrier to entry is kept low, and no concept is required knowledge until it’s needed. Friction is minimized.
  • Ready: out of the box, the most common types of sites can be built: blog, commerce, community. You only have to build what's unusual about your site.
  • Scalable: sites are fast no matter their scale, at boot and then on every request. Tooling exists to diagnose and fix performance issues.
  • Proven: all features are tested, and I’ll eat my own dogfood.
  • Documented: all features come with documentation, literally: documentation is actually packaged with the code and tests for each module. JsDoc comments are used on all public APIs.

In the next few posts, I’ll detail how I implemented each of these principles, and I’ll dig into specific features.

In the meantime, if you want to give it a try, or if you want to look at the code, please do so, and let me know of any feedback you may have. Discussions are more than welcome, and if you’d like to contribute in any way, I’d be delighted.


  • Good work. Looks great ;)

  • Awesome work Bertrand! I use Orchard for almost 2 years now and indeed hoped and expected to see a decent CMS on Node.js, based on Orchard's principles.

    Going to be fun looking into it and even extending it. Thanks!

  • Oh I've been hoping for an Orchard-y Node.js CMS. Who better to build it than the benevolent dictator of Orchard himself!

  • Do you think the refinements and new ways of doing things could be taken into account in Orchard 2.0? Or the different nature of C# and js doesn't help on this? Would it be great Orchard 2.0 and this CMS share data model to help Orchard users to move to it or even to share components between both projects? What do you think about it?

    Thank you for your efforts, I learn and enjoy everyday a lot playing with Orchard!

  • Thank you all for your kind words. This is very encouraging.

    @Sergio: yes, absolutely, that is a great question, and in fact, many core Orchard contributors have known about this for quite a while, and the idea is to cross-pollinate between both projects as much as possible. I've been chatting with Nick about data access, for instance, and the future querying API of Orchard 2.0 will likely have a lot in common with what I've built for DecentCMS. Sipke also knew about this while he was building the new Orchard layout editor, and we've had at the back of our minds the idea to re-use the client side of it on DecentCMS. I'd just have to re-write a few server-side services.

  • I've just got started on Orchard and am very impressed. I can only imagine DecentCMS will be better, but on nodeJS.

    A big factor personally for Orchard was the .NET stack. The weekly podcast appears to have suddenly stopped. Are you moving off Orchard to focus on DecentCMS now?

  • @Matthew: the podcast has not stopped at all, it's still on twice a week. We recorded it yesterday, and will record another one on Thursday.
    I'm not moving off Orchard at all: all of my current customers are on Orchard.

  • Thanks @bleroy. That is encouraging to hear. I'm really looking forward to diving into the platform and contributing.

    I must be missing where the podcast is. I've been looking at http://orchardproject.net/Tags/Podcast and the home page which for me list 3rd Feb as the latest one.

  • @Matthew: looks like we're a little behind with posting articles and podcast recordings, but the meetings are still taking place, and the recordings will make it to the site eventually.

  • Awesome, thanks again @bleroy.

  • I think it's absolutely great that you're cross-pollinating ideas between Orchard and this new CMS so that both can benefit. I'm really looking forward to seeing how this new project develops. The only thing that bothers me unfortunately is the name..."Decent" just doesn't embody the effort you're putting in or the incredible product it's bound to be. Any chance for a rename to "AwesomeCMS", or "BestEverCMS"? =)

  • Well, if it does become incredible, awesome or the best ever, we'll see ;) I'll be aiming for decent for now, and then we'll see...

  • Nice! I am waiting for the implementation part of the principles.

Comments have been disabled for this content.