⬆️ ⬇️

Review 14 headless cms 2019

Some time ago, in a public company that I worked for, noticeable in the Russian market, the question arose of using headless cms. Among the many implementations it was necessary to choose one. This is a story about how I shaped my selection criteria, how I analyzed cms, and how this analysis led me to think that I should write my own. Review 14 headless cms under the cut.







What is a headless CMS?



Although the term is not new, for some reason this topic is covered very little in the Russian-language Internet. So, according to Wikipedia :

A CMS , or a CMS , is a back-end repository that makes it possible to use the system.

Headless content management system , or headless CMS, is a server-based content management system (CMS), which is initially a content repository and provides access to content through the RESTful API for display on any device.



In other words, headless cms is a concept, a kind of special type of cms-app, according to which cms is responsible only for managing “clean” content. This allows you to separate the data layer, which is managed in cms, from the display layer, which is controlled by the client application. Content is distributed in a universal format, usually in JSON, and this makes it possible to manage simultaneously the website, the mobile application and any devices connected to the Internet.



More about the pros and cons of this concept can be found in this article , or this , or again in an article on Wikipedia .

')

Context immersion



To determine the search criteria and understand which headless cms is better than others, I had to answer the question - what is the best in what? What tasks should it solve and how?



To demonstrate my then train of thought, I came up with a typical task and solved it using one of the headless cms. And although in reality everything was a little different, such a narrative format reflects the essence more concisely and better reveals the topic of headless cms.



So, imagine that a task comes to the development. On the site you need to implement a new section in which users will read reviews for films.

Conditions are:



These are requirements that came from an internal customer. From the development side, there is a technical vision for implementation, namely:



Well, the task is clear. I turn to the decision.



I will use Any JSON CMS, this is one of the headless cms. I note that at the moment it does not meet all the requirements described above. For example, the content manager will not be able to see in the test environment what the edits will look like. However, all the advantages and disadvantages will be visible later. Now I strive to “touch” a typical scenario of working with any headless cms.



The first thing to do is to describe the models. The model answers the question, what should the content entity look like? What is its structure? In essence, this is a protocol for interaction between cms and a client application. In our case - a review for the film - the object contains:



As a JSON Schema, the review model looks like this:

{ type: 'object', required: ['movieName', 'moviePoster', 'reviewText'], additionalProperties: false, properties: { movieName: { type: 'string', minLength: 1, maxLength: 300, }, moviePoster: { type: 'string', description: 'URL to file', }, movieProducer: { type: 'object', required: ['name', 'surname'], additionalProperties: false, properties: { name: { type: 'string', maxLength: 100, minLength: 1 }, surname: { type: 'string', maxLength: 100, minLength: 1 }, }, }, reviewText: { type: 'string', minLength: 1, maxLength: 3000, }, }, } 


You also need to implement feature toggle, the model in the form of JSON Schema looks like this:

 { type: 'object', required: ['isFeatureActive', 'name'], additionalProperties: false, properties: { isFeatureActive: { type: 'boolean' }, name: { type: 'string', enum: ['movieReviewFeatureToggle'] }, }, } 


When there is an understanding of how models should look, you can create them in Any JSON CMS.







Immediately create content entities, i.e. content itself, based on models. One bogus review and feature toggle essence.







To integrate the client application with cms, you need an API key. I generate it in the appropriate section cms.





Now everything is ready for the implementation of functionality in the client application and integration with cms. The client application can be any website or mobile application, or both, written on anything. As an example, I am implementing the functionality on the SPA website at React. In fact, we take data with the already known, fixed structure from cms and display it as we want.

 import React, { Component } from 'react' import { Accordion, AccordionItem, AccordionItemTitle, AccordionItemBody, } from 'react-accessible-accordion' import 'react-accessible-accordion/dist/fancy-example.css' const apiUrl = 'https://api.anyjsoncms.com' // ApiKey      const apiKey = '87414950dfd15648ea560bd89dd0ee02bfc8fcca' class App extends Component { constructor(props) { super(props) this.state = { movies: null, isFeatureActive: null, loading: true, } } componentDidMount() { const options = { method: 'GET', headers: { ApiKey: apiKey } } Promise.all([ fetch(`${apiUrl}/entries?apiId=featureToggle`, options).then(resp => resp.json() ), fetch(`${apiUrl}/entries?apiId=movieReview`, options).then(resp => resp.json() ), ]) .then(([featureToggleResp, movieReviewResp]) => { const featureToggle = featureToggleResp.find( item => item.value.name === 'movieReviewFeatureToggle' ) const isFeatureActive = featureToggle && featureToggle.value && featureToggle.value.isFeatureActive const movies = movieReviewResp.map(item => item.value) this.setState({ movies, isFeatureActive, loading: false }) }) .catch(error => { console.error(error) }) } render() { const { movies, isFeatureActive, loading } = this.state if (loading) return <div>Loading...</div> if (!isFeatureActive) return <div style={{ display: 'none' }}>Section is hidden</div> return ( <div> <Accordion> {movies.map( ({ movieName, moviePoster, movieProducer, reviewText }, index) => ( <AccordionItem key={index}> <AccordionItemTitle> <h3>{movieName}</h3> </AccordionItemTitle> <AccordionItemBody> <img src={`${apiUrl}${moviePoster}`} alt="" /> {!movieProducer ? null : ( <div>{`${movieProducer.name} ${ movieProducer.surname }`}</div> )} <div>{reviewText}</div> </AccordionItemBody> </AccordionItem> ) )} </Accordion> </div> ) } } export default App 


