verified comparison · feb 2026

Which CMS is
right for you?

In-depth comparison of 15 CMS platforms based on official docs, GitHub repos and changelogs. No marketing fluff.

15
systems
24
categories
110
features

QFD (Quality Function Deployment) is a structured decision-making methodology developed in Japan, widely used in engineering and product management to translate customer needs into measurable technical parameters. Instead of comparing features in a flat list, QFD weights each requirement by its real importance to your project — so a feature that matters 9× gets 9× the influence on the final score.

This eliminates gut-feeling bias and produces transparent, reproducible, and defensible results you can share with stakeholders.

↓ Start QFD Matrix
scroll down

The contenders

Ten traditional (full-stack) CMS platforms and five headless/API-first CMS platforms compared across 110 features in 24 categories.

Craft CMS

v5.9.0 · PHP
PHP 8.2+Yii 2MySQL/PgSQL
Full-stack CMS

Directus

v11.15.0 · Node.js
Node.jsVue.jsPgSQL/MySQL/SQLite
Database Wrapper CMS

Drupal

v11.3.2 · PHP
PHP 8.3+SymfonyMySQL/PgSQL
Full-stack CMS

Ghost

v6.17.0 · Node.js
Node.jsExpressMySQL/SQLite
Publishing CMS

Joomla

v6.0.2 · PHP
PHP 8.xMySQL/PgSQLMVC
Full-stack CMS

KeystoneJS

v6.5.1 · Node.js
released 2025-05-06 No releases since May 2025 — slow development pace
TypeScriptPrismaPgSQL/SQLite
Headless CMS

October CMS

v4.1.9 · PHP
PHP 8.2+LaravelMySQL/PgSQL/SQLite
Full-stack CMS

Payload

v3.75.0 · Next.js
TypeScriptNext.jsMongoDB/PgSQL
Headless CMS + Framework

Plone

v6.1.4 · Python
Python 3.10+Zope/VoltoZODB/PostgreSQL
Full-stack CMS

Strapi

v5.33.4 · Node.js
Node.jsKoaSQLite/PgSQL/MySQL
Headless CMS

Sulu CMS

v3.0.3 · PHP
PHP 8.2+SymfonyMySQL/PgSQL
Full-stack CMS

TYPO3

v14.0.2 · PHP
PHP 8.3+DoctrineMySQL/PgSQL
Full-stack CMS

Umbraco

v17.0.2 · .NET
C# / .NET 9ASP.NET CoreSQL Server/SQLite
Full-stack CMS

Wagtail

v7.3 · Python
Python 3.9+DjangoPostgreSQL/SQLite
Full-stack CMS

WordPress

v6.9.1 · PHP
PHP 8.xMySQL/MariaDBGutenberg
Full-stack CMS
i
Release data last checked: 2026-02-07. Versions and dates sourced from official release pages and GitHub.

Scale & ecosystem metrics

GitHub stars, contributors, plugin counts, project age and market share — hard data showing each platform's scale and community health.

