O que é o Drizzle ORM

O Drizzle ORM e um ORM moderno para TypeScript e JavaScript que se tornou um dos queridinhos da comunidade de desenvolvimento. A proposta dele e simples e ousada ao mesmo tempo: te deixar escrever consultas que se parecem muito com SQL, mas com toda a segurança de tipos que o TypeScript oferece.

Ele foi criado pela equipe da Drizzle Team e cresceu rápido por resolver uma dor antiga de quem trabalha com banco de dados em Node.js. A maioria dos ORMs esconde o SQL atrás de camadas de abstração. O Drizzle faz o contrario: deixa o SQL visível, mas tipado e seguro.

A razão de estar em alta agora tem a ver com a explosão de aplicações serverless e edge. Nesses ambientes, cada milissegundo e cada quilobyte importam, e o Drizzle foi pensado para ser leve o suficiente para rodar nesses cenários sem peso extra.

Como funciona

O Drizzle funciona como uma camada fina entre o seu código e o banco. Você descreve o schema do banco em TypeScript, com tabelas e colunas tipadas, e o Drizzle usa essas definições para gerar consultas seguras em tempo de compilação.

A grande sacada e que ele não depende de um passo de geração de código em tempo de execução. O schema e o próprio TypeScript, então o autocomplete do seu editor já conhece todas as tabelas, colunas e relações. Se você errar o nome de uma coluna, o erro aparece antes de rodar a aplicação.

Ele oferece duas formas de consultar os dados. Uma e o query builder no estilo SQL, em que você monta selects, joins e filtros parecidos com a linguagem original. A outra e a relational queries API, mais alto nível, ideal para buscar dados relacionados sem escrever joins na mao.

Principais recursos

O Drizzle reúne um conjunto de recursos pensados para produtividade sem abrir mao do controle. Os destaques são:

  • Segurança de tipos completa: todo o schema e tipado, do select ao insert.
  • Query builder SQL-like: a sintaxe lembra SQL de verdade, sem curva de aprendizado exótica.
  • Drizzle Kit: ferramenta de linha de comando para gerar e aplicar migrações.
  • Suporte multi-banco: funciona com PostgreSQL, MySQL e SQLite.
  • Drivers serverless: integra com plataformas como Néon, PlanetScale e Turso.

Um diferencial importante e o tamanho reduzido. Por ser leve e sem dependências pesadas, ele cabe bem em funções serverless e em ambientes edge, onde bibliotecas grandes costumam atrapalhar o tempo de inicialização.

Além disso, ele não esconde o que esta acontecendo. Você consegue inspecionar o SQL gerado a qualquer momento, o que ajuda muito na hora de otimizar consultas ou entender um problema de performance.

Como começar: instalação passo a passo

Começar com o Drizzle e direto, especialmente se você já tem um projeto Node.js com TypeScript configurado. O fluxo básico envolve poucos passos.

Passo 1: instale o pacote principal e o driver do seu banco. Com PostgreSQL, por exemplo, você instala o drizzle-orm junto com um cliente como o pg ou o postgres.

Passo 2: instale o Drizzle Kit como dependência de desenvolvimento. Ele cuida da parte de migrações e da geração do schema a partir do banco existente, se for o caso.

Passo 3: defina o schema em um arquivo TypeScript, descrevendo cada tabela e coluna. Passo 4: crie a conexão passando o driver e o schema para o Drizzle. A partir dai você já consegue fazer consultas tipadas. Os únicos requisitos são ter Node.js instalado e um banco de dados acessível.

Exemplo prático

Imagine uma tabela de usuários. No Drizzle, você define essa tabela em TypeScript com colunas como id, nome e email, cada uma com seu tipo. Esse arquivo de schema vira a fonte única de verdade do seu banco.

Para buscar todos os usuários, você usa uma consulta parecida com um select. Para filtrar, adiciona uma condição com o operador adequado, por exemplo buscar usuários cujo email contenha um domínio específico. O autocomplete sugere os campos disponíveis enquanto você digita.