Everything. Now the content manager can safely manage reviews, and it is now possible to enable and disable functionality using feature toggle.



To show reviews to films is a simple example, I deliberately cited it in order not to drown in details, but only to demonstrate the principle. In fact, features can be an order of magnitude more complicated. These can be interface elements, product catalogs, complex widgets, landing pages, form generators, posts, etc. Also, in this example, cms only distributes information, but most headless cms provide a CRUD API, which makes it possible, for example, to process forms, and generally manipulate entities as you like. In general, the idea of ​​headless cms is just to provide freedom and convenience in the implementation of an arbitrarily complex protocol to transfer control to cms anything and as required.



Criteria for selection and analysis of headless cms



After I had an understanding of what tasks would be solved with the help of headless cms and how, I singled out the criteria and began to study the systems. Now according to the site headlesscms.org there are 54 cms. Analyzing them all is quite a laborious process, so I identified 14 most popular, visible and discussed systems: Any JSON CMS, Contentful, Strapi, GraphCMS, Squidex, Butter CMS, Cloud CMS, ockpit, Cosmic JS, Directus, Kentico Cloud, Netlify CMS , Prismic, Ghost.



The results are more convenient to study in the form of a table . But I will duplicate here.



Any JSON CMS



Siteanyjsoncms.com

DescriptionJMS to any app Headless CMS
The target audienceDigital teams
Price per monthAlpha version, no price
Commercial supportnot
Twitter followers0 thous.
Github stars (if open source)not open source
Open source solutionnot
On-premises softwarenot
Cloud serviceYes
GraphQL APInot
REST APIYes
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)not
It is possible to create nested models (for example, an object contains another object)Yes
It is possible to combine models (for example, the field can be either a string or a number)not
It is possible to specify how many content entities can be created based on a specific model.not
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)Yes
Read API for content entitiesYes
Ceate, update, delete API for content entitiesnot
CRUD API for modelsnot
API access tokens supportYes
Differentiation of rights to access to the API by access token APInot
Publishing System: Draft / Publishnot
The possibility of delayed publicationnot
Fixing model versionsnot
Committing Content Entity Versionsnot
Git-like versioning systemnot
Project managementYes
Image managementYes
File managementYes
Webhooksnot
user managementnot
User Access Managementnot
Additional InformationOnly alpha version available.


Contentful



Sitecontentful.com
DescriptionUpdate once and publish everywhere, so teams build digital products faster.
PurposeContent management in multi-channel world
The target audienceDigital teams, enterprises
Price per monthcloud - free, $ 39, $ 879, hidden price for enterprise
Commercial supportYes
Twitter followers33.6 thousand
Github stars (if open source)not open source
Open source solutionnot
On-premises softwarenot
Cloud serviceYes
GraphQL APIYes
REST APIYes
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)Yes
It is possible to create nested models (for example, an object contains another object)not
It is possible to combine models (for example, the field can be either a string or a number)not
It is possible to specify how many content entities can be created based on a specific model.not
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)not
Read API for content entitiesYes
Ceate, update, delete API for content entitiesYes
CRUD API for modelsYes
API access tokens supportYes
Differentiation of rights to access to the API by access token APIYes
Publishing System: Draft / PublishYes
The possibility of delayed publicationnot
Fixing model versionsYes
Committing Content Entity VersionsYes
Git-like versioning systemnot
Project managementYes
Image managementYes
File managementYes
WebhooksYes
user managementYes
User Access ManagementYes


Strapi