CMS ⭐ Stars 👥 Contributors 🧩 Extensions 📅 Since 🌐 Market share 🏠 Sites
Craft CMS 3.5k Main repo on GitHub 160+ GitHub contributors + Plugin Store developers 1,000+ plugins (Plugin Store) 2013 13 years 0.2% of all CMS-powered sites (W3Techs) ~55k estimated active Craft sites
Directus 34k BSL license (was GPL) 400+ GitHub contributors 100+ extensions 2004 22 years n/a headless — no W3Techs tracking n/a
Drupal 4.2k Mirror repo — dev on drupal.org 1,500+ Monthly active contributors on drupal.org 50,000+ modules 2001 25 years 1.3% of all CMS-powered sites (W3Techs) ~760k reporting to drupal.org update status
Ghost 51.6k Non-profit organization 500+ GitHub contributors, core team of 17 100+ integrations 2013 13 years n/a headless — no W3Techs tracking n/a
Joomla 4.8k Main repo on GitHub 700+ GitHub contributors 5,000+ extensions (JED) 2005 21 years 3.5% of all CMS-powered sites (W3Techs) ~2.7M active Joomla websites
KeystoneJS 9.8k v6 repo (classic had 14.5k) 200+ GitHub contributors ~10 packages 2013 13 years n/a headless — no W3Techs tracking n/a
October CMS 11.1k Main repo on GitHub 160+ GitHub contributors across octobercms org 1,000+ marketplace plugins 2014 12 years < 0.1% Niche — primarily Laravel developer community (W3Techs) ~25k estimated active October CMS installations
Payload CMS 40.1k Fastest-growing CMS on GitHub 200+ GitHub contributors 50+ plugins 2021 5 years n/a headless — no W3Techs tracking n/a
Plone 270 Meta-package repo — code split across 100+ repos in plone org 400+ GitHub contributors across plone org (300+ repos) 3,000+ add-ons (PyPI) 2001 25 years < 0.1% of all CMS-powered sites (W3Techs) ~10k estimated active Plone installations
Strapi 71.2k Most-starred headless CMS 800+ GitHub contributors 200+ marketplace plugins 2015 11 years n/a headless — no W3Techs tracking n/a
Sulu CMS 1.3k Core framework repo on GitHub 190+ GitHub contributors across sulu org (54 repos) 54+ official bundles 2015 11 years < 0.1% Niche — primarily DACH/European market (W3Techs) ~5k estimated active Sulu installations
TYPO3 1.2k Main repo on GitHub 300+ Active community, mainly DACH region 1,500+ extensions (TER) 1998 28 years 0.5% of all CMS-powered sites (W3Techs) ~200k live websites (BuiltWith)
Umbraco 4.5k Main repo on GitHub 500+ GitHub contributors across umbraco org 2,000+ packages (Marketplace) 2004 22 years 0.1% of all CMS-powered sites (W3Techs) ~750k estimated active Umbraco sites
Wagtail 20.1k Main repo on GitHub 900+ GitHub contributors 300+ packages (awesome-wagtail) 2014 12 years < 0.1% Niche — primarily Python/Django community (W3Techs) ~30k estimated active Wagtail installations
WordPress 11.5k Gutenberg repo — core is SVN/Trac 62 Core committers (thousands of community contributors) 60,000+ plugins 2003 23 years 62% of all CMS-powered sites (W3Techs) ~500M estimated total WordPress sites
!
Context matters: GitHub stars for Drupal/WordPress/Joomla are misleadingly low because primary development happens outside GitHub (drupal.org, Trac/SVN, etc.). Market share is tracked by W3Techs only for server-rendered CMS — headless platforms are invisible to this metric. Extension counts vary wildly in quality.

Full-stack CMS as headless / hybrid

All ten traditional CMS platforms can also serve content via API, working as headless or hybrid (server-rendered + API) systems. Here's how they compare in that mode.

Craft CMS

Good headless

Craft CMS ships with a built-in GraphQL API since v3.3, enabling full headless mode. Content is queryable via a self-documenting GraphiQL IDE. A fully-headless mode disables the frontend entirely.

GraphQL Core Full schema with queries, mutations (Pro). GraphiQL IDE, configurable public/private schemas, token-based access.
REST Plugin Element API plugin. Exposes entries, assets, categories as JSON endpoints. Configurable per element type.
Hybrid mode Yes — Twig server-side templates + GraphQL API for JS components or external consumers
Popular frontends Next.js, Nuxt, Gatsby, Astro, React SPA, Vue SPA
SDKs / helpers CraftQL (community), custom GraphQL fetch, gatsby-source-craft
Auth for API GraphQL tokens (bearer), session-based, custom auth via plugins
Headless maturity GraphQL since 2019 (v3.3). Mature, production-proven. Fully-headless mode available.

Drupal

Excellent headless

Drupal was among the first traditional CMS platforms to embrace "API-first" as a core initiative. Since Drupal 8, every entity is exposed via JSON:API out of the box.

JSON:API Core Full CRUD, filtering, includes, pagination. Follows jsonapi.org spec. Zero config.
REST Core RESTful Web Services module. HAL+JSON, XML support. Configurable per entity/method.
GraphQL Module graphql module (contrib). Full schema, queries, mutations. Mature & production-ready.
Hybrid mode Yes — Twig server-side + API for JS components (BigPipe, decoupled blocks)
Popular frontends Next.js (next-drupal), Gatsby, Nuxt, React, custom SPA
SDKs / helpers next-drupal, drupal-jsonapi-params, Drupal State (JS), Lupus Decoupled Drupal
Auth for API OAuth 2.0, JWT (contrib), session cookies, basic auth
Headless maturity Production-proven since 2017. Official "API-first" initiative.

October CMS

Basic headless

October CMS is built on Laravel and primarily serves content via Twig templates. Headless mode requires building custom REST API routes via Laravel controllers. No auto-generated API by default.

