Directus vs Payload vs Supabase: Qual Backend CMS Usar em 2026
Traduzi centenas de artigos em markdown, mas aqui está a tradução completa do seu artigo:
Já entreguei projetos em produção com essas três ferramentas nos últimos dois anos. Cada vez que início um novo projeto, a mesma pergunta surge em nossas discussões de arquitetura: Directus, Payload ou Supabase? A resposta nunca é a mesma duas vezes, porque depende de coisas que as páginas de marketing não dizem -- como sua equipe de conteúdo realmente trabalha, como são suas relações de dados, e onde você estará em 18 meses.
Isso não é uma comparação de checklist de features. É o framework de decisão que realmente uso ao escopar projetos na Social Animal, refinado através de dezenas de builds headless. Ao final, você saberá qual ferramenta se encaixa em sua situação específica sem se questionar novamente.
Índice
- A Identidade Central de Cada Ferramenta
- Arquitetura e Modelagem de Dados Comparadas
- Experiência de Edição de Conteúdo
- Experiência do Desenvolvedor e Design de API
- Autenticação, Permissões e Segurança em Nível de Linha
- Auto-hospedagem, Cloud e Preços em 2026
- Benchmarks de Performance e Escalabilidade
- O Framework de Decisão: Quando Usar Qual
- Cenários de Projeto Real
- Caminhos de Migração e Considerações de Lock-In
- FAQ

A Identidade Central de Cada Ferramenta
Antes de entrar em detalhes, você precisa entender o que cada ferramenta realmente é em seu núcleo, porque a sobreposição em conjuntos de features pode ser enganosa.
Directus é um CMS headless orientado a banco de dados. Envolve um banco de dados SQL existente (Postgres, MySQL, SQLite, MS SQL, MariaDB, CockroachDB) com uma API auto-gerada e um painel admin polido. Você projeta seu banco de dados, Directus o inspeciona e oferece uma UI. É escrito em TypeScript e roda em Node.js.
Payload é um CMS headless orientado a código construído em Next.js (a partir do Payload 3.0). Você define coleções e campos em arquivos de configuração TypeScript, e Payload gera o schema do banco de dados, UI admin, endpoints de API e tipos TypeScript a partir dessa configuração. Usa MongoDB ou Postgres como sua camada de banco de dados.
Supabase é uma alternativa open-source ao Firebase -- um backend-as-a-service construído em cima do Postgres. Não é realmente um CMS. É uma plataforma de banco de dados com auth, storage, subscrições realtime e edge functions. Mas equipes a usam como backend de CMS constantemente, é por isso que continua aparecendo nessas comparações.
Essa distinção importa mais do que qualquer outra coisa neste artigo. Directus e Payload são sistemas de gerenciamento de conteúdo propósitos-específicos. Supabase é um backend genérico que você pode moldar em um sistema de gerenciamento de conteúdo com esforço suficiente.
Arquitetura e Modelagem de Dados Comparadas
Directus: Orientado a Banco de Dados
Directus não é dono do seu schema. Você pode apontá-lo para um banco de dados existente e ele vai gerar um painel admin automaticamente. Isso é genuinamente poderoso quando você está trabalhando com sistemas legados ou quando seu modelo de dados serve múltiplas aplicações além do gerenciamento de conteúdo.
A modelagem de relacionamento em Directus é sólida. M2M, M2O, O2M, e até mesmo traduções são tratadas através da UI. Mas há uma ressalva: porque Directus inspeciona o banco de dados em vez de gerá-lo a partir de código, suas mudanças de schema acontecem em dois lugares -- migrações e o admin Directus. Isso pode ficar confuso em ambientes de equipe se você não for disciplinado.
# Snapshot de schema Directus (simplificado)
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: Orientado a Código
Payload 3.0 (a versão atual em 2026) roda dentro de Next.js como um plugin. Suas coleções são definidas em 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',
},
],
}
Essa abordagem orientada a código significa que seu schema vive em controle de versão. Você obtém tipos TypeScript completos auto-gerados a partir de sua configuração. É a melhor DX das três para equipes pesadas em TypeScript. A desvantagem? Não-desenvolvedores não podem modificar o modelo de dados sem uma mudança de código.
Supabase: Orientado a SQL
Com Supabase, você está escrevendo SQL. Raw Postgres. Você define suas tabelas, configura políticas de row-level security, e depois interage através da API REST auto-gerada (PostgREST) ou do cliente JavaScript.
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);
Você obtém máxima flexibilidade mas zero UI de gerenciamento de conteúdo pronta para uso. Você vai precisar construir um admin customizado, usar uma ferramenta de terceiros, ou conectar algo como Directus em cima da mesma instância Postgres (sim, pessoas realmente fazem isso).
Experiência de Edição de Conteúdo
É aqui que a distinção CMS-vs-não-um-CMS atinge com mais força.
| Feature | Directus | Payload | Supabase |
|---|---|---|---|
| UI Admin Nativa | ✅ Polida, customizável | ✅ Nativa Next.js, muito boa | ❌ Apenas editor de tabelas |
| Editor de Rich Text | ✅ WYSIWYG + Markdown | ✅ Baseado em Lexical (excelente) | ❌ Nenhum |
| Biblioteca de Mídia | ✅ Completa | ✅ Completa | ⚠️ Buckets de storage (sem UI de biblioteca) |
| Preview de Conteúdo | ✅ Via módulos customizados | ✅ Live preview nativo | ❌ Construa o seu próprio |
| Localização | ✅ Sistema de tradução nativo | ✅ Localização em nível de campo | ❌ Implementação manual |
| Versionamento de Conteúdo | ✅ Revisões nativas | ✅ Drafts + versões | ❌ Construa o seu próprio |
| Workflow / Publishing | ✅ Sistema Flows | ✅ Estados draft/publish | ❌ Lógica customizada necessária |
| Amigável com não-desenvolvedor | ✅ Muito | ✅ Sim | ❌ De forma alguma |
Se seu projeto envolve editores de conteúdo -- pessoas que escrevem posts de blog, gerenciam catálogos de produtos, atualizam landing pages -- Supabase é a ferramenta errada. Ponto final. Você gastaria semanas construindo o que Directus e Payload oferecem no primeiro dia.
A experiência de editor do Payload melhorou remarkávelmente desde 3.0. O editor de rich text baseado em Lexical é flexível, o recurso de live preview funciona belamente com frontends Next.js, e o painel admin se sente nativo porque literalmente roda dentro de seu app Next.js.
Directus tem o painel admin mais maduro das três. Foi refinado ao longo dos anos, e o sistema customizado de display/interface significa que você pode construir fluxos editoriais complexos sem tocar em código frontend. Para organizações pesadas em conteúdo, isso importa muito.