Sitestrapi.io
DescriptionManage your content. Distribute it anywhere.
PurposeBuild powerful content API with no effort
The target audienceProfesional developers
Price per monthon-premiss - free
Commercial supportYes
Twitter followers2,3 thousand
Github stars (if open source)11.1 thousand
Open source solutionYes
On-premises softwareYes
Cloud servicenot
GraphQL APIYes
REST APIYes
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)not
It is possible to create nested models (for example, an object contains another object)not
It is possible to combine models (for example, the field can be either a string or a number)not
It is possible to specify how many content entities can be created based on a specific model.not
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)not
Read API for content entitiesYes
Ceate, update, delete API for content entitiesYes
CRUD API for modelsnot
API access tokens supportnot
Differentiation of rights to access to the API by access token APIYes
Publishing System: Draft / Publishnot
The possibility of delayed publicationnot
Fixing model versionsnot
Committing Content Entity Versionsnot
Git-like versioning systemnot
Project managementNo, but you can deploy a separate instance of cms
Image managementYes
File managementYes
WebhooksNo, but it can be implemented via lifecycle callbacks
user managementYes
User Access ManagementYes
Additional InformationStudied the alpha version, there were bugs while saving the model


GraphCMS



Sitegraphcms.com
DescriptionBring content to any platform
PurposeContent infrastructure for your digital product
The target audienceProfesional developers, agencies, enterprises
Price per monthcloud - free, $ 49, $ 149, $ 499, hidden price for enterprise
Commercial supportYes
Twitter followers2.4 thousand
Github stars (if open source)not open source
Open source solutionnot
On-premises softwarenot
Cloud serviceYes
GraphQL APIYes
REST APInot
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)not
It is possible to create nested models (for example, an object contains another object)not
It is possible to combine models (for example, the field can be either a string or a number)not
It is possible to specify how many content entities can be created based on a specific model.not
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)yes, either does not allow to change the model, or a change leads to data loss after confirmation
Read API for content entitiesYes
Ceate, update, delete API for content entitiesYes
CRUD API for modelsnot
API access tokens supportYes
Differentiation of rights to access to the API by access token APIYes
Publishing System: Draft / PublishYes
The possibility of delayed publicationnot
Fixing model versionsnot
Committing Content Entity Versionsnot
Git-like versioning systemnot
Project managementYes
Image managementYes
File managementYes
WebhooksYes
user managementYes
User Access ManagementYes


Squidex



Sitesquidex.io
DescriptionSquidex enables you to manage your web site.
PurposeIt is a little bit easier.
The target audienceProfesional developers
Price per monthcloud - free, $ 19, $ 49, $ 99; on-premises - free
Commercial supportnot announced
Twitter followers0 thousand
Github stars (if open source)0.5 thousand
Open source solutionYes
On-premises softwareYes
Cloud serviceYes
GraphQL APIYes
REST APIYes
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)not
It is possible to create nested models (for example, an object contains another object)not
It is possible to combine models (for example, the field can be either a string or a number)not
It is possible to specify how many content entities can be created based on a specific model.you can specify single content or multiple content, a specific number can not be specified
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)not
Read API for content entitiesYes
Ceate, update, delete API for content entitiesYes
CRUD API for modelsnot
API access tokens supportYes
Differentiation of rights to access to the API by access token APIYes
Publishing System: Draft / PublishYes
The possibility of delayed publicationYes
Fixing model versionsnot
Committing Content Entity VersionsYes
Git-like versioning systemnot
Project managementYes
Image managementYes
File managementYes
WebhooksYes
user managementYes
User Access ManagementYes


Butter cms



Sitebuttercms.com

DescriptionAdd a blog or CMS to your site in minutes. Drop-in our Headless CMS and get back to more interesting problems.
PurposeDrop our API-based CMS into any tech stack in minutes.
The target audienceStartups, agencies, enterprises
Price per monthcloud - $ 24, $ 83, $ 166, hidden price for enterprise
Commercial supportYes
Twitter followers0.4 thousand
Github stars (if open source)not open source
Open source solutionnot
On-premises softwarenot
Cloud serviceYes
GraphQL APInot
REST APIYes
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)not
It is possible to create nested models (for example, an object contains another object)not
It is possible to combine models (for example, the field can be either a string or a number)not
It is possible to specify how many content entities can be created based on a specific model.not
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)not
Read API for content entitiesYes
Ceate, update, delete API for content entitiesnot
CRUD API for modelsnot
API access tokens supportYes
Differentiation of rights to access to the API by access token APIno (and not required, since there is only read)
Publishing System: Draft / PublishYes
The possibility of delayed publicationnot
Fixing model versionsnot
Committing Content Entity VersionsYes
Git-like versioning systemnot
Project managementYes
Image managementYes
File managementYes
WebhooksYes
user managementYes
User Access ManagementYes