REST API Custom Custom Laravel API routes. No auto-generated endpoints. Full CRUD possible via Eloquent models and controllers.
GraphQL Plugin Community GraphQL plugin available. Not widely adopted.
Hybrid mode Yes — Twig server-side templates + custom API routes for JS components or external consumers
Popular frontends Custom SPA (React/Vue), limited headless examples
SDKs / helpers No official JS SDK. Custom fetch to Laravel API routes.
Auth for API Laravel Sanctum / Passport, custom middleware
Headless maturity Not API-first. Headless requires custom development. Primary mode is server-rendered.

Joomla

Basic headless

Joomla 4+ introduced a Web Services API exposing core content (articles, categories, contacts, banners) via REST. It's functional but less mature than Drupal/WordPress headless ecosystems.

REST API Core Web Services API. JSON output for articles, categories, contacts, users, media, banners. Token/Bearer auth.
GraphQL Extension Community extensions exist but not widely adopted. Most projects use REST.
Hybrid mode Possible — API available alongside template-rendered pages, but not a primary use case
Popular frontends Custom SPA (React/Vue), Nuxt, limited Next.js examples
SDKs / helpers No official JS SDK. Community wrappers, direct fetch to /api/index.php/v1/
Auth for API API Token (core), Bearer authentication, session-based
Headless maturity API since Joomla 4 (2021). Functional but ecosystem/docs for headless use are limited.

Plone

Good headless

Plone ships with plone.restapi, a comprehensive REST API that exposes all content, users, groups, workflows, and search. The Volto frontend itself is a React SPA consuming this API, proving its production-readiness.

REST API Core plone.restapi — full CRUD for content, users, groups, workflow transitions, search, vocabularies. JSON output with batching and expansion.
GraphQL Add-on collective.graphql (community). Limited adoption — most projects use REST.
Hybrid mode Yes — Classic UI (server-rendered TAL/Chameleon templates) + REST API for Volto or external consumers
Popular frontends Volto (React, official), Next.js, Gatsby, custom SPA
SDKs / helpers @plone/client (JS), @plone/components (React), plone.restapi (Python)
Auth for API JWT tokens, session auth, PAS (Pluggable Authentication Service)
Headless maturity plone.restapi since 2016. Volto (React frontend) is the default since Plone 6 (2022), proving full headless capability.

Sulu CMS

Good headless

Sulu CMS is built on Symfony and offers both traditional server-rendered output via Twig and a headless mode via SuluHeadlessBundle, delivering content as JSON. REST API is core, with GraphQL available via bundles.

REST API Core Full REST API for pages, articles, snippets, media, navigation, and search. JSON output with filtering and pagination.
Headless JSON Bundle SuluHeadlessBundle converts page rendering to JSON, enabling decoupled frontends.
GraphQL Custom Custom GraphQL endpoints possible via Symfony bundles (webonyx/graphql-php).
Hybrid mode Yes — Twig server-side templates + REST API for JS components or external consumers
Popular frontends Next.js, Nuxt, React SPA, Vue SPA, custom Symfony frontend
SDKs / helpers SuluHeadlessBundle, custom fetch wrappers, Symfony-based integrations
Auth for API Token-based auth, session-based, Symfony Security component
Headless maturity HeadlessBundle since ~2020. Growing adoption, especially in DACH region. REST API mature.

TYPO3

Extension-based headless

TYPO3 was built as a traditional server-rendered CMS. Headless mode requires the official "headless" extension (EXT:headless) which converts page rendering to JSON output. Not API-first by design.

JSON API Extension EXT:headless converts TypoScript rendering to JSON. Page-based output, content elements as JSON. Official TYPO3 extension.
GraphQL Extension Community extensions available. Less mature than REST/JSON approach.
REST (custom) Possible Custom Extbase controllers can expose any data as JSON. Manual but flexible.
Hybrid mode Yes — EXT:headless can run alongside traditional Fluid templates per page type
Popular frontends Next.js (official integration via EXT:headless), Nuxt, custom SPA
SDKs / helpers nuxt-typo3 (Nuxt module), t3headless/nuxt-typo3, custom fetch wrappers
Auth for API Frontend user sessions, custom token-based auth via middleware
Headless maturity Extension available since ~2020. Growing adoption but still secondary to traditional mode.

Umbraco

Good headless

Umbraco ships with a built-in Content Delivery API (since v12) and Management API (since v14), enabling full headless mode. Built on ASP.NET Core, it provides auto-generated REST endpoints for all content types with filtering, sorting, and pagination.

