Cole Parker

Look man, I’m a normal human guy just like the rest of you tryna get rich without deleting myself from the planet from all the BS we have to go through to build the biggest, fastest, coolest websites, apps, and other garbage crap online (I love my job).

And while I’m not some 10x rockstar dev, I’m also not some vibe-coder shipping SaaS with no auth, no API protection, and no idea what CORS is. I know what’s up. I’ve banged my head against every wall these CMSs built for us — and I’ve got thoughts.

I’ve used them all — Strapi, Payload, Directus, and (unfortunately) KeystoneJS. After building real projects, hitting every limitation, and rewriting half my database structures like three times, here’s my no-fluff, no-corporate-BS breakdown of the best headless CMS in 2025.

🏆 My Rankings (From Best to Worst)

  1. Directus – Feature-rich, gorgeous UI, flexible, no paywalls, just works.
  2. Payload – Code-first powerhouse, but UI is mid and often frustrating.
  3. Strapi – Plugin king, but locked-down features (Paying for SSO????? PAYING FOR REVISIONS??????) and terrible on mobile.
  4. KeystoneJS – Like Payload but worse. Feels like suffering.

Let’s break it all down.

Directus: The Dashboard King 👑

Directus is what Payload wants to be — beautiful admin panel, instant REST + GraphQL APIs, dynamic layouts, and built-in stuff like maps, TinyMCE, revisions, flows, and granular roles. And it actually works on mobile (Strapi could never).

I’ve been using Directus on one of my business websites for like 2 years… I really like it a lot. I originally tried to use Strapi for that project and switched to Directus.

Pros:

Cons:

If you want to move fast, support non-dev editors, and never look back — Directus wins.

🔥 Real talk: I’d take Directus over anything else right now. It lets me move fast and build clean stuff for clients and editors. Even if it’s not code.

Payload: The Dev Playground ⚒️

Payload is a TypeScript-first, code-defined CMS built for developers who like control. You write schemas in code, create layout blocks, and handle access logic inline. It’s powerful… but painfully dev-centric.

Pros:

Cons:

Payload is for devs who want max control. But be warned: You’ll be writing everything yourself and explaining why the admin panel has no folders to your client.

Payload Rich Text: Cool Until It’s Not 💀

You ever just want to store some rich text inside a group in your schema and then Payload hits you with:

column "heading_title" cannot be cast automatically to type jsonb
I’m not even sure what this means or how to fix it… so i just ya know, didn’t put it in a group and instead got fed up and started looking into changing the whole CMS backend…

Color Pickers? In Lexical? LOL No 🎨🚫

TinyMCE lets you restrict a color palette in the UI.

Lexical? Nah. Want to give your editors the ability to make a heading two colors? Add foreground/background colors?

You have to build that yourself. Not configure. Not toggle. Build.

Inline styles = not supported. Color pickers = not built in. You’re either hacking around it or crying.


Wait… You Want HTML from Lexical?

Payload: “Sure! Just call lexicalHTMLField() and we’ll generate it.” or you can handle it on the front end!

So instead of getting HTML when you want it, you’re stuck doing extra work, scoping everything, and wondering why you’re not just using Directus with TinyMCE in the first place.


TL;DR: payload’s Lexical sucks…

Strapi: Powerful, But Paywalled (Kinda) 🔒

Strapi looks great on paper: plugin system, custom logic in Node.js, decent admin UI. But the more serious your use case, the faster you run into enterprise-only features. You want SSO? Revisions? Granular admin roles? Sorry, pay up.

It’s not that its necessarily paywalled and a deal breaker end of the world its everything else PLUS paying for SSO or post revisions… for Gods sake, Oauth and revisions cost me a monthly subscription??

Pros:

Cons:

If you need plugins and backend code logic in a project with dev-only editors, Strapi is solid. But for modern teams with editors, designers, and clients — it’s frustrating.

KeystoneJS: Painful from the Start 😬

Keystone is for developers who like writing everything from scratch and hate convenience. Want to use a .env file? Install dotenv and wire it manually. Need rich text? Hope you enjoy Markdown or wiring up a custom field. Out of the box? It gives you almost nothing.

Pros:

Cons:

Payload is just better in every way. Never mention Keystone to me again.

Rich Text & Layout Blocks Comparison

CMS Rich Text Editor HTML Output Inline Blocks Best For
Directus TinyMCE/Quill ✅ Yes ❌ No Blog-style content, easy UX
Payload Lexical ✅ Yes (using another field and a function to generate HTML on server) ✅ Yes Structured pages, app UIs
Strapi Draft.js/Tiptap ✅ Messy ❌ No Basic content editing
Keystone Markdown 🟡 Needs parsing ❌ No Devs writing docs

Payload wins for inline blocks. Directus wins for WYSIWYG + clean output. Strapi and Keystone… try their best.


SEO, Live Preview, and eCommerce

SEO Support:

Live Preview:

eCommerce Compatibility


Final Verdict 🧠💥

Use Case Best CMS Why
Dynamic pages with layout blocks Payload Structured, code-first, dev-friendly
Rich WYSIWYG content Directus TinyMCE + HTML output = clean + simple
Mobile-friendly admin for clients Directus UI is responsive and beautiful
Building APIs with backend logic Strapi Plugin system, Node.js backend
Drag-and-drop fields, real editor UX Directus Tabs, fieldsets, dashboards, visual everything
Structured content + TypeScript dev Payload TS-native schema, access, blocks
Want to suffer and hand-roll everything Keystone No, just no. Don’t do it.

TL;DR: Who Should Use What?

Directus probably… Yeah that sucks to hear doesn’t it. I get it, I also wanted to literally code everything myself. If i could take strapi’s plugins and add them to directus and take the ability to write my own collections in typescript like payload and roll it all together id be ecstatic. but we cant… We just can’t…

YES I Have Heard of <Insert CMS Name Here>

Bro… Yes.

Yes, I’ve heard of it. No, it didn’t make the cut. Why?

This post is about headless CMSs only. Name a better one? I’ll wait.