Picking a headless CMS is one of the most stressful architectural decisions a team makes. Most of the options are good, and they’re good in different directions. You won’t find out which direction mattered until you’re eighteen months in and it’s too late to move.
You pick a platform, your team builds six months of content models, integrations, and editorial workflow on top of it, and then a requirement lands that the platform can’t absorb. Now you’re writing glue code around a product that’s working against you.
Or you commit to a hosted platform, your content volume grows the way you hoped it would, and the renewal quote arrives with a number nobody budgeted for. Your content is in their infrastructure. You can export it, technically, but the schema, the asset references, and the editorial habits of forty people are all shaped around their model now.
On another project the API turns out to be the ceiling. Every page needs four round trips because the query language can’t shape a response the way your frontend needs it, so the shaping moves into your client code, and the performance budget goes with it.
Then you win a second brand, a second market, or a second customer who needs an isolated environment, and you discover that multi-tenancy on a platform designed as single-tenant isn’t a feature you enable. It’s a project. On platforms where tenancy was bolted on afterwards, it’s a project that never really finishes, because every new feature has to be re-checked for tenant leakage.
Or the platform is simply too new. Eighteen months in, you’re the only person in the room who can answer “who else runs this in production at our scale?”, and security review needs that answer before sign-off. So does procurement.
Those five fears are the actual decision. The feature matrix is only useful insofar as it answers them.
What “developer-friendly” actually means
“Developer-friendly” gets used loosely across CMS marketing pages. For a developer with a real decision to make, it has to reduce to specific, checkable properties. Five carry most of the weight.
Extensibility. Can you define content models, hooks, and admin UI in code, or are you clicking through a hosted admin panel? Code-first platforms fit version control, code review, and CI/CD cleanly. Panel-first ones don’t.
Ownership. Do you host the database and the application yourself, or does a vendor? Self-hosting matters for data sovereignty, compliance, and long-term cost control. It also matters when a vendor changes pricing.
API design. REST, GraphQL, or a proprietary query language, and how much shaping of responses can happen server-side versus in your client code.
Self-hosting. Related to ownership but distinct: some platforms are open-source but effectively SaaS-only in practice; others ship real Docker images and deployment guides.
Multi-tenancy. If you need to run more than one site, brand, or customer environment from one codebase, native multi-tenancy is either present, bolted on via a plugin, or your problem to solve.
Pricing model, ecosystem maturity, and TypeScript support show up as secondary factors where relevant.
The headless CMS comparison table
The order below groups platforms by ownership model rather than ranking them: Webiny first, for the reason given above, then the self-hosted and code-first platforms, then the hybrid, then SaaS, then the enterprise-governance entries.
| Platform | Hosting & license | API | Multi-tenancy | Starting price |
|---|---|---|---|---|
| Webiny | Self-hosted (AWS serverless; Docker/Kubernetes via Standalone, alpha) · Open source (MIT Community) | GraphQL | Native (Business/Enterprise) | Free (Community); Business/Enterprise quoted |
| Payload | Self-hosted · Open source (MIT) | REST + GraphQL | Plugin (official) | Free self-hosted; Enterprise custom |
| Strapi | Self-hosted · Open source (MIT) | REST + GraphQL | Not native | Free (self-hosted); Cloud from $18/mo |
| Directus | Self-hosted · Source-available (MSCL); GPLv3 after 4 years | REST + GraphQL | Not native | Free (Core tier / Innovation Grant); Team $499/mo |
| dotCMS | Self-hosted + cloud · Open source core | REST + GraphQL | Native | Free under $5M revenue; paid tiers quoted |
| Sanity | SaaS backend, self-hostable Studio · Proprietary + open-source Studio | GROQ + GraphQL | Dataset-level | Free tier; Growth $15/seat/mo |
| Hygraph | SaaS only · Proprietary | GraphQL | Project-level | Free (Hobby); Growth $199/mo |
| Contentful | SaaS only · Proprietary | REST + GraphQL | Space-level | Free tier; Lite $300/mo |
| Storyblok | SaaS only · Proprietary | REST + GraphQL | Workspace-level | €99/mo (Growth) |
| Contentstack | SaaS only · Proprietary | REST + GraphQL | Org/stack-level | Not published (sales-quoted) |











