Directus vs Supabase em 2026: Qual Backend se Ajusta ao Seu Projeto?
Seu dashboard Vercel mostra uma build com falha. A migração do Directus expirou porque um editor de conteúdo mudou um campo de schema às 15h—sem aviso prévio, sem plano de rollback. Ou: seus tokens de auth do Supabase expiram no meio de uma sessão porque você interpretou mal a janela de refresh no changelog de três releases atrás. Já enviei 47 projetos em ambas as plataformas desde 2023. Toda vez que um founder pergunta "Directus ou Supabase?", a resposta se divide em uma pergunta: você está construindo uma operação de conteúdo ou uma aplicação de usuário? Directus envolve qualquer banco de dados SQL em um CMS visual com APIs REST e GraphQL geradas automaticamente. Supabase começa com PostgreSQL e adiciona autenticação, assinaturas em tempo real, armazenamento e edge functions. Ambos te dão um banco de dados. Ambos te dão uma API. Ambos incluem um painel. Mas Directus trata editores de conteúdo como usuários de primeira classe; Supabase trata desenvolvedores como os únicos usuários. Essa divisão determina qual deles sobrevive ao seu lançamento em produção—e qual cria débito de suporte seis meses depois.
Vou te levar por tudo o que aprendi construindo em produção com ambos.
Filosofia e Identidade Principal
Directus se chama uma "plataforma de dados", mas vamos ser honesto -- no fundo é um headless CMS. Ele pega seu banco de dados SQL existente (PostgreSQL, MySQL, MariaDB, MS SQL, SQLite, Oracle, CockroachDB) e adiciona uma interface de gerenciamento de conteúdo. O insight-chave: Directus não é dono do seu schema de dados. Você pode apontá-lo para um banco de dados existente e ele introspectará as tabelas e relacionamentos automaticamente. Isso é poderoso se você já tem um banco de dados e precisa de uma camada de gerenciamento.
Supabase é um Backend-as-a-Service (BaaS). É PostgreSQL com tudo incluído: autenticação, armazenamento de arquivos, assinaturas em tempo real, edge functions e embeddings de vetores para workloads de IA. Supabase assume que você está construindo uma aplicação, não gerenciando conteúdo. O painel é projetado para desenvolvedores, não para editores de conteúdo.
Essa diferença filosófica importa mais do que qualquer comparação de recursos. Se você está construindo um website orientado por conteúdo onde editores precisam publicar posts de blog, gerenciar mídia e visualizar alterações -- Directus é propositalmente construído para isso. Se você está construindo um app SaaS onde usuários se inscrevem, armazenam dados e interagem em tempo real -- Supabase é construído para isso.
Mas a maioria dos projetos reais não é tão limpa. E é aí que as coisas ficam interessantes.
Modelagem de Dados e Banco de Dados
Directus
Directus usa uma abordagem "database-first". Você define seu schema através da UI do Directus ou diretamente no seu banco de dados -- ambas funcionam. O app admin auto-gera formulários, relacionamentos e validação baseado no seu schema. Quer um relacionamento many-to-many entre articles e tags? Crie a tabela de junção (ou deixe o Directus criar), e a UI do admin renderiza automaticamente um seletor de tags legal.
Uma coisa que aprecio: Directus não cria sua própria camada de abstração sobre suas tabelas. Seus nomes de tabelas, nomes de colunas e relacionamentos são exatamente o que você definiu. As tabelas de sistema (prefixadas com directus_) ficam ao lado dos seus dados mas não interferem neles.
Bancos de dados suportados em 2026:
- PostgreSQL 12+
- MySQL 8+
- MariaDB 10.5+
- MS SQL 2019+
- SQLite 3+
- CockroachDB 22+
- Oracle 19c+
Supabase
Supabase é PostgreSQL. Ponto. Você ganha uma instância PostgreSQL completa com extensões como PostGIS, pgvector, pg_cron e centenas de outras. O gerenciamento de schema acontece através do editor SQL do painel, da UI do editor de tabelas, ou migrações via CLI do Supabase.
O workflow de migração no Supabase amadureceu significativamente. A CLI gera arquivos de migração, e você pode usar supabase db diff para capturar mudanças de schema feitas através do painel. Em 2026, eles também adicionaram branching -- branches de banco de dados que te deixam testar mudanças de schema isoladamente antes de fazer merge em produção.
-- Exemplo de migração Supabase
create table public.articles (
id uuid default gen_random_uuid() primary key,
title text not null,
slug text unique not null,
content jsonb,
published_at timestamptz,
author_id uuid references auth.users(id),
created_at timestamptz default now()
);
alter table public.articles enable row level security;
create policy "Published articles are viewable by everyone"
on public.articles for select
using (published_at is not null and published_at <= now());
O modelo Row Level Security (RLS) é tanto o superpoder do Supabase quanto sua curva de aprendizado mais íngreme. Mais sobre isso depois.
| Recurso | Directus | Supabase |
|---|---|---|
| Motor de banco de dados | PostgreSQL, MySQL, MariaDB, MS SQL, SQLite, CockroachDB, Oracle | PostgreSQL apenas |
| Gerenciamento de schema | GUI + SQL direto | GUI + editor SQL + migrações CLI |
| Database branching | Não integrado (use instâncias separadas) | Sim (nativo, desde final de 2024) |
| Extensões | Depende do DB escolhido | 60+ extensões Postgres |
| Suporte a Vetores/IA | Via extensões | pgvector integrado |
| Acesso direto ao DB | Acesso total sempre | Acesso total sempre |
Comparação de Camada API
APIs Directus
Directus auto-gera APIs REST e GraphQL a partir do seu schema. A API REST segue um padrão previsível:
# Obter todos os artigos com relacionamento de autor
GET /items/articles?fields=*,author.name&filter[status][_eq]=published&sort=-published_at&limit=10
O sistema de filtragem é expressivo. Você pode fazer filtros relacionais aninhados, agregação e até consultas geográficas. O SDK envolve tudo isso bem:
import { createDirectus, rest, readItems } from '@directus/sdk';
const client = createDirectus('https://your-instance.com').with(rest());
const articles = await client.request(
readItems('articles', {
fields: ['*', { author: ['name', 'avatar'] }],
filter: { status: { _eq: 'published' } },
sort: ['-published_at'],
limit: 10,
})
);
O SDK TypeScript no Directus 11 (versão stable atual em 2026) ficou muito melhor em inferência de tipos, embora você ainda precise gerar tipos a partir do seu schema para segurança de tipos completa.
APIs Supabase
Supabase gera uma API REST via PostgREST e fornece uma biblioteca cliente JavaScript que parece mais um ORM:
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);
const { data: articles, error } = await supabase
.from('articles')
.select('*, author:profiles(name, avatar_url)')
.eq('status', 'published')
.order('published_at', { ascending: false })
.limit(10);
Supabase não oferece GraphQL nativamente. Eles tiveram pg_graphql por um tempo, e ainda está disponível como uma extensão, mas a DX primária é o cliente JS e a API REST. Honestamente? Não sinto falta de GraphQL ao usar Supabase. A sintaxe select com junção de relacionamento cobre 95% dos casos de uso.
Uma área onde Supabase se destaca: assinaturas em tempo real sobre WebSockets e edge functions para lógica server-side. Directus tem Flows (seu engine de automação), mas não é a mesma coisa que ter um runtime de função serverless completo.
Experiência de Gerenciamento de Conteúdo
Este é o ponto onde Directus absolutamente domina. Não é nem perto.
O app admin do Directus é projetado para equipes de conteúdo. Você ganha:
- Layouts customizados: kanban boards, calendários, mapas, split views para navegação de coleção
- Editores WYSIWYG e de blocos: O editor de blocos no Directus 11 é genuinamente bom
- Suporte a tradução: i18n integrado com interfaces de tradução lado-a-lado
- Histórico de revisão: Versionamento de conteúdo completo com visualizações de diff
- Visualização ao vivo: Configure URLs de preview para que editores vejam alterações antes de publicar
- Permissões granulares: Acesso baseado em função até campos individuais
- Dashboards customizados: Painéis de analytics e overview para equipes de conteúdo
O editor de tabelas do Supabase é... um editor de tabelas. É ótimo para desenvolvedores que querem uma GUI para seu banco de dados. É horrível para uma equipe de marketing que precisa atualizar uma seção hero da homepage. Se você está construindo um site orientado por conteúdo e seus editores vão tocar o backend diretamente, Directus vence por padrão.
Já vi equipes tentarem construir uma UI admin customizada no topo do Supabase para edição de conteúdo. Funciona, mas você está essencialmente construindo um CMS do zero. Isso é meses de trabalho que Directus te dá no primeiro dia.
Se você está procurando um setup headless CMS apropriado para seu website, nossa equipe trabalha regularmente com Directus em projetos de CMS headless -- é uma de nossas recomendações principais para sites de conteúdo pesado.
Autenticação e Autorização
Supabase Auth
Supabase Auth é um sistema de autenticação totalmente featured. Email/senha, magic links, OAuth (Google, GitHub, Apple, etc.), telefone/SMS e SAML SSO estão todos integrados. Integra-se diretamente com Row Level Security do PostgreSQL, o que significa que suas regras de auth vivem no banco de dados.
-- Permitir que usuários vejam apenas seu próprio perfil
create policy "Users can view own profile"
on profiles for select
using (auth.uid() = id);
-- Permitir que usuários atualizem seu próprio perfil
create policy "Users can update own profile"
on profiles for update
using (auth.uid() = id);
Este modelo é elegante quando você o entende, mas políticas RLS podem ficar complexas rápido. Debugar por que uma query retorna resultados vazios por causa de uma política faltante é uma daquelas alegrias que você aprende a aceitar.
Directus Auth
Directus lida com autenticação para seus próprios usuários admin e também suporta SSO externo via OpenID Connect, SAML, LDAP e OAuth2. Para usuários de app front-end, você tipicamente usaria o sistema de usuário do Directus com roles customizadas.
O modelo de permissões no Directus é orientado por GUI. Você cria roles, então para cada role você configura permissões CRUD por coleção, opcionalmente com regras de nível de campo e item. É mais visual e possivelmente mais fácil de raciocinar do que políticas RLS, mas menos flexível para lógica de aplicação complexa.
Para aplicações onde autenticação de usuário final é a preocupação primária (pense em apps SaaS), o sistema de auth do Supabase é significativamente mais maduro. Para gerenciar acesso de equipe de conteúdo, o sistema de role do Directus é melhor adequado.
Capacidades em Tempo Real
O engine de realtime do Supabase é production-ready e lida com presence, broadcast e database change listeners:
const channel = supabase
.channel('articles')
.on('postgres_changes', {
event: 'INSERT',
schema: 'public',
table: 'articles',
}, (payload) => {
console.log('New article:', payload.new);
})
.subscribe();
Isto é genuinamente útil para chat apps, ferramentas colaborativas, dashboards ao vivo e sistemas de notificação.
Directus adicionou suporte a WebSocket e tem assinaturas em tempo real via seu endpoint de GraphQL subscription. Funciona, mas não é o mesmo nível de maturidade. Realtime do Directus é fino para cenários "notifique-me quando o conteúdo mudar" mas não é construído para aplicações colaborativas de alta frequência.
Self-Hosting e Infraestrutura
Ambas as ferramentas são open source e podem ser auto-hospedadas.
Directus é uma aplicação Node.js distribuída como um pacote npm e imagem Docker. Self-hosting é direto -- aponte para seu banco de dados, configure variáveis de ambiente, e você está rodando. Já implantei em Railway, Fly.io, AWS ECS e instâncias VPS simples sem problemas.
Supabase self-hosting é mais envolvido. A stack completa inclui PostgreSQL, PostgREST, GoTrue (auth), Realtime, Storage, Kong (API gateway) e o painel Studio. Seu setup Docker Compose funciona para desenvolvimento, mas self-hosting em produção requer mais conhecimento operacional. A maioria das equipes opta pela plataforma hospedada do Supabase e se poupa o overhead operacional.
| Aspecto | Directus Self-Hosted | Supabase Self-Hosted |
|---|---|---|
| Complexidade | Baixa-média (app Node.js único + DB) | Alta (7+ serviços) |
| Suporte a Docker | Imagem oficial, simples | Docker Compose, complexo |
| Recursos mín. | 1 vCPU, 1GB RAM | 4 vCPU, 8GB RAM (todos os serviços) |
| Guias da comunidade | Extensivos | Crescendo mas menos maduro |
| Alternativa gerenciada | Directus Cloud | Supabase Platform |
Breakdown de Preços 2026
Vamos falar sobre dinheiro. Estes são preços publicados atuais do início de 2026.
Directus Cloud
| Plano | Preço | Inclui |
|---|---|---|
| Community (self-hosted) | Gratuito | Tudo, auto-gerenciado |
| Standard | $99/mês | 1 projeto, 100K requisições de API, 5GB assets |
| Professional | $399/mês | Domínio customizado, mais recursos, suporte prioritário |
| Enterprise | Custom | SSO, SLA, infra dedicada |
Supabase Platform
| Plano | Preço | Inclui |
|---|---|---|
| Free | $0 | 500MB DB, 1GB armazenamento, 50K usuários de auth, 500K invocações de edge function |
| Pro | $25/mês | 8GB DB, 100GB armazenamento, 100K usuários de auth, 2M invocações de edge function |
| Team | $599/mês | Suporte prioritário, SOC2, backups diários, retenção de log de 28 dias |
| Enterprise | Custom | SLA, suporte dedicado, contratos customizados |
A diferença de preço é gritante. O tier gratuito do Supabase é genuinamente utilizável para side projects e MVPs. O ponto de entrada do Directus Cloud em $99/mês é íngreme para experimentação -- mas self-hosting do Directus em um VPS de $5/mês funciona perfeitamente bem para projetos pequenos.
Para uma startup construindo um app, o plano Pro de $25/mês do Supabase te dá muito. Para um negócio rodando um website de conteúdo pesado, Directus self-hosted mais uma instância PostgreSQL gerenciada pode custar $20-50/mês total.
Experiência de Desenvolvedor
Construo muitos projetos Next.js e sites Astro, então integração com framework importa muito para mim.
Directus DX
- SDK TypeScript é bom, melhorando a cada release
- Tipos de schema podem ser gerados a partir da sua instância
- Sistema de extensões para endpoints customizados, hooks, painéis e interfaces
- Flows (automação visual) podem substituir lógica simples de backend
- O app admin é customizável com módulos customizados e layouts
- Transformações de imagem integradas na API de entrega de assets
Supabase DX
- Tipos TypeScript auto-gerados a partir do seu schema (
supabase gen types typescript) - Desenvolvimento local com
supabase start(roda tudo em Docker) - Edge Functions (baseado em Deno) para lógica server-side
- Busca de vetores integrada com pgvector para recursos de IA
- Workflow orientado por CLI com migrações, branching e CI/CD
- Integração Vercel/Netlify para sincronização de variáveis de env
Ambas têm documentação sólida. A documentação do Supabase é particularmente bem-organizada com guias específicos de framework (Next.js, Nuxt, SvelteKit, Flutter, etc.). A documentação do Directus é completa mas às vezes fica para trás das mudanças mais recentes do SDK.
Quando Usar Cada Um
Depois de construir extensivamente com ambas, aqui está meu framework de decisão:
Escolha Directus quando:
- Editores de conteúdo precisam de uma interface admin polida
- Você está construindo um site de marketing, blog ou plataforma editorial
- Você precisa de gerenciamento de conteúdo multi-idioma
- Seu banco de dados existente precisa de uma UI de gerenciamento
- Workflows de conteúdo (rascunhos, reviews, aprovações) são importantes
- Você quer usar MySQL, MariaDB ou outro banco não-PostgreSQL
Escolha Supabase quando:
- Você está construindo uma aplicação voltada para usuários (SaaS, marketplace, social)
- Você precisa de autenticação e gerenciamento de usuário
- Recursos em tempo real são um requisito central
- Você quer edge functions para lógica server-side
- IA/vector search faz parte de seu roadmap
- Você quer o caminho mais rápido de ideia para app deployado
Use ambas quando:
Não é loucura. Já construí sistemas onde Supabase lida com auth de usuário, dados de app e recursos em tempo real, enquanto Directus gerencia conteúdo do site de marketing, blog e documentação. Eles podem compartilhar a mesma instância PostgreSQL ou usar bancos separados. A separação de preocupações na verdade torna a arquitetura mais limpa.
Se você está tentando descobrir a arquitetura de backend certa para seu projeto, é literalmente o que nossa equipe faz -- sinta-se livre para entrar em contato e conversar sobre sua situação específica.
FAQ
Directus pode substituir Supabase como backend para web apps?
Parcialmente. Directus te dá uma API de banco de dados e gerenciamento de usuário, então para apps CRUD simples, pode funcionar. Mas você vai sentir falta do sistema de auth integrado do Supabase, assinaturas em tempo real, edge functions e serviço de armazenamento de arquivos. Directus é otimizado para gerenciamento de conteúdo, não workloads de backend de aplicação. Para um app simples com principalmente operações de conteúdo, Directus é fino. Para qualquer coisa com fluxos de autenticação de usuário, recursos em tempo real ou lógica server-side complexa, você vai querer Supabase ou um BaaS similar.
Supabase é bom como um headless CMS?
Pode funcionar como um, mas requer trabalho customizado significativo. Você precisaria construir sua própria interface admin para editores de conteúdo, lidar com transformações de imagem separadamente, implementar versionamento de conteúdo manualmente e criar seu próprio sistema de preview. Equipes fizeram isso com ferramentas como Supabase + painéis admin React customizados, mas você está reinventando o que Directus (ou Strapi, ou Payload) te dá fora da caixa. Se o gerenciamento de conteúdo é sua necessidade primária, use um headless CMS dedicado.
Qual é melhor para uma aplicação Next.js?
Ambas se integram bem com Next.js. Supabase tem helpers oficiais do Next.js (@supabase/ssr) que lidam com gerenciamento de cookie de auth em server components e middleware. Directus funciona ótimo com Next.js também -- você busca dados via SDK em server components e usa ISR ou SSG para performance. Para um site de marketing com blog, eu emparelharia Next.js com Directus. Para um app SaaS com contas de usuário, Next.js com Supabase. Cobrimos isso em profundidade em nossa prática de desenvolvimento Next.js.
Posso self-hospedar Directus e Supabase gratuitamente?
Sim. Ambas são open source com licenças permissivas (Directus usa licença BSL 1.1 que converte para Apache 2.0 após 3 anos; Supabase usa Apache 2.0 para a maioria dos componentes). Directus é mais fácil de self-hospedar -- é um app Node.js único. Supabase self-hosting requer rodar múltiplos serviços (PostgreSQL, PostgREST, GoTrue, Realtime, Storage, Kong). Para Supabase, a maioria dos desenvolvedores usa a plataforma hospedada e se poupa o overhead operacional.
Como Directus e Supabase lidam com armazenamento de arquivo e mídia?
Directus tem um sistema de gerenciamento de asset integrado com transformações de imagem on-the-fly (redimensionar, crop, conversão de formato). Você faz upload de arquivos através da UI admin ou API, e requisita versões transformadas via parâmetros de URL. Supabase Storage é um serviço de armazenamento de arquivo compatível com S3 com controle de acesso baseado em RLS. Lida bem com uploads e downloads mas não tem transformações de imagem integradas -- você emparelharia com um serviço como Imgix, Cloudinary ou a transformação de imagem do próprio Supabase (que lançou como beta em 2025).
O que há sobre performance e escalabilidade?
A infraestrutura do Supabase é construída na AWS com connection pooling via Supavisor e pode lidar com tráfego substancial. Seus planos Pro podem ter bancos escalados para instâncias de 64GB RAM. A performance do Directus depende muito do seu setup de hospedagem e banco de dados. Com caching apropriado (Redis, CDN), Directus lida bem com tráfego alto, mas você é responsável pela infraestrutura. Em benchmarks, ambas podem lidar com milhares de requisições por segundo com recursos apropriados. O gargalo é quase sempre o banco de dados, não a camada de API.
Directus ou Supabase é melhor para uma equipe com membros não-técnicos?
Directus, sem questão. Sua interface admin é projetada para não-desenvolvedores. Você pode criar dashboards customizados, configurar workflows de aprovação de conteúdo e restringir acesso por role -- tudo sem escrever código. O painel do Supabase é uma ferramenta de desenvolvedor. Sua equipe de marketing não vai escrever SQL para atualizar uma página de landing. Se membros não-técnicos da equipe precisam gerenciar dados, a UI do Directus é a escolha certa.
Posso migrar de um para o outro depois?
Como ambas são compatíveis com PostgreSQL (e Directus suporta bancos adicionais), a migração é viável mas não trivial. Se você está no Directus com PostgreSQL e quer adicionar Supabase, você pode apontar Supabase para seu banco existente ou migrar os dados. As tabelas de sistema do Directus e o schema de auth do Supabase precisariam coexistir ou ser separados. Indo na outra direção -- adicionando Directus no topo de um banco Supabase -- é na verdade um padrão bem documentado. Directus pode introspectar tabelas existentes e criar sua camada de gerenciamento sem modificar seu schema de dados.