Wer mit TypeScript Datenbanken abfragt, kennt das Dilemma: Entweder man schreibt rohes SQL und verzichtet auf Typsicherheit, oder man greift zu einem vollwertigen ORM wie Prisma und akzeptiert einen gewaltigen Abstraktionslayer, der die SQL-Realität verschleiert. Drizzle ORM geht einen anderen Weg – es kombiniert die Ausdrucksstärke von SQL mit der Typsicherheit von TypeScript, bleibt dabei aber so leichtgewichtig, dass es auch in Edge-Umgebungen problemlos funktioniert.
Was ist Drizzle ORM?
Drizzle ORM ist ein TypeScript-ORM, das 2022 veröffentlicht wurde und seitdem rasant an Popularität gewonnen hat. Im Gegensatz zu klassischen ORMs, die SQL hinter einer abstrakten API verstecken, orientiert sich Drizzle eng an der SQL-Syntax. Entwickler, die SQL kennen, können Drizzle sofort produktiv einsetzen – die Lernkurve ist deutlich flacher als bei Alternativen.
Das Kernprinzip lautet: SQL-first, TypeScript-native. Abfragen werden so formuliert, wie man SQL denkt, aber der TypeScript-Compiler prüft jeden Schritt. Fehlende Spalten, falsche Typen oder ungültige Joins werden zur Compile-Zeit erkannt, nicht erst zur Laufzeit in der Produktion.
Ein weiterer entscheidender Vorteil ist die Paketgröße. Drizzle bringt nur rund 31 kB mit – ein Bruchteil dessen, was Prisma benötigt. Das macht es zur ersten Wahl für Cloudflare Workers, Vercel Edge Functions oder andere Laufzeitumgebungen mit strikten Bundle-Limits.
SQL-ähnliche Syntax mit TypeScript-Inferenz
Die Syntax von Drizzle fühlt sich vertraut an, wenn man SQL kennt. Statt einer proprietären Abfragesprache verwendet Drizzle JavaScript-Methoden, die direkt auf SQL-Konzepte abgebildet werden:
import { db } from './db';
import { users } from './schema';
import { eq, gt } from 'drizzle-orm';
// SELECT * FROM users WHERE age > 18 AND email = '[email protected]'
const result = await db.select()
.from(users)
.where(gt(users.age, 18));
TypeScript leitet dabei den Rückgabetyp automatisch aus dem Schema ab. Wenn das Schema age als integer definiert, weiß der Compiler, dass result[0].age eine Zahl ist – kein manuelles Typing nötig.
Schema-Definition mit Drizzle
Schemata werden in TypeScript direkt im Code definiert. Drizzle unterstützt dabei alle gängigen Datenbanktypen und gibt Ihnen die volle Kontrolle über Constraints, Default-Werte und Indizes:
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().notNull(),
age: integer('age'),
createdAt: timestamp('created_at').defaultNow(),
});
Für MySQL und SQLite gibt es analoge Importpfade (drizzle-orm/mysql-core bzw. drizzle-orm/sqlite-core). Die Schema-Definitionen sind portabel und können mit geringem Aufwand zwischen Datenbanktypen angepasst werden.
Migrationen mit drizzle-kit
Zum Migrations-Tooling gehört drizzle-kit, ein CLI-Werkzeug, das Schemaänderungen erkennt und SQL-Migrationsdateien generiert. Der Workflow ist dabei bewusst transparent gehalten:
- Schema in TypeScript anpassen
npx drizzle-kit generateaufrufen – SQL-Datei wird erstellt- Migration mit
npx drizzle-kit migrateeinspielen
Im Gegensatz zu Prisma, das Migrationen automatisch auflöst und dabei manchmal unerwartete SQL generiert, zeigt Drizzle immer exakt das SQL, das ausgeführt wird. Das erhöht die Nachvollziehbarkeit und das Vertrauen in kritische Schema-Änderungen.
npx drizzle-kit studio eine browserbasierte GUI zum Erkunden und Bearbeiten der Datenbank. Ideal für lokale Entwicklung – ähnlich wie Prisma Studio, aber ohne den Prisma-Overhead.
Unterstützte Datenbanken
Drizzle unterstützt alle wichtigen relationalen Datenbanken: PostgreSQL (via pg, postgres.js oder @vercel/postgres), MySQL (via mysql2) und SQLite (via better-sqlite3, bun:sqlite oder @libsql/client für Turso). Auch Neon Serverless, PlanetScale und Cloudflare D1 werden offiziell unterstützt.
Die Kombination mit Turso und dem libSQL-Client ist besonders attraktiv: Drizzle übernimmt dabei die Typsicherheit, während Turso für schnelle globale Reads am Edge sorgt. Mehr dazu im Turso-Artikel.
Drizzle Studio
Drizzle Studio ist die visuelle Oberfläche für Drizzle-Datenbanken. Es läuft lokal im Browser und erlaubt das Durchsuchen von Tabellen, das Ausführen von Abfragen und das direkte Bearbeiten von Datensätzen. Seit der Integration in drizzle-kit 0.20 ist kein separates Setup mehr nötig.
Vergleich: Drizzle vs. Prisma vs. TypeORM vs. Kysely
| Kriterium | Drizzle ORM | Prisma | TypeORM | Kysely |
|---|---|---|---|---|
| Bundle-Größe | ~31 kB | ~2,5 MB (Client + Engine) | ~400 kB | ~35 kB |
| SQL-Nähe | Sehr hoch | Niedrig (eigene Sprache) | Mittel | Sehr hoch |
| Typsicherheit | Vollständig inferiert | Vollständig (generiert) | Teilweise | Vollständig inferiert |
| Migrationen | drizzle-kit (SQL sichtbar) | prisma migrate (automatisch) | Manuell oder auto | Keine (nur Query Builder) |
| Edge-Tauglich | Ja | Eingeschränkt | Nein | Ja |
| Schema-Sprache | TypeScript | Prisma Schema (.prisma) | TypeScript Decorators | TypeScript |
| Studio/GUI | Ja (Drizzle Studio) | Ja (Prisma Studio) | Nein | Nein |
Warum Entwickler von Prisma zu Drizzle wechseln
Prisma war jahrelang die erste Wahl für TypeScript-Projekte – und das aus gutem Grund. Die Entwicklererfahrung ist hervorragend, die Dokumentation vorbildlich. Doch mit zunehmender Verbreitung von Edge-Runtimes und Serverless-Architekturen zeigen sich strukturelle Schwächen.
Das größte Problem: Prisma lädt eine native Query Engine (~2 MB) nach, die in Cloudflare Workers oder Deno Deploy schlicht nicht funktioniert. Prisma hat mit dem Edge-Client nachgezogen, aber die Komplexität bleibt hoch. Drizzle hingegen läuft von Haus aus in jeder JavaScript-Umgebung.
Ein weiterer Grund für den Wechsel ist die Kontrolle über SQL. Mit Prisma schreibt man kein SQL – man beschreibt Abfragen in einer abstrakten API, und Prisma generiert SQL daraus. Das ist für einfache CRUD-Operationen angenehm, stößt aber bei komplexen Joins, CTEs oder datenbankspezifischen Features schnell an Grenzen. Drizzle erlaubt zudem sql\`...\` Template Literals für beliebiges SQL, ohne den Typsystem-Schutz aufzugeben.
Fazit
Drizzle ORM hat sich als ernstzunehmende Alternative zu Prisma etabliert – besonders für Projekte, die auf Edge-Runtimes oder schlanke Bundles angewiesen sind. Die SQL-nahe Syntax, vollständige TypeScript-Inferenz ohne Codegenerierung und das transparente Migrations-Tooling machen es zu einem äußerst soliden Werkzeug. Wer SQL versteht und in TypeScript denkt, wird sich in Drizzle sofort heimisch fühlen.
Häufige Fragen zu Drizzle ORM
- Kann Drizzle ORM auch ohne TypeScript verwendet werden?
- Technisch ja, aber der Hauptvorteil von Drizzle – die vollständige Typ-Inferenz – geht ohne TypeScript verloren. Die Bibliothek ist explizit auf TypeScript-Projekte ausgelegt und entfaltet dort ihren vollen Nutzen.
- Wie verhält sich Drizzle in Cloudflare Workers?
- Drizzle ist vollständig Edge-kompatibel und funktioniert problemlos in Cloudflare Workers, Vercel Edge Functions und Deno Deploy. Da es keine nativen Binaries benötigt, ist kein spezielles Setup nötig.
- Unterstützt Drizzle ORM Transaktionen?
- Ja, Drizzle unterstützt Transaktionen über
db.transaction(async (tx) => { ... }). Innerhalb des Callbacks stehen alle gewohnten Query-Methoden zur Verfügung, gebunden an die laufende Transaktion. - Wie reif ist Drizzle ORM für Produktionseinsatz?
- Drizzle wird in vielen Produktionsprojekten eingesetzt und gilt als stabil. Die API ist seit Version 0.28 weitgehend stabil, und das Team von drizzle.team arbeitet aktiv an Bugfixes und neuen Features. Ein Changelog-Tracking ist empfohlen.