REST API Core Content Delivery API — auto-generated endpoints for all Document Types. Filtering, sorting, pagination, nested content expansion.
Management API Core Management API (v14+) — full CRUD for content, media, members. OAuth 2.0 client credentials for server-to-server.
Hybrid mode Yes — Razor server-side templates + Content Delivery API for JS components or external consumers
Popular frontends Next.js, Nuxt, Astro, React SPA, Angular, Blazor
SDKs / helpers Umbraco Content Delivery SDK (.NET), custom fetch to /umbraco/delivery/api/v2/
Auth for API API keys, OAuth 2.0 client credentials, ASP.NET Core auth middleware
Headless maturity Content Delivery API since v12 (2023). Growing adoption. Management API since v14 (2024).

Wagtail

Good headless

Wagtail ships with a built-in REST API (Wagtail API v2) exposing pages, images, and documents as JSON. It supports full headless mode where Django serves only as an API backend. GraphQL is available via the wagtail-grapple package.

REST API Core Wagtail API v2. Pages, images, documents as JSON endpoints. Filtering, ordering, pagination, nested fields.
GraphQL Plugin wagtail-grapple — auto-generated GraphQL schema from page models and StreamField blocks.
Hybrid mode Yes — Django templates for server-rendered pages + REST API for JS components or external consumers
Popular frontends Next.js, Nuxt, Gatsby, React SPA, Vue SPA, Astro
SDKs / helpers wagtail-grapple (GraphQL), custom fetch to /api/v2/, gatsby-source-wagtail
Auth for API Django session auth, token auth (DRF), OAuth via django-oauth-toolkit
Headless maturity REST API since Wagtail 2.0 (2018). Mature, production-proven. Used by NASA, Google, NHS.

WordPress

Good headless

WordPress ships with a REST API since v4.7. The Gutenberg editor itself is a React SPA consuming this API. Headless WordPress is a well-established pattern with dedicated hosting (WP Engine Atlas, etc.).

REST API Core Full CRUD for posts, pages, media, taxonomies, users. /wp-json/wp/v2/ endpoints. Discovery via link headers.
GraphQL Plugin WPGraphQL plugin. Mature, 10k+ installs. Full schema with custom post types, ACF, Yoast integration.
Hybrid mode Limited — PHP themes are separate from API. Either fully themed or fully headless, rarely both.
Popular frontends Next.js (Faust.js), Gatsby, Astro, Nuxt, React/Vue SPA
SDKs / helpers Faust.js (WP Engine), @wordpress/api-fetch, wpapi (npm), WPGraphQL for ACF
Auth for API Application Passwords (core), JWT (plugin), OAuth (plugin), cookie nonce
Headless maturity REST API since 2016, but preview/admin UX designed for traditional use. Dedicated headless hosting exists.
!
Note: The 5 headless CMS platforms (Directus, Ghost, KeystoneJS, Payload, Strapi) are API-only by design — they don't have a traditional server-rendered frontend. The comparison above focuses on the 10 full-stack CMS platforms and their ability to also work in headless/hybrid mode.

Feature by feature

Click a category to expand the comparison table. Hover over an icon to see details.

Full core support
Partial / config required
None
Requires plugin/module

Find the right CMS for you

QFD (Quality Function Deployment) is a structured decision-making methodology developed in Japan, widely used in engineering and product management to translate customer needs into measurable technical parameters. Instead of comparing features in a flat list, QFD weights each requirement by its real importance to your project — so a feature that matters 9x gets 9x the influence on the final score. This eliminates gut-feeling bias and produces transparent, reproducible, and defensible results you can share with stakeholders.

Select categories that matter to your project, adjust importance weights (1-9), and optionally expand each category to include or exclude individual features. The matrix auto-calculates scores from the comparison data above.

1. Select categories that matter

4. Notes

These notes are not stored in any database. They are encoded in the shareable URL. Use the share link below to save your analysis and share it with your team or on the internet.

Link contains all selections, weights, custom requirements, and notes.

Summary for decision makers

Confidence level

Data verification level

Craft CMS 5
85%
Directus 11
87%
Drupal 11
92%
Ghost 6
88%
Joomla 6
83%
KeystoneJS 6
80%
October CMS 4
80%
Payload CMS
85%
Plone 6
84%
Strapi v5
88%
Sulu CMS 3
82%
TYPO3 14
85%
Umbraco 17
83%
Wagtail 7
85%
WordPress
90%

Sources