The State of Headless Drupal in 2026
Evaluating JSON:API vs GraphQL for modern frontend frameworks like Next.js 16, and why the tooling has finally caught up to the architectural promise.
The case for JSON:API
Native to Drupal core, zero extra infrastructure, and — with jsonapi_extras — enough flexibility to avoid the classic "N+1 relationship" tax.
The case for GraphQL
Still best-in-class when the frontend team is used to it and when a single page assembles data from many content types in one round trip.
My recommendation
Start with JSON:API. Add GraphQL only when a specific page genuinely cannot be served efficiently by a single JSON:API call with include paths.
Read next
- Jul 24, 2026
Layout Builder Is Over-Applied: A Decision Framework for When It Actually Fits
Layout Builder has become the reflexive answer in Drupal to "how should editors build pages." Somewhere along the way it stopped being one option among several and became the default. That is a mistake I see repeated across projects. Layout Builder is a genuinely good tool for a specific job. The problem is that it gets chosen for jobs it is not suited to, usually because it is the most visible option and nobody paused to ask whether it fit. This post is the decision framework I use to choose between Layout Builder, Paragraphs, custom templates, and plain blocks.
- Jun 23, 2026
I Keep Evaluating Alternatives to Drupal. I Keep Choosing Drupal. Here Is the Actual Reasoning.
I don't ignore the alternatives to Drupal. Sanity, Payload, Strapi, custom Next.js builds. I've built real things with several of them. When a project's requirements push me to look elsewhere, I take them seriously. Here is the honest reasoning behind why I keep choosing Drupal anyway.
- May 25, 2026
Stop Making Users Pay for Work Your CI Pipeline Could Do
Most slow Drupal sites are not slow because the code is wrong. They are slow because expensive work runs at request time when it could have run in the CI pipeline instead. Cold caches, image derivatives, search indexes. The pattern repeats. The fix is the same in every case: move the cost off your users and onto a controlled environment where nobody is waiting. This is a principle, not a tip. Three examples below to make it concrete.