Drizzle vs Prisma pro nás není remíza, ale ani souboj s vítězem. Obě ORM máme v produkci: Prismu na Postgresu ve starších klientských aplikacích a Drizzle na Cloudflare D1 v každé nové aplikaci, od kdy novou práci stavíme na Workers. Krátká odpověď: Drizzle vyberte, když nasazujete na serverless nebo edge a chcete schéma a migrace jako čistý TypeScript a SQL. Prismu nechte tam, kde už funguje.
Většinu srovnání píše jeden ze dvou dodavatelů nebo někdo, kdo postavil demo dvakrát. Tohle vychází z repozitářů, které udržujeme, s konfigurací tak, jak je.
Drizzle vs Prisma: jaký je skutečný rozdíl?
Obě vám dají typovaného klienta databáze v TypeScriptu. Rozdíl je v tom, kde žije schéma a jak daleko je ORM od SQL.
Prisma
Drizzle
Schéma
schema.prisma, vlastní jazyk
soubory .ts, čistý TypeScript
Klient
generuje ho prisma generate
typem je samotné schéma, pro dotazy se negeneruje
Dotazy
objektové API (findMany, include)
ve tvaru SQL (select().from().where()) plus relační API
Migrace
prisma migrate dev / deploy
drizzle-kit generate zapíše SQL soubory, spustíte je vy
Kde ho používáme
Postgres ve starších Next.js aplikacích
Cloudflare D1 (SQLite) v nových aplikacích
Engine
od Prismy 7 klient bez Rustu
podle dokumentace „exactly 0 dependencies“
Dokumentace Drizzlu ho popisuje jako „dialect-specific, slim, performant and serverless-ready by design“ (Drizzle overview, ověřeno 24. 10. 2026). Prisma je nástroj o úroveň výš: popíšete modely a SQL vymyslí ona.
Proč nové aplikace běží na Drizzlu?
Naše nové aplikace běží na Cloudflare Workers s D1, což je SQLite. Stejné nastavení má náš startovací template i naše interní nástroje. Celá konfigurace Drizzlu je tohle:
Schéma je soubor v TypeScriptu. Zkráceně z našeho templatu:
// packages/db/src/schema/records.ts
import { sql } from 'drizzle-orm'
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'
import { user } from './auth'
const record = sqliteTable('record', {
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
name: text('name').notNull(),
status: text('status', { enum: ['active', 'inactive', 'pending'] }).default('active').notNull(),
createdById: text('created_by_id').references(() => user.id, { onDelete: 'set null' }),
createdAt: integer('created_at', { mode: 'timestamp_ms' })
.default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
.notNull(),
})
Klient je jeden řádek nad vazbou na D1 a dotaz se čte jako SQL:
import { drizzle } from 'drizzle-orm/d1'
import * as schema from './schema'
const createDb = () => drizzle(env.DB, { schema })
const [total] = await ctx.db.select({ count: count() }).from(record)
U nové práce rozhodly tři důvody:
Prostředí. Cílem byly D1 a Workers. Drizzle se připojí přes import { drizzle } from 'drizzle-orm/d1' (Drizzle a D1).
Agent čte schéma přímo. AI dnes píše veškerý náš kód a za produkci ručí senior. Schéma v TypeScriptu je obyčejný kód: agent ho upraví, typová kontrola hned chytí špatný sloupec a není tu vygenerovaný klient, kterého by někdo zapomněl přegenerovat.
Migrace jsou SQL v PR. Kdo dělá review, vidí přesný ALTER TABLE, ne diff souboru s modelem.
Přihlašování používá stejnou databázi. Better Auth se připojí přes drizzleAdapter(db, { provider: 'sqlite' }), takže uživatelé a sessions jsou obyčejné tabulky vedle tabulek aplikace.
Jak se změna schématu dostane do produkce?
Změna jde v každé nové aplikaci stejně. Nikdo nespouští SQL ručně proti produkci.
01
Změna schématu v TypeScriptu
Přidáte sloupec nebo tabulku v packages/db/src/schema. Typová kontrola označí každý dotaz, který už nesedí.
02
Vygenerování migrace
drizzle-kit generate zapíše očíslovaný SQL soubor do packages/db/src/migrations.
03
Review SQL v PR
Změna schématu a SQL soubor jdou spolu, takže reviewer čte skutečný příkaz.
04
Nasazení ji spustí na D1
Náš kód infrastruktury nasměruje D1 na složku s migracemi a při nasazení spustí nové soubory.
Strana nasazení je v našem kódu infrastruktury, v TypeScriptu s Alchemy:
// packages/infra/alchemy.run.ts (zkráceno)
const db = await D1Database('database', {
migrationsDir: '../../packages/db/src/migrations',
})
const web = await TanStackStart('web', {
cwd: '../../apps/web',
bindings: { DB: db },
})
Jedna složka SQL souborů je celá historie databáze. I díky tomu je předání čitelné pro dalšího inženýra.
Kde Prisma pořád vyhrává a proč ji necháváme?
Několik starších klientských aplikací běží na Prismě a Postgresu, napříč několika hlavními verzemi Prismy. Jednou z nich je systém pro spediční firmu, který jsme postavili a provozujeme. Většina má klasické nastavení: prisma-client-js, NextAuth s adaptérem pro Prismu a prisma migrate deploy v build skriptu, takže každé nasazení nejdřív srovná databázi a až potom spustí next build.
Toto nastavení funguje. Jazyk modelů v Prismě se dobře čte i člověku, který nepíše SQL každý den, a její postup migrací je vyzrálý. Z aplikace, která dobře slouží uživatelům, ji nemáme důvod vyhazovat.
Výměna ORM zasáhne najednou každý dotaz, každý test a každou migraci a uživatel neuvidí nic nového. Toto riziko se vyplatí, jen když ho vynutí něco jiného, například přesun na Workers. Když přebíráme starší aplikaci, ORM bývá málokdy to první, co je potřeba opravit. Jak vybíráme, co jde první, píšeme v článku Technický dluh brzdí vývoj: jak ho změřit a co řešit první.
Ještě jedna upřímná poznámka: online marketplace jednoho klienta běží na MongoDB s Mongoose, takže tam není ani jedno z těchto ORM.
Co změnila Prisma 7?
Spousta srovnání „Drizzle vs Prisma“ se pořád hádá o binárku Rust enginu. Tento argument už slábne. Prisma ORM 7 vyšla 19. 11. 2025 a v changelogu stojí „Rust-free Prisma Client as the default“ (Prisma changelog, ověřeno 24. 10. 2026). Návod na upgrade říká:
Upgrade to the new prisma-client provider which uses the new Rust-free client.
Stejný návod říká, že driver adapter je teď povinný pro každou databázi. Prisma 7 tedy běží i na Workers a na D1 přes @prisma/adapter-d1. Stránka Prismy o D1 přidává upozornění, které platí pro každé ORM: D1 nepodporuje transakce, takže „implicit & explicit transactions will be ignored and run as individual queries“ (Prisma a Cloudflare D1, ověřeno 24. 10. 2026).
Upřímně: Drizzle proti Prismě 7 jsme neměřili a Prismu 7 na D1 jsme zatím nepoužili. Většina našich aplikací s Prismou je ještě na prisma-client-js, nový generátor prisma-client už používá jen ta nejnovější. Pokud je dnes srovnáváte, srovnávejte s Prismou 7, ne s verzí ze starých blogů.
Drizzle, nebo Prisma pro vaši další aplikaci?
Projděte si body. Čím víc z nich u vás platí, tím líp sedí Drizzle:
Chcete webovou aplikaci s datovou vrstvou, kterou přečte i další inženýr?
Webové aplikace stavíme na tomto stacku, u nové práce Drizzle na D1, a aplikace s Prismou přebíráme bez přepisování toho, co funguje: vývoj webových aplikací na míru. AI dnes píše veškerý náš kód a za výsledek ručí senior. Od roku 2023 jsme dodali 15+ produkčních projektů.
Ozveme se do dvou pracovních dnů a společně vybereme, co vyřešíme jako první.
Obecně není lepší ani jedno. Drizzle sedí na serverless a edge prostředí jako Cloudflare Workers s D1, schéma drží v čistém TypeScriptu a je blízko SQL. Prisma sedí týmům, které chtějí vyšší klient, vlastní postup migrací a nástroje jako Prisma Studio, typicky na Postgresu.
Potřebuje Prisma ještě binárku Rust enginu?
Od Prisma ORM 7, vydané 19. 11. 2025, už ne. Nový generátor prisma-client používá klienta bez Rustu a pro každou databázi potřebuje driver adapter. Aplikace na prisma-client-js s Prismou 5 nebo 6 používají Rust engine výchozím způsobem.
Dá se Prisma použít s Cloudflare D1?
Ano, přes driver adapter @prisma/adapter-d1. Dokumentace Prismy upozorňuje, že D1 nepodporuje transakce, takže implicitní i explicitní transakce běží jako samostatné dotazy. Tento limit D1 platí pro každé ORM.
Máme fungující aplikaci s Prismou přepsat na Drizzle?
Většinou ne. Přepis datové vrstvy ve fungující aplikaci nese skutečné riziko a uživatelům nedá nic nového. Na Drizzle přecházíme u nové aplikace nebo když se mění prostředí, například na Cloudflare Workers.
Jak fungují migrace v Drizzlu?
Schéma změníte v TypeScriptu, drizzle-kit generate zapíše čistý SQL soubor s migrací a ten se spustí při nasazení. U nás jde SQL soubor přes code review ve stejném PR jako změna schématu.
Zeptejte se AI na tento článek
AI při odpovědi využije i naše další články a zkušenosti z reálných projektů.
Claude Code pricing podle veřejného ceníku Anthropicu (říjen 2026): Pro, Max, Team seaty, Enterprise a API tokeny. Co se hodí vývojářům, na čem běží agent na pozadí a CI reviewer, a pojistky, které agentovi nedovolí projet rozpočet.
Vercel jsme nenahradili, práci jsme rozdělili. Next.js weby zůstávají na Vercelu, nové aplikace běží na Cloudflare Workers a D1, popsané v TypeScriptu přes Alchemy. Ceny se zdroji, naše konfigurace a zablokovaný deploy od AI agenta.
Better Auth vs Clerk se rozhoduje podle toho, kde žijí vaši uživatelé a session. Z NextAuth jsme v nových aplikacích přešli na Better Auth a Clerk jsme si nevybrali. Naše reálná konfigurace, pluginy v produkci, ceník Clerku a kdy je Clerk lepší volba.