Code

Unleashing the power of headless CMS: Keystone.js, Strapi & Payload compared

Unleashing the power of headless CMS: Keystone.js, Strapi & Payload compared

Modern web projects are increasingly moving away from monolithic CMS architectures. The headless approach — where the content management back-end is fully decoupled from the presentation layer — offers flexibility, speed, and technology freedom. But which headless CMS fits best into a development team’s workflow?

I tested three platforms in real production scenarios: Keystone.js, Strapi, and Payload. All three are open-source, Node.js-based, and offer both GraphQL and REST APIs — but the differences in the details are significant.

Keystone.js

Keystone.js, from the Thinkmill team, is a developer-first solution. The schema is defined in TypeScript, and the admin UI is automatically generated from it. If you’re familiar with the Next.js mindset, Keystone will feel right at home.

Strengths:

Weaknesses:

I recommend Keystone for projects where the team has strong TypeScript expertise and a custom data model is required. It’s an excellent choice behind bespoke SaaS products.

Strapi

Strapi is one of the most widely adopted headless CMSs on the market — and for good reason. The visual admin UI gets you up and running quickly, content types can be edited via drag-and-drop, and the plugin ecosystem is rich.

Strengths:

Weaknesses:

I recommend Strapi for marketing sites, e-commerce content layers, and projects where content editors are non-technical. The low entry barrier is a major advantage in client work.

Payload CMS

Payload is the youngest of the three, but also one of the most promising. It is written entirely in TypeScript, and its native support for the Next.js App Router sets it apart from the competition. Since v2, the Payload Admin UI is itself a Next.js application — meaning the CMS and the front-end can live in a true monorepo.

Strengths:

Weaknesses:

Payload is the CMS we reach for by default on Next.js projects today. The combination of type safety and the hook system delivers a level of control that other platforms simply cannot match.

Which one should you choose?

CriterionKeystoneStrapiPayload
TypeScriptExcellentPartialExcellent
Learning curveMediumLowMedium
ExtensibilityHighMediumHigh
Next.js integrationManualManualNative
Plugin ecosystemSmallLargeGrowing
Recommended for productionYesYesYes

If you need to ship fast and your editors are non-technical: Strapi. If you have a strong TypeScript team and need a custom data model: Keystone. If you’re working with Next.js and building for the long term: Payload.

At ZNiTech we’ve been gravitating increasingly towards Payload over recent months — the Next.js integration and type safety are well worth the smaller ecosystem.