Na hora de inserir um registro, você passa um objeto com os campos da tabela. Se faltar um campo obrigatório ou o tipo estiver errado, o TypeScript reclama na hora. Esse ciclo de feedback rápido e o que torna a experiência tao agradável para quem já sofreu com erros de banco que só apareciam em produção.

Comparação com alternativas

O Drizzle não esta sozinho nesse mercado. As principais alternativas no mundo TypeScript são o Prisma, o TypeORM, o Kysely e o Sequelize.

O Prisma e o concorrente mais conhecido. Ele aposta em uma linguagem própria de schema e em um cliente gerado, com uma experiência muito polida. O Drizzle, por outro lado, mantem tudo dentro do TypeScript e fica mais próximo do SQL, o que agrada quem quer controle fino sobre as consultas.

Comparado ao Kysely, que também é SQL-like e tipado, o Drizzle agrega a parte de schema e migrações de forma mais integrada. Já em relação ao TypeORM e ao Sequelize, que são mais antigos, o ponto forte do Drizzle e ser mais leve e mais adequado a ambientes serverless e edge.

Pontos positivos e limitações

Entre os pontos positivos, o mais citado e a combinação de SQL visível com segurança de tipos. Quem gosta de saber exatamente qual consulta esta sendo enviada ao banco se sente em casa. O tamanho reduzido e o bom desempenho em serverless completam a lista.

A documentação também evoluiu bastante e a comunidade e ativa, o que facilita encontrar respostas. Para projetos novos que já nascem em TypeScript, a adoção costuma ser tranquila.

Por outro lado, existem limitações. Por ser mais próximo do SQL, ele exige que você entenda bem o banco, o que pode pesar para quem prefere uma abstração total. Alguns recursos mais avançados ainda amadurecem com o tempo, e quem vem de ORMs muito automáticos pode estranhar ter que pensar mais nas consultas.

Casos de uso reais

O Drizzle se encaixa bem em vários perfis. Veja alguns cenários concretos:

  • Desenvolvedor solo de SaaS: quer um ORM leve para uma API em serverless, com deploy rápido e baixo custo.
  • Time de startup: precisa de produtividade com TypeScript e quer evitar surpresas de tipo em produção.
  • Aplicação edge: roda em funções de borda e precisa de uma biblioteca pequena que inicialize rápido.
  • Projeto que valoriza SQL: a equipe domina SQL e não quer que o ORM esconda as consultas.

Em todos esses casos, o equilíbrio entre controle e produtividade e o que faz a diferença. Quem já tem familiaridade com bancos relacionais costuma se adaptar em poucas horas.

Também é uma escolha comum em projetos que usam bancos serverless modernos, justamente pela integração direta com os drivers dessas plataformas.

Dicas e boas práticas

Usuários experientes costumam manter o schema bem organizado, separando as tabelas em arquivos quando o projeto cresce. Isso facilita a manutenção e evita um único arquivo gigante e difícil de navegar.

Outra boa prática e usar o Drizzle Kit para versionar as migrações desde o inicio, em vez de aplicar mudanças manuais no banco. Assim o histórico de evolução do schema fica claro e reproduzível em todos os ambientes.

Um erro comum de iniciantes e tratar o Drizzle como um ORM totalmente automático e esquecer de pensar nas consultas. Como ele é SQL-like, vale aproveitar essa transparência para inspecionar o SQL gerado e otimizar onde fizer sentido. Outra dica e aproveitar a relational queries API para evitar joins repetitivos no código.

Vale a pena?

Para quem trabalha com TypeScript e gosta de ter controle sobre o banco, o Drizzle vale muito a pena. Ele entrega segurança de tipos sem esconder o SQL, e brilha em serverless e edge, onde leveza e desempenho são essenciais.

Para quem prefere uma abstração total e não quer pensar em SQL, talvez um ORM mais automático como o Prisma se encaixe melhor. Não existe escolha errada aqui, e sim a que combina com o seu jeito de trabalhar e com o perfil do projeto.

O próximo passo sugerido e criar um projeto pequeno de teste, definir uma ou duas tabelas e fazer algumas consultas. Em pouco tempo você sente na prática se o estilo SQL-like do Drizzle combina com você. A documentação oficial e um ótimo ponto de partida.