Skip to main content

Use Drizzle as the ORM for the application

· 2 min read

We decided to use Drizzle ORM as the Object-Relational Mapping tool for our backend services.

Why did we make this decision?

  • Type safety: Drizzle provides fully type-safe SQL query building and result inference using TypeScript.
  • No magic abstraction: Unlike other ORMs (e.g., TypeORM or Prisma), Drizzle exposes SQL-like APIs, making the generated queries predictable and transparent.
  • Better DX for modern TypeScript: Its design aligns well with modern ESM-based TypeScript projects.
  • Migration system integrated with schema: Drizzle supports SQL migrations tied directly to the defined schema, reducing mismatch between code and database.
  • Lightweight and modular: Drizzle has a small footprint and minimal runtime dependencies, which is suitable for microservices and serverless environments.
  • First-class Postgres support: Excellent support for PostgreSQL, including support for UUIDs, enums, and JSON fields.
  • 🛠️ Built-in support for edge-runtimes: Works well with edge-native runtimes like Vercel Edge Functions, Cloudflare Workers, or Hono.

What is the impact?

  • 💡 Improves developer productivity with autocompletion and early type errors.
  • 📉 Reduces runtime bugs caused by mismatches between SQL and TypeScript types.
  • 🧠 Easier onboarding for developers familiar with SQL and TypeScript.
  • ⚠️ Requires some manual setup (e.g., migration scripts and configuration), compared to "zero-config" ORMs like Prisma.
  • ⚠️ Smaller ecosystem and community compared to Prisma or Sequelize (fewer plugins and tutorials).

What’s next?

  • 👤 Responsibility: The backend lead (e.g., @andrz3j) will be responsible for integrating Drizzle into the API layer.
  • Timeline: Basic setup (database schema, migration system, and initial repositories) should be completed by [insert deadline here].
  • 📦 Next actions:
    • Configure database connections.
    • Define domain models using Drizzle schemas.
    • Implement repository interfaces and unit tests.
    • Integrate migrations with CI/CD pipeline.