Experiência do Desenvolvedor e Design de API
Estilos de API
Directus oferece REST e GraphQL prontos, mais um SDK JavaScript. A API REST segue um padrão consistente, e a implementação GraphQL é auto-gerada a partir de seu schema. Funciona, mas o GraphQL pode se sentir limitado para queries aninhadas complexas.
Payload gera APIs REST e GraphQL, mais você obtém acesso completo à Local API (queries de banco de dados direto sem overhead HTTP). Como o Payload 3.0 roda dentro de seu app Next.js, você pode chamar payload.find() diretamente em seus Server Components. Essa é uma vantagem massiva para projetos Next.js.
// Payload Local API em um Server Component Next.js
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} />
}
A API de Supabase é auto-gerada por PostgREST, e a biblioteca cliente JavaScript é genuinamente excelente. O query builder se sente natural:
const { data, error } = await supabase
.from('articles')
.select('*, author:authors(*)')
.eq('published', true)
.order('created_at', { ascending: false })
.range(0, 9)
Supabase também tem subscrições realtime, que nem Directus nem Payload oferecem nativamente. Se você precisa de atualizações de dados ao vivo (chat, notificações, edição colaborativa), Supabase vence por padrão.
Segurança de Tipo
Payload tem a melhor história TypeScript. Tipos são gerados de suas configurações de coleção, e tudo é fortemente tipado end-to-end. Supabase tem geração de tipo sólida através de seu CLI (supabase gen types typescript), que cria tipos a partir de seu schema de banco de dados. Directus tem um SDK TypeScript mas a geração de tipos requer setup adicional e não é tão integrada.
Autenticação, Permissões e Segurança em Nível de Linha
É aqui que Supabase genuinamente brilha. Postgres Row-Level Security (RLS) é o modelo de permissões mais granular e mais testado em produção das três. Você define políticas no nível do banco de dados, e elas se aplicam independentemente de como os dados são acessados. É incrivelmente poderoso para aplicações SaaS multi-tenant.
Directus tem um sistema de permissões baseado em papéis que funciona no nível de coleção e campo. É intuitivo no painel admin e suficiente para a maioria dos casos de uso de CMS. Você pode definir permissões CRUD por papel e até adicionar regras de filtro customizadas.
Payload oferece controle de acesso em nível de campo e coleção através de funções em sua configuração:
{
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',
},
},
],
}
Para um CMS padrão com editores, revisores e admins, todas as três funcionam bem. Para aplicações multi-tenant complexas com regras de permissão dinâmicas, o RLS de Supabase é a opção mais poderosa.
Auto-hospedagem, Cloud e Preços em 2026
Todas as três são open source e auto-hospedáveis. Mas o preço da cloud diz muito sobre seus mercados alvo.
| Plano | Directus Cloud | Payload Cloud | Supabase Cloud |
|---|---|---|---|
| Tier Gratuito | ❌ Sem cloud gratuita | ✅ 1 projeto, limitado | ✅ 2 projetos, 500MB DB |
| Starter/Pro | $99/mês (Professional) | $35/mês (Standard) | $25/mês (Pro) |
| Team/Business | $399/mês (Enterprise) | Preço customizado | $599/mês (Team) |
| Custo auto-hospedagem | Gratuito (open source) | Gratuito (open source) | Gratuito (open source) |
| Banco de dados incluído | ✅ Gerenciado | ✅ Postgres Gerenciado | ✅ Postgres Gerenciado |
| CDN/Storage | Incluído | Incluído | Incluído com limites |
Preços a partir de Q1 2026. Verifique a página de preços de cada plataforma para taxas atuais.
Payload Cloud é a opção gerenciada mais acessível para projetos pequenos a médios. O tier gratuito de Supabase é o mais generoso para prototipagem e projetos laterais. Directus Cloud visa organizações maiores dispostas a pagar por uma experiência gerenciada polida.
Auto-hospedagem muda a equação dramaticamente. Todas as três rodam bem em uma VPS de $5-20/mês. Directus e Supabase têm setups oficiais de Docker Compose que funcionam confiavelmente. Payload faz deploy em qualquer lugar que Next.js roda -- Vercel, Railway, Fly.io, seu próprio servidor.
Para nossos projetos de desenvolvimento de CMS headless, tipicamente recomendamos auto-hospedagem em Railway ou Fly.io para eficiência de custo, com cloud gerenciada apenas quando o cliente precisa de SLAs garantidas.
Benchmarks de Performance e Escalabilidade
Executei alguns benchmarks informais em hardware equivalente (4 vCPU, 8GB RAM, Postgres 16) com um dataset de ~50.000 registros de conteúdo.
| Operação | Directus | Payload | Supabase |
|---|---|---|---|
| Query de lista simples (20 itens) | ~45ms | ~12ms (Local API) / ~38ms (REST) | ~18ms |
| Query de relacionamento aninhado (profundidade 3) | ~120ms | ~35ms (Local API) / ~95ms (REST) | ~55ms |
| Busca full-text (1000 resultados) | ~180ms | ~85ms | ~40ms (pg_trgm) |
| Bulk insert (1000 registros) | ~2.1s | ~1.8s | ~0.9s |
| Tempo de cold start | ~3.5s | ~2.8s | N/A (sempre rodando) |
A Local API de Payload é a opção mais rápida para aplicações Next.js porque não há overhead HTTP -- você está consultando o banco de dados diretamente do seu processo de renderização. O desempenho bruto Postgres de Supabase é difícil de vencer para operações pesadas em dados. Directus adiciona algum overhead através de sua camada de abstração, mas é perfeitamente adequado para cargas de trabalho servindo conteúdo.
Para busca especificamente, Supabase tem uma vantagem significativa porque você pode usar busca full-text nativa do Postgres, índices trigram e até a extensão pgvector para busca semântica. Payload e Directus suportam busca mas dependem de suas próprias implementações em vez de alavancar Postgres diretamente.
O Framework de Decisão: Quando Usar Qual
Aqui está o framework real. Responda essas perguntas, e sua escolha se torna óbvia.
Escolha Directus Quando:
- Sua equipe de conteúdo é grande e não-técnica
- Você precisa envolver um banco de dados existente com uma camada de CMS
- Você está usando um banco de dados diferente de Postgres (MySQL, MS SQL, etc.)
- Você precisa de um CMS independente que serve múltiplos frontends (web, mobile, kiosk)
- Seu frontend não é Next.js (talvez você esteja usando Astro, Nuxt ou SvelteKit)
- Você quer máxima flexibilidade em customização da UI admin sem código
Directus emparelha belamente com Astro para sites pesados em conteúdo onde renderização em build-time e arquitetura island fazem mais sentido do que um framework React completo.
Escolha Payload Quando:
- Seu frontend é Next.js (este é o caso killer)
- Sua equipe é TypeScript-first e quer segurança de tipo em todos os lugares
- Você quer CMS e frontend em uma única unidade deployável
- Você precisa de capacidades de live preview e edição visual
- Você quer schemas definidos em código em controle de versão
- Você está construindo um site onde o modelo de conteúdo é bem-definido de antemão
Payload é nossa recomendação padrão para projetos de desenvolvimento Next.js onde gerenciamento de conteúdo é um requisito central. A integração é incomparável.
Escolha Supabase Quando:
- Você está construindo uma aplicação, não um site de conteúdo
- Você precisa de features realtime (chat, atualizações ao vivo, edição colaborativa)
- Você precisa de permissões multi-tenant complexas (RLS é rei)
- Sua necessidade principal é um backend, e conteúdo é secundário
- Você quer usar extensões Postgres (pgvector, PostGIS, pg_cron)
- Sua equipe é confortável construindo suas próprias interfaces admin
- Você está construindo um produto SaaS onde dados gerados por usuário importam mais do que conteúdo editorial
Cenários de Projeto Real
Cenário 1: Website de Marketing com Blog
Melhor escolha: Payload (se Next.js) ou Directus (se Astro/outro)
Um site de marketing com 50-200 páginas, um blog, e uma pequena equipe de conteúdo de 2-3 pessoas. Você precisa de flexibilidade de landing page, otimização de imagem, gerenciamento de metadados SEO, e talvez alguns testes A/B.
A feature de live preview do Payload é perfeita aqui. Editores de conteúdo podem ver exatamente como a página vai parecer antes de publicar. O tipo de campo baseado em blocos permite construir landing pages flexíveis sem dar aos editores corda suficiente para se pendurar.
Cenário 2: Catálogo de Produtos de E-commerce
Melhor escolha: Directus ou Payload
Um catálogo de produtos com 5.000+ SKUs, categorização complexa, múltiplas listas de preços, e integração com sistemas de inventário. A chave aqui é flexibilidade de modelagem de dados e a capacidade de lidar com dados estruturados eficientemente.
Directus se destaca se você precisa conectar a um banco de dados de produtos existente sem migrar dados. Payload vence se você está construindo do zero e quer queries de produtos type-safe em sua loja Next.js.
Cenário 3: Plataforma SaaS Multi-Tenant
Melhor escolha: Supabase
Uma plataforma onde cada cliente tem seu próprio espaço de dados, com acesso baseado em papéis, notificações realtime, e conteúdo gerado por usuário. Você precisa de row-level security, edge functions para lógica de negócios, e a capacidade de escalar horizontalmente.
Isso não é um projeto de CMS -- é um projeto de backend de aplicação. Supabase foi construído exatamente para isso.
Cenário 4: Base de Conhecimento Interna
Melhor escolha: Payload ou Directus
Uma wiki/base de conhecimento interna para uma empresa de 200 pessoas. Conteúdo rich text, categorização, busca, e acesso baseado em papéis. Editores de conteúdo variam de técnico a não-técnico.
Qualquer CMS funciona bem aqui. Directus tem uma leve vantagem para equipes não-técnicas porque o painel admin requer zero código para customizar. Payload é melhor se você quer uma experiência frontend polida e com marca.
Caminhos de Migração e Considerações de Lock-In
Lock-in é real. Pense sobre isso antes de se comprometer.
Directus tem o menor lock-in porque seu schema de banco de dados é independente do CMS. Remova Directus, e você ainda terá um banco de dados SQL limpo e padrão. Seus dados não estão presos em um formato proprietário.
Payload armazena dados em tabelas Postgres padrão (ou MongoDB), mas o schema segue as convenções do Payload. Migrar para fora significa reestruturar algumas coisas, mas seus dados ainda estão em um banco de dados padrão.
Supabase é apenas Postgres. Zero lock-in. Você pode fazer dump de seu banco de dados e executá-lo em qualquer instância Postgres. A biblioteca cliente é apenas um wrapper ao redor de PostgREST e GoTrue. Se Supabase desaparecesse amanhã, você precisaria substituir algumas chamadas de API mas seus dados e schema estariam perfeitamente intactos.
Todos os três têm bom desempenho em lock-in comparado a plataformas CMS proprietárias como Contentful ou Sanity, onde seus dados vivem na nuvem de alguém e exportá-los é sempre um processo parcial.
FAQ
Posso usar Supabase como um CMS headless? Tecnicamente sim, mas você estará construindo features de CMS do zero -- UI de edição de conteúdo, gerenciamento de mídia, histórico de revisão, fluxos de publicação. Para pequenos projetos com gerenciamento de conteúdo apenas para desenvolvedor, pode funcionar. Para qualquer coisa envolvendo editores não-técnicos, use um CMS real como Payload ou Directus e conecte Supabase para dados de aplicação se necessário.
Payload é realmente gratuito? Qual é a pegadinha? Payload CMS é genuinamente open source sob a licença MIT. Você pode auto-hospedá-lo gratuitamente para sempre. Payload Cloud é seu serviço gerenciado pago, começando em $35/mês. A pegadinha, se você quer chamar de assim, é que Payload Cloud tem alguns recursos premium como form builder e plugins SEO que são gratuitos mas se beneficiam do ambiente hospedado. O CMS principal é totalmente funcional sem pagar nada.
Posso usar Directus e Supabase juntos? Absolutamente, e este é um padrão que usei múltiplas vezes. Aponte Directus para um banco de dados Postgres do Supabase. Você obtém o painel admin do Directus para gerenciamento de conteúdo e as subscrições realtime, auth e edge functions do Supabase para features de aplicação. As duas ferramentas se complementam bem porque operam em camadas diferentes.
Qual é melhor para um projeto Next.js? Payload, e não é nem próximo. Desde Payload 3.0, o CMS roda dentro de sua aplicação Next.js como um plugin. Você obtém a Local API para queries de banco de dados com zero overhead em Server Components, live preview nativo e um único deployment. Usamos essa combinação constantemente em nosso trabalho de desenvolvimento Next.js.
Como essas se comparam a Strapi em 2026? Strapi v5 é uma opção sólida mas ficou para trás em algumas áreas. Seu painel admin parece desatualizado comparado ao do Payload, seu suporte TypeScript não é tão forte, e seu modelo de licenciamento ficou mais restritivo. Directus oferece uma abordagem similar de envolvimento de banco de dados com uma UI mais moderna. Payload oferece melhor DX para equipes TypeScript. A principal vantagem do Strapi é seu ecossistema de plugin maior e comunidade maior, mas a lacuna está fechando.
E quanto a Sanity, Contentful ou outras plataformas CMS SaaS? Sanity e Contentful são ótimos produtos mas são plataformas SaaS proprietárias. Seus dados vivem nos servidores deles, preços escalam com uso (e podem ficar caros rapidamente), e você é dependente de sua infraestrutura. Directus, Payload e Supabase são todas open source e auto-hospedáveis. Se propriedade de dados, controle de custo e flexibilidade de deployment importam para você, as opções open-source vencem. Cobrimos isso com mais detalhes em nossa página de desenvolvimento de CMS headless.
Qual tem o melhor ecossistema de plugins/extensões? Directus tem um marketplace com extensões da comunidade para interfaces customizadas, displays e módulos. Payload tem um ecossistema de plugins em crescimento com plugins oficiais para SEO, forms, nested docs e redirects. Supabase tem extensões Postgres (centenas delas) que servem um propósito diferente mas são incrivelmente poderosas. Para plugins específicos de CMS, Directus atualmente tem mais opções.
Qual é a melhor opção para uma pequena equipe com orçamento limitado? Payload auto-hospedado no tier gratuito de Vercel ou plano hobby de Railway. Você obtém um CMS completo com zero custo mensal para projetos com baixo tráfego. O tier gratuito de Supabase é também excelente para prototipagem. Directus requer auto-hospedagem para uso gratuito (sem tier cloud gratuito), mas roda bem em uma VPS de $5/mês. Se orçamento é apertado e você precisa de ajuda fazendo a escolha certa, entre em contato conosco -- ajudamos muitas equipes a encontrar a arquitetura mais econômica.