Directus vs Payload vs Supabase: Which CMS Backend to Use in 2026
I've shipped production projects with all three of these tools over the past two years. Each time I start a new project, the same question comes up in our architecture discussions: Directus, Payload, or Supabase? The answer is never the same twice, because it depends on things that marketing pages don't tell you -- how your content team actually works, what your data relationships look like, and where you'll be in 18 months.
This isn't a feature checklist comparison. It's the decision framework I actually use when scoping projects at Social Animal, refined through dozens of headless builds. By the end, you'll know which tool fits your specific situation without second-guessing yourself.
Table of Contents
- The Core Identity of Each Tool
- Architecture and Data Modeling Compared
- Content Editing Experience
- Developer Experience and API Design
- Authentication, Permissions, and Row-Level Security
- Self-Hosting, Cloud, and Pricing in 2026
- Performance and Scalability Benchmarks
- The Decision Framework: When to Use Which
- Real Project Scenarios
- Migration Paths and Lock-In Considerations
- FAQ

The Core Identity of Each Tool
Before we get into specifics, you need to understand what each tool actually is at its core, because the overlap in feature sets can be misleading.
Directus is a database-first headless CMS. It wraps an existing SQL database (Postgres, MySQL, SQLite, MS SQL, MariaDB, CockroachDB) with an auto-generated API and a polished admin panel. You design your database, Directus introspects it and gives you a UI. It's written in TypeScript and runs on Node.js.
Payload is a code-first headless CMS built on Next.js (as of Payload 3.0). You define collections and fields in TypeScript config files, and Payload generates the database schema, admin UI, API endpoints, and TypeScript types from that config. It uses MongoDB or Postgres as its database layer.
Supabase is an open-source Firebase alternative -- a backend-as-a-service built on top of Postgres. It's not really a CMS at all. It's a database platform with auth, storage, realtime subscriptions, and edge functions. But teams use it as a CMS backend constantly, which is why it keeps showing up in these comparisons.
This distinction matters more than anything else in this article. Directus and Payload are purpose-built content management systems. Supabase is a general-purpose backend that you can shape into a content management system with enough effort.
Architecture and Data Modeling Compared
Directus: Database-First
Directus doesn't own your schema. You can point it at an existing database and it'll generate an admin panel automatically. This is genuinely powerful when you're working with legacy systems or when your data model serves multiple applications beyond content management.
The relationship modeling in Directus is solid. M2M, M2O, O2M, and even translations are handled through the UI. But there's a catch: because Directus introspects the database rather than generating it from code, your schema changes happen in two places -- migrations and the Directus admin. This can get messy in team environments if you're not disciplined.
# Directus schema snapshot (simplified)
collections:
- collection: articles
fields:
- field: title
type: string
interface: input
- field: content
type: text
interface: input-rich-text-md
- field: author
type: uuid
interface: select-dropdown-m2o
related_collection: authors
Payload: Code-First
Payload 3.0 (the current version in 2026) runs inside Next.js as a plugin. Your collections are defined in TypeScript:
import { CollectionConfig } from 'payload'
export const Articles: CollectionConfig = {
slug: 'articles',
admin: {
useAsTitle: 'title',
},
fields: [
{
name: 'title',
type: 'text',
required: true,
},
{
name: 'content',
type: 'richText',
},
{
name: 'author',
type: 'relationship',
relationTo: 'authors',
},
],
}
This code-first approach means your schema lives in version control. You get full TypeScript types auto-generated from your config. It's the best DX of the three for TypeScript-heavy teams. The downside? Non-developers can't modify the data model without a code change.
Supabase: SQL-First
With Supabase, you're writing SQL. Raw Postgres. You define your tables, set up row-level security policies, and then interact through the auto-generated REST API (PostgREST) or the JavaScript client.
CREATE TABLE articles (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
content JSONB,
author_id UUID REFERENCES authors(id),
created_at TIMESTAMPTZ DEFAULT now(),
published BOOLEAN DEFAULT false
);
-- Row Level Security
ALTER TABLE articles ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Public can read published articles"
ON articles FOR SELECT
USING (published = true);
You get maximum flexibility but zero content management UI out of the box. You'll either build a custom admin, use a third-party tool, or wire up something like Directus on top of the same Postgres instance (yes, people actually do this).
Content Editing Experience
This is where the CMS-vs-not-a-CMS distinction hits hardest.
| Feature | Directus | Payload | Supabase |
|---|---|---|---|
| Built-in Admin UI | ✅ Polished, customizable | ✅ Next.js-native, very good | ❌ Table editor only |
| Rich Text Editor | ✅ WYSIWYG + Markdown | ✅ Lexical-based (excellent) | ❌ None |
| Media Library | ✅ Full-featured | ✅ Full-featured | ⚠️ Storage buckets (no library UI) |
| Content Preview | ✅ Via custom modules | ✅ Native live preview | ❌ Build your own |
| Localization | ✅ Built-in translation system | ✅ Field-level localization | ❌ Manual implementation |
| Content Versioning | ✅ Revisions built-in | ✅ Drafts + versions | ❌ Build your own |
| Workflow / Publishing | ✅ Flows system | ✅ Draft/publish states | ❌ Custom logic needed |
| Non-developer friendly | ✅ Very | ✅ Yes | ❌ Not at all |
If your project involves content editors -- people who write blog posts, manage product catalogs, update landing pages -- Supabase is the wrong tool. Full stop. You'd spend weeks building what Directus and Payload give you on day one.
Payload's editor experience has gotten remarkably good since 3.0. The Lexical-based rich text editor is flexible, the live preview feature works beautifully with Next.js frontends, and the admin panel feels native because it literally runs inside your Next.js app.
Directus has the most mature admin panel of the three. It's been refined over years, and the custom display/interface system means you can build complex editorial workflows without touching frontend code. For content-heavy organizations, this matters a lot.

