// the find
drizzle-team/drizzle-orm
ORM
Drizzle is a TypeScript-first ORM that stays close to SQL rather than abstracting it away. It targets developers who want type-safe query building without giving up control over the actual SQL being generated, and works across Postgres, MySQL, and SQLite including serverless/edge environments.
- Type inference is genuinely good — schema definitions produce precise TypeScript types for query results, including nullable columns and joined tables, without requiring codegen steps.
- Zero dependencies and ~7.4kb gzipped makes it viable in edge runtimes and Cloudflare Workers where most ORMs would balloon bundle size or break entirely.
- The query builder maps closely to SQL concepts (joins, CTEs, window functions, on conflict) so the generated SQL is predictable and debuggable — no surprise N+1s hiding behind magic.
- drizzle-kit handles schema migrations with a diff-based approach that generates plain SQL files you can inspect and commit, which is much more trustworthy in production than auto-apply tools.
- The relational query API (db.query.*) and the SQL-like query API are two separate mental models that overlap in confusing ways — new users frequently hit the docs trying to understand why there are two ways to do everything.
- Complex multi-table update/delete with joins is either unsupported or requires dropping to raw SQL depending on the dialect, which you'll only discover when you actually need it.
- drizzle-kit is a separate package with its own versioning and the two fall out of sync regularly; mismatched versions between drizzle-orm and drizzle-kit cause cryptic errors that dominate GitHub issues.
- No built-in support for database-level features like row-level security policies, event triggers, or stored procedures — if your schema uses any of these, migrations will silently ignore them.