Drizzle ORM crossed 32K stars and I still think ORM choice barely matters
Query patterns, migration discipline, and connection pooling matter far more than which ORM you choose. The ORM was never the bottleneck.
Drizzle ORM crossed 32,000 GitHub stars and 900,000 weekly npm downloads. The TypeScript ORM discourse is at full volume. Drizzle versus Prisma threads dominate every TypeScript community. Benchmark comparisons proliferate. Migration guides appear weekly. The discourse implies that ORM selection is among the most consequential decisions a TypeScript team makes.
I have shipped production systems on Prisma, Drizzle, and raw SQL. The ORM was never the bottleneck. Not once. Not in any of them.
By this point I cared less about sounding smart and more about making the tradeoff legible. It also builds on what I learned earlier in “Why I run my portfolio site on the same stack I use at work.” The systems had enough history that every database or eventing opinion had receipts behind it. That is the same posture I now bring to longer-lived experiments like ftryos and pipeline-sdk: if the constraint is real, say it plainly and design around it.
What Actually Matters
After fifteen years of database-backed applications and three ORMs in the last two years alone, the things that determine whether your data layer performs well are:
- Query patterns. Do you fetch only the data you need, or do you over-fetch and filter in application code? An N+1 query is an N+1 query regardless of ORM. A missing index is a missing index regardless of ORM.
- Migration discipline. Do migrations run forward-only in production? Are they reviewed by someone who understands PostgreSQL DDL performance implications? Does your migration strategy handle zero-downtime deployments? The ORM generates the migration. The discipline around deploying it is what matters.
- Connection pooling. Are you using PgBouncer or equivalent? Is your pool size tuned for your concurrency model? Do you handle pool exhaustion gracefully? Connection pooling failures produce mysterious timeouts that no ORM can prevent.
- Index strategy. Are your indexes aligned with your actual query patterns, not your imagined query patterns? Do you periodically review slow query logs and adjust? The best ORM in the world cannot compensate for missing indexes.
- Schema design. Are your table relationships modeled for your access patterns? Is your normalization level appropriate for your read/write ratio? Schema design is a permanent decision. ORM choice is a replaceable decision.
The Benchmark Trap
ORM benchmarks measure the wrong thing. They measure query execution time in isolation. In a real application, query execution is typically 10-20% of end-to-end request latency. Network round trips, JSON serialization, middleware, authentication, and application logic dominate the remaining 80-90%.
A benchmark showing that Drizzle executes a SELECT 30% faster than Prisma measures a real difference in a metric that does not materially affect your application performance. If your query takes 2ms instead of 3ms, but your total request takes 150ms, you have saved 0.7% of response time. That is not nothing, but it is not worth a migration.
The benchmarks that would actually matter are the ones nobody publishes: how does each ORM handle connection pool exhaustion? How does each ORM behave when the database is under load? How does each ORM’s migration system handle concurrent schema changes from multiple services? These operational characteristics matter far more than raw query speed, and they are invisible in benchmarks.
When ORM Choice Does Matter
ORM selection is not entirely irrelevant. There are specific contexts where the choice has real consequences:
- Advanced PostgreSQL features. If your application relies heavily on CTEs, window functions, lateral joins, or full-text search, you need an ORM that supports them natively or makes raw SQL ergonomic. Drizzle is stronger here than Prisma.
- Type safety requirements. If your team prioritizes compile-time type safety for queries, the type inference approaches differ meaningfully between Prisma and Drizzle.
- Migration control. If you need fine-grained control over generated DDL, Drizzle’s SQL-first migrations give you more visibility than Prisma’s generated migrations.
- Ecosystem integration. If you are using a framework that has first-class integration with a specific ORM, the integration quality can be a valid tiebreaker.
These are real considerations. They are also secondary to query patterns, indexing, connection pooling, and schema design. Choosing the right ORM for the wrong schema is like choosing the right running shoes for the wrong race.
My Recommendation
This is the phase where individual scars finally turned into repeatable operating principles. I cared less about sounding clever and more about leaving behind a system that stayed sane without me in the room. That is how I build ftryos and pipeline-sdk too.
Use whatever ORM your team already knows. Invest the time you would have spent on an ORM migration into reviewing your query patterns, adding missing indexes, and tuning your connection pool. The return on investment is higher.
If you are starting a new project and genuinely have no preference, pick Drizzle if you want SQL-like ergonomics and fine-grained control, or pick Prisma if you want a higher-level abstraction and a larger ecosystem. Both are production-grade. Both will handle your workload. Neither will be your bottleneck.
The TypeScript ORM debate generates enormous energy for a decision with modest consequences. That energy would be better spent on the decisions that actually determine whether your data layer performs well: schema design, query patterns, indexing strategy, and connection management. Those decisions are harder, less debatable, and far more impactful. They are also less fun to argue about on Twitter, which is exactly why they get less attention than they deserve.
GitHub stars are a signal of community interest, not a signal of production readiness. Drizzle earned its stars through excellent developer experience and type-safe query building, both of which matter. But the ORM choice ranks below database schema design, query optimization, and connection management in the hierarchy of decisions that affect application performance. Teams that spend weeks evaluating ORMs and hours on schema design have their priorities inverted. Pick an ORM that your team can be productive with, invest deeply in understanding your database, and revisit the ORM choice only when it becomes a measurable bottleneck.