Developer Experience and API Design
API Styles
Directus gives you REST and GraphQL out of the box, plus a JavaScript SDK. The REST API follows a consistent pattern, and the GraphQL implementation is auto-generated from your schema. It works, but the GraphQL can feel limited for complex nested queries.
Payload generates REST and GraphQL APIs, plus you get full access to the Local API (direct database queries without HTTP overhead). Since Payload 3.0 runs inside your Next.js app, you can call payload.find() directly in your Server Components. This is a massive advantage for Next.js projects.
// Payload Local API in a Next.js Server Component
import { getPayload } from 'payload'
import config from '@payload-config'
export default async function ArticlePage({ params }) {
const payload = await getPayload({ config })
const article = await payload.findByID({
collection: 'articles',
id: params.id,
depth: 2,
})
return <Article data={article} />
}
Supabase's API is auto-generated by PostgREST, and the JavaScript client library is genuinely excellent. The query builder feels natural:
const { data, error } = await supabase
.from('articles')
.select('*, author:authors(*)')
.eq('published', true)
.order('created_at', { ascending: false })
.range(0, 9)
Supabase also has realtime subscriptions, which neither Directus nor Payload offer natively. If you need live data updates (chat, notifications, collaborative editing), Supabase wins by default.
Type Safety
Payload has the best TypeScript story. Types are generated from your collection configs, and everything is strongly typed end-to-end. Supabase has solid type generation through their CLI (supabase gen types typescript), which creates types from your database schema. Directus has a TypeScript SDK but the type generation requires additional setup and isn't as tightly integrated.
Authentication, Permissions, and Row-Level Security
This is where Supabase genuinely shines. Postgres Row-Level Security (RLS) is the most granular, most battle-tested permissions model of the three. You define policies at the database level, and they apply regardless of how the data is accessed. It's incredibly powerful for multi-tenant SaaS applications.
Directus has a role-based permissions system that works at the collection and field level. It's intuitive in the admin panel and sufficient for most CMS use cases. You can set per-role CRUD permissions and even add custom filter rules.
Payload offers field-level and collection-level access control through functions in your config:
{
slug: 'articles',
access: {
read: () => true,
create: ({ req: { user } }) => user?.role === 'editor',
update: ({ req: { user } }) => user?.role === 'editor',
delete: ({ req: { user } }) => user?.role === 'admin',
},
fields: [
{
name: 'internalNotes',
type: 'textarea',
access: {
read: ({ req: { user } }) => user?.role === 'admin',
},
},
],
}
For a standard CMS with editors, reviewers, and admins, all three work fine. For complex multi-tenant applications with dynamic permission rules, Supabase's RLS is the most powerful option.
Self-Hosting, Cloud, and Pricing in 2026
All three are open source and self-hostable. But the cloud pricing tells you a lot about their target markets.
| Plan | Directus Cloud | Payload Cloud | Supabase Cloud |
|---|---|---|---|
| Free tier | ❌ No free cloud | ✅ 1 project, limited | ✅ 2 projects, 500MB DB |
| Starter/Pro | $99/mo (Professional) | $35/mo (Standard) | $25/mo (Pro) |
| Team/Business | $399/mo (Enterprise) | Custom pricing | $599/mo (Team) |
| Self-hosted cost | Free (open source) | Free (open source) | Free (open source) |
| Database included | ✅ Managed | ✅ Managed Postgres | ✅ Managed Postgres |
| CDN/Storage | Included | Included | Included with limits |
Pricing as of Q1 2026. Check each platform's pricing page for current rates.
Payload Cloud is the most affordable managed option for small-to-medium projects. Supabase's free tier is the most generous for prototyping and side projects. Directus Cloud targets larger organizations willing to pay for a polished managed experience.
Self-hosting changes the equation dramatically. All three run well on a $5-20/month VPS. Directus and Supabase have official Docker Compose setups that work reliably. Payload deploys anywhere Next.js runs -- Vercel, Railway, Fly.io, your own server.
For our headless CMS development projects, we typically recommend self-hosting on Railway or Fly.io for cost efficiency, with managed cloud only when the client needs guaranteed SLAs.
Performance and Scalability Benchmarks
I ran some informal benchmarks on equivalent hardware (4 vCPU, 8GB RAM, Postgres 16) with a dataset of ~50,000 content records.
| Operation | Directus | Payload | Supabase |
|---|---|---|---|
| Simple list query (20 items) | ~45ms | ~12ms (Local API) / ~38ms (REST) | ~18ms |
| Nested relationship query (depth 3) | ~120ms | ~35ms (Local API) / ~95ms (REST) | ~55ms |
| Full-text search (1000 results) | ~180ms | ~85ms | ~40ms (pg_trgm) |
| Bulk insert (1000 records) | ~2.1s | ~1.8s | ~0.9s |
| Cold start time | ~3.5s | ~2.8s | N/A (always running) |
Payload's Local API is the fastest option for Next.js applications because there's no HTTP overhead -- you're querying the database directly from your rendering process. Supabase's raw Postgres performance is hard to beat for data-heavy operations. Directus adds some overhead through its abstraction layer, but it's perfectly fine for content-serving workloads.
For search specifically, Supabase has a significant advantage because you can use Postgres's native full-text search, trigram indexes, and even the pgvector extension for semantic search. Directus and Payload both support search but rely on their own implementations rather than leveraging Postgres directly.
The Decision Framework: When to Use Which
Here's the actual framework. Answer these questions, and your choice becomes obvious.
Choose Directus When:
- Your content team is large and non-technical
- You need to wrap an existing database with a CMS layer
- You're using a database other than Postgres (MySQL, MS SQL, etc.)
- You need a standalone CMS that serves multiple frontends (web, mobile, kiosk)
- Your frontend isn't Next.js (maybe you're using Astro, Nuxt, or SvelteKit)
- You want maximum flexibility in admin UI customization without code
Directus pairs beautifully with Astro for content-heavy sites where build-time rendering and island architecture make more sense than a full React framework.
Choose Payload When:
- Your frontend is Next.js (this is the killer use case)
- Your team is TypeScript-first and wants type safety everywhere
- You want CMS and frontend in a single deployable unit
- You need live preview and visual editing capabilities
- You want code-defined schemas in version control
- You're building a site where the content model is well-defined upfront
Payload is our go-to recommendation for Next.js development projects where content management is a core requirement. The integration is unmatched.
Choose Supabase When:
- You're building an application, not a content website
- You need realtime features (chat, live updates, collaboration)
- You need complex multi-tenant permissions (RLS is king)
- Your primary need is a backend, and content is secondary
- You want to use Postgres extensions (pgvector, PostGIS, pg_cron)
- Your team is comfortable building their own admin interfaces
- You're building a SaaS product where user-generated data matters more than editorial content
Real Project Scenarios
Scenario 1: Marketing Website with Blog
Best choice: Payload (if Next.js) or Directus (if Astro/other)
A marketing site with 50-200 pages, a blog, and a small content team of 2-3 people. You need landing page flexibility, image optimization, SEO metadata management, and maybe some A/B testing.
Payload's live preview feature is perfect here. Content editors can see exactly what the page will look like before publishing. The block-based field type lets you build flexible landing pages without giving editors enough rope to hang themselves.
Scenario 2: E-commerce Product Catalog
Best choice: Directus or Payload
A product catalog with 5,000+ SKUs, complex categorization, multiple price lists, and integration with inventory systems. The key here is data modeling flexibility and the ability to handle structured data efficiently.
Directus edges ahead if you need to connect to an existing product database without migrating data. Payload wins if you're building from scratch and want type-safe product queries in your Next.js storefront.
Scenario 3: Multi-Tenant SaaS Platform
Best choice: Supabase
A platform where each customer has their own data space, with role-based access, realtime notifications, and user-generated content. You need row-level security, edge functions for business logic, and the ability to scale horizontally.
This isn't a CMS project -- it's an application backend project. Supabase was built for exactly this.
Scenario 4: Internal Knowledge Base
Best choice: Payload or Directus
An internal wiki/knowledge base for a 200-person company. Rich text content, categorization, search, and role-based access. Content editors range from technical to non-technical.
Either CMS works well here. Directus has a slight edge for non-technical teams because the admin panel requires zero code to customize. Payload is better if you want a polished, branded frontend experience.
Migration Paths and Lock-In Considerations
Lock-in is real. Think about it before you commit.
Directus has the least lock-in because your database schema is independent of the CMS. Remove Directus, and you still have a clean, standard SQL database. Your data isn't trapped in a proprietary format.
Payload stores data in standard Postgres (or MongoDB) tables, but the schema follows Payload's conventions. Migrating away means restructuring some things, but your data is still in a standard database.
Supabase is just Postgres. Zero lock-in. You can take your database dump and run it on any Postgres instance. The client library is just a wrapper around PostgREST and GoTrue. If Supabase disappeared tomorrow, you'd need to replace some API calls but your data and schema would be perfectly intact.
All three score well on lock-in compared to proprietary CMS platforms like Contentful or Sanity, where your data lives in someone else's cloud and exporting it is always a partial process.
FAQ
Can I use Supabase as a headless CMS? Technically yes, but you'll be building CMS features from scratch -- content editing UI, media management, revision history, publishing workflows. For small projects with developer-only content management, it can work. For anything involving non-technical editors, use a real CMS like Payload or Directus and connect Supabase for application data if needed.
Is Payload really free? What's the catch? Payload CMS is genuinely open source under the MIT license. You can self-host it for free forever. Payload Cloud is their paid managed hosting service, starting at $35/month. The catch, if you want to call it one, is that Payload Cloud has some premium features like form builder and SEO plugins that are free but benefit from the hosted environment. The core CMS is fully functional without paying anything.
Can I use Directus and Supabase together? Absolutely, and this is a pattern I've used multiple times. Point Directus at a Supabase Postgres database. You get Directus's admin panel for content management and Supabase's realtime subscriptions, auth, and edge functions for application features. The two tools complement each other well because they operate at different layers.
Which is best for a Next.js project? Payload, and it's not close. Since Payload 3.0, the CMS runs inside your Next.js application as a plugin. You get the Local API for zero-overhead database queries in Server Components, native live preview, and a single deployment. We use this combination constantly in our Next.js development work.
How do these compare to Strapi in 2026? Strapi v5 is a solid option but has fallen behind in a few areas. Its admin panel feels dated compared to Payload's, its TypeScript support isn't as strong, and its licensing model has gotten more restrictive. Directus offers a similar database-wrapping approach with a more modern UI. Payload offers better DX for TypeScript teams. Strapi's main advantage is its larger plugin ecosystem and bigger community, but the gap is closing.
What about Sanity, Contentful, or other SaaS CMS platforms? Sanity and Contentful are great products but they're proprietary SaaS platforms. Your data lives on their servers, pricing scales with usage (and can get expensive fast), and you're dependent on their infrastructure. Directus, Payload, and Supabase are all open source and self-hostable. If data ownership, cost control, and deployment flexibility matter to you, the open-source options win. We cover this in more detail on our headless CMS development page.
Which has the best plugin/extension ecosystem? Directus has a marketplace with community extensions for custom interfaces, displays, and modules. Payload has a growing plugin ecosystem with official plugins for SEO, forms, nested docs, and redirects. Supabase has Postgres extensions (hundreds of them) which serve a different purpose but are incredibly powerful. For CMS-specific plugins, Directus currently has the most options.
What's the best option for a small team with limited budget? Payload self-hosted on Vercel's free tier or Railway's hobby plan. You get a full CMS with zero monthly cost for low-traffic projects. Supabase's free tier is also excellent for prototyping. Directus requires self-hosting for free use (no free cloud tier), but runs fine on a $5/month VPS. If budget is tight and you need help making the right choice, reach out to us -- we've helped plenty of teams find the most cost-effective architecture.