What is the best GraphQL CMS for me?

GraphQL is a technology that has been around for some years now. It is a communications protocol that is an alternative to the currently popular RESTful API architectures. Since it's reveal by Facebook back in fall of 2015 GraphQL has managed to gather significant traction in the market. Together with contemporary universal JavaScript frameworks like Next.js it is a good base for building decoupled websites and apps.

Many companies from tech titans like GitHub to publishers such as the Economist and the Financial Times are embracing GraphQL. Especially for the publishing market GraphQL is a significant opportunity to decouple from product specific ecosystems for their publishing tools. Using GraphQL for the delivery layer allows good performance as well as the flexibility to deliver content from a myriad of different publishing tools as well as data platforms with a single protocol.

But the market for GraphQL Content Management Systems (CMS) is still raw, with a few dominant players, but not a defacto leader in the field. Let's examine a few popular options for content platforms that already offer GraphQL support:

WordPress

Drupal

eZ Platform

Contentful

Cosmic.js

GraphCMS

The options can be divided into two classes: Content as a Service platforms and traditional self-hosted Open Source Content Management tools. Both of these approaches have merits and disadvantages.

WordPress

As the worlds' most popular content publishing platform, WordPress is definitely a contender in the GraphQL field. At this point of writing the project is just coming out of a significant investment into REST APIs, and there is no core support for GraphQL in WordPress yet.

Third party plugins for WordPress do exist, with two prominent options: wp-graphql and graphql-wp. The naming for the products is somewhat confusing, but out of these options, the wp-graphql option is more common and widely adopted, with a solid codebase that is WordPress VIP approved.

Drupal

Drupal is a Symfony based open source CMS that is heavily targeted towards enterprise and multisite installations. In addition to this market that the product is now most competitive in, during 2017 the Drupal ecosystem has also produced two API first distributions, Contenta and Reservoir.

As of writing neither Contenta or Reservoir currently support GraphQL. Fortunately there is a Drupal 8 module for GraphQL in development, that is maturing fast and Reservoir plans to use this going forward. The GraphQL module for Drupal 8 is built ontop of an existing GraphQL PHP implementation from Youshido, so even the Alpha versions can be considered relatively stable.

eZ Platform

eZ Platform is a content management system that is geared towards the enterprise market. It is built on a solid foundation of the Symfony Full Stack framework. The system builds on the heritage of eZ Publish, the previous generation product which has had full REST capabilities since 2013 in version 5.

For eZ Platform there is a GraphQL extension that exposes the core APIs using GraphQL. It is built using an existing GraphQL library and Symfony integration, so the solution can be considered very stable even at such experimental level. The GraphQL integration does support the core features of the eZ Platform content repository, with dynamic model updates reflected from the database.

Contentful

Contentful is a SaaS service that delivers a content editing interface and an API for it. It is currently the market leader in the CaaS (Content as a Service) model in the market today. As a household name Contentful enjoys the same position as WordPress in the self-hosted Open Source world. Contentful provides a free tier and for a CaaS a solid feature set.

Currently Contentful does not offer native GraphQL support in it's core APIs. The Contentful team has released a proxy package that allows exposing your contentful API via GraphQL. But this approach currently requires you to run the server in your environment and thus does not cash in of the CaaS promise for GraphQL.

Cosmic.js

Cosmic.js is a new contender in the CaaS category. It is built natively on top of GraphQL and as such is easy to consume using a GraphQL client such as Apollo or Relay. Cosmic.js boasts an impressive list of adopters, including Apple, Volkswagen and Microsoft. Cosmic.js does not provide a free tier, but just a free limited trial.

At this point the GraphQL support is really the strength of Cosmic.js. Compared to self-hosted platforms like WordPress it's functionality is very limited. If you're looking for very basic GraphQL content feed then this might be a good choice, but for any more complexity you will need to look at other tools.

GraphCMS

GraphCMS was the first CMS that started riding the GraphQL fame. The service is a pure CaaS model, with a limited free tier and CaaS pricing that can scale very high very quickly if you're used to Drupal or other Open Source options.

Like Cosmic.js, GraphCMS is a GraphQL native. The API is very easy to understand and consume, but it is also limited. Again, for any complex content modeling you will need to look at GraphQL solutions such as eZ Platform for more semantic models and complex integrations

What is the best option for me?

Out of the above options each of them will work for certain audiences. The self-hosted Open Source applications are definitely more extensible. They also come with a lower price model if content publishing is your main business. On the downside you will need operations and developers to maintain these tools.

For content as a service (CaaS) providers you will need zero maintenance. The downsides for these options is the limitations for customising the platform as well as the high cost if you need to host more content. A CaaS service best serves customers for whom content publishing is a secondary task, such as simple marketing sites, decoupled eCommerce solutions or Mobile Apps.

For both of these classes of Content Management Tools the GraphQL protocol itself is the uniting factor. This allow