Drizzle ORM generates zero-overhead SQL from TypeScript. No query engine, no runtime cost — just your SQL with full type safety.
Setup
npm install drizzle-orm postgres
npm install -D drizzle-kit
Define Your Schema
import { pgTable, serial, text, integer, timestamp } from 'drizzle-orm/pg-core';
export const users = pgTable('users', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
email: text('email').unique(),
createdAt: timestamp('created_at').defaultNow()
});
export const posts = pgTable('posts', {
id: serial('id').primaryKey(),
title: text('title').notNull(),
content: text('content'),
authorId: integer('author_id').references(() => users.id)
});
Query API
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
import { eq, like, desc, count } from 'drizzle-orm';
const sql = postgres('postgres://...');
const db = drizzle(sql);
// Select with conditions
const activeUsers = await db.select()
.from(users)
.where(like(users.email, '%@company.com'))
.orderBy(desc(users.createdAt))
.limit(10);
// Join
const postsWithAuthors = await db.select({
postTitle: posts.title,
authorName: users.name
}).from(posts)
.leftJoin(users, eq(posts.authorId, users.id));
// Aggregate
const postCounts = await db.select({
author: users.name,
totalPosts: count(posts.id)
}).from(users)
.leftJoin(posts, eq(users.id, posts.authorId))
.groupBy(users.name);
// Insert returning
const [newUser] = await db.insert(users)
.values({ name: 'Bob', email: 'bob@example.com' })
.returning();
// Update
await db.update(users)
.set({ name: 'Robert' })
.where(eq(users.id, newUser.id));
Migrations
npx drizzle-kit generate
npx drizzle-kit migrate
npx drizzle-kit studio # visual database browser
Why Drizzle Over Prisma
- No query engine: Prisma bundles a Rust binary. Drizzle is pure TS.
- SQL-like API: If you know SQL, you know Drizzle.
- Serverless-friendly: No cold start overhead from engine initialization.
- Smaller bundles: Drizzle adds ~50KB vs Prisma's ~10MB engine.
Need custom database tooling or backend architecture? I build developer tools and data pipelines. Check out my web scraping actors on Apify or reach out at spinov001@gmail.com for custom solutions.
Top comments (0)