Cloud CMS



Sitecloudcms.com

DescriptionEasy for Content Editors + Powerful for Developers
PurposeCMS for business critical applications
The target audienceEnterprise
Price per month$ 200, $ 800, $ 1200
Commercial supportYes
Twitter followers0.3 thousand
Github stars (if open source)not open source
Open source solutionnot
On-premises softwareYes
Cloud serviceYes
GraphQL APIYes
REST APIYes
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)Yes
It is possible to create nested models (for example, an object contains another object)Yes
It is possible to combine models (for example, the field can be either a string or a number)not
It is possible to specify how many content entities can be created based on a specific model.not
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)not
Read API for content entitiesYes
Ceate, update, delete API for content entitiesYes
CRUD API for modelsYes
API access tokens supportYes
Differentiation of rights to access to the API by access token APInot
Publishing System: Draft / PublishYes, you can enable it in the settings
The possibility of delayed publicationnot
Fixing model versionsYes
Committing Content Entity VersionsYes
Git-like versioning systemYes
Project managementYes
Image managementYes
File managementYes
WebhooksYes
user managementYes
User Access ManagementYes
Additional InformationVery powerful, there are all the chips of the enterprise level, and even more. Due to the abundance of functionality, you need a little more time to figure it out.


ockpit



Sitegetcockpit.com

DescriptionSimple Content Platform
PurposeAdd content management functionality to any site - plug & play / headless / api-first CMS
The target audienceDigital teams
Price per monthon-premises - free
Commercial supportYes
Twitter followers0.7 thousand
Github stars (if open source)3,5 thousand
Open source solutionYes
On-premises softwareYes
Cloud servicenot
GraphQL APINo, but implemented through the installation of add-on
REST APIYes
The content entity is created based on the model.Yes
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)yes, using repeater
It is possible to create nested models (for example, an object contains another object)Yes
It is possible to combine models (for example, the field can be either a string or a number)yes, using repeater
It is possible to specify how many content entities can be created based on a specific model.No, it is possible to create only singleton models
Managing detected conflicts between the model and the content entity (for example, if you change the model so that an existing content entity does not satisfy these changes, does the system know how to solve such situations?)not
Read API for content entitiesYes
Ceate, update, delete API for content entitiesYes
CRUD API for modelsread and update only
API access tokens supportYes
Differentiation of rights to access to the API by access token APIyes, through collections permssions settings
Publishing System: Draft / Publishnot
The possibility of delayed publicationnot
Fixing model versionsnot
Committing Content Entity VersionsYes
Git-like versioning systemnot
Project managementNo, but you can deploy a separate instance of cms
Image managementYes
File managementYes
WebhooksYes
user managementYes
User Access Managementyes through group configuration
Additional InformationDecent opensource solution. Some settings are set through the configuration, rather than through the interface. For example, to configure the type of repeater, you need to study the documentation and prescribe options via JSON. Written in PHP.


Cosmic js



Sitecosmicjs.com

DescriptionModern Content Management Solution. The leading CMS for modern digital teams.
PurposeThe Cosmic JS Headless CMS gives you the job done.
The target audienceDigital teams, enterprice
Price per month$ 44, $ 179, $ 449, $ 359, $ 719
Commercial supportYes
Twitter followers2.8 thousand
Github stars (if open source)not open source
Open source solutionnot
On-premises softwareYes
Cloud serviceYes
GraphQL APIYes
REST APIYes
The content entity is created based on the model.Yes, but the content creator can add any fields, even if they are not in the model. Those. Model -> content is not strict.
You can create your own modelsYes
It is possible to create your models via UIYes
A model may contain a link to another model.Yes
It is possible to combine links (for example, a model can refer to either of the two models)No, only two options are available:
  • link to any Object
  • a reference to the Object of one particular Object Type


( )Yes
( , )not
not
(, , , ?)not
Read APIYes
Ceate, update, delete APIYes
CRUD APIYes
API access tokensYes
API API access token, read write
: Draft/PublishYes
Yes
not
Yes
Gitnot
Project managementYes
Yes
Yes
WebhooksYes
Yes
Yes


Directus



Sitedirectus.io
DescriptionPremium Open-Source Software For Any Data-Driven Project
PurposeDirectus is an open-source suite of software that provides an instant API wrapper for SQL databases and an intuitive Admin App for non-technical users to manage that content.
Digital teams, enterprice
on-premises — free
Yes
twitter19,4
Github stars ( open source)3,8
Open sourceYes
On-premises softwareYes
Cloud service, -
GraphQL APInot
REST APIYes
Yes
Yes
UIYes
Yes
( )not
( ), group,
( , )not
, singleton
(, , , ?)not
Read APIYes
Ceate, update, delete APIYes
CRUD APIYes
API access tokens, , ,
API API access token,
: Draft/Publishnot
not
not
Yes
Gitnot
Project management, cms
Yes
Yes
Webhooks, , php
Yes
Yes
Additional Information«Something is wrong with this instance's server or database.» . . 10 . — 5 . , , . . - . , Directus Stable, .. .


Kentico Cloud



Sitekenticocloud.com

DescriptionStop Your Content Friction. Collaborate and deliver engaging omnichannel experiences with a CMS that's built for content strategists and developers.
PurposeCreate engaging personalized experiences across any device with a next-generation headless CMS.
Digital teams, agencies, enterprice
cloud — 0$, 299$, 999$, hidden price for enterprise
Yes
twitter1
Github stars ( open source)open source
Open sourcenot
On-premises softwarenot
Cloud serviceYes
GraphQL APInot
REST APIYes
Yes
Yes
UIYes
Yes
( )Yes
( ), Content Type Snippets, , snippet snippet
( , )not
not
(, , , ?)not
Read APIYes
Ceate, update, delete API, professional
CRUD API, beta , professional
API access tokens, professional
API API access token, API token ,
: Draft/PublishYes
Yes
not
Yes
Gitnot
Project managementYes
Yes
Yes
WebhooksYes
Yes
Yes
Additional Information, contentfull. .


Netlify CMS



Sitenetlifycms.org

DescriptionOpen source content management for your Git workflow. Use Netlify CMS with any static site

generator for a faster and more flexible web project

PurposeGet the speed, security, and scalability of a static site, while still providing a convenient editing interface for content.
Profesional developers
on-premises — free
twitter3,6
Github stars ( open source)7,4
Open sourceYes
On-premises softwareYes
Cloud servicenot
GraphQL APInot
REST API, git
Yes
Yes
UI, yml
Yes
( )not
( ), object ,
( , )not
not
(, , , ?)not
Read APInot
Ceate, update, delete APInot
CRUD APInot
API access tokensnot
API API access tokennot
: Draft/Publish, editorial_workflow on, GitHub
not
Yes
Yes
GitYes
Project management, cms
, , ,
, , ,
Webhooksnot
, cms , git ( bitbucket, github, gitlab .)
, git
Additional Information— 2.5.1. CMS — . , git .


Prismic



Siteprismic.io
DescriptionOne CMS Backend for all your Websites & Apps
PurposeCMS for apps, e-commerce, editorial websites, corporate websites. Enables marketing teams to create highly targeted acquisition campaigns.
Digital teams, enterprice
cloud — 0$, 7$, 15$, 100$, 500$
Yes
twitter12,1
Github stars ( open source)open source
Open sourcenot
On-premises softwarenot
Cloud serviceYes
GraphQL API, alpha
REST APIYes
Yes
Yes
UIYes
Yes
( )Yes
( ), «group — a repeatable group of fields», , group group
( , )not
, singleton
(, , , ?), .. ,
Read APIYes
Ceate, update, delete APInot
CRUD APInot
API access tokensYes
API API access token( , .. read)
: Draft/PublishYes
Yes
not
Yes
Gitnot
Project managementYes
Yes
Yes
WebhooksYes
Yes
, Professional


Ghost



Siteghost.org

DescriptionGhost is a fully open source, adaptable platform for building and running a modern online publication. We power blogs, magazines and journalists from Zappos to Sky News.
PurposePowerful platform for creating an online blog or publication
Professional bloggers, serious enterprise publishers
on-premises — free; cloud — 29$, 79$, 199$
Yes
twitter24,1
Github stars ( open source)28,7
Open sourceYes
On-premises softwareYes
Cloud serviceYes
GraphQL APInot
REST APIYes
not
not
UInot
not
( )not
( )not
( , )not
not
(, , , ?)not
Read APIYes
Ceate, update, delete APInot
CRUD APInot
API access tokensYes
API API access tokennot
: Draft/PublishYes
Yes
not
not
Gitnot
Project managementYes
Yes
not
WebhooksYes
Yes
Yes
Additional Informationwordpress, editing tool




findings



headless cms : , , git , .

. , . , , , , , , — . :



, , . Cloud CMS, .



Conclusion



, headless cms. , . Any JSON CMS.



— git . , , “” .

Source: https://habr.com/ru/post/444600/



All Articles