# 🔍 Mengenal Drizzle ORM: Alternatif Prisma dan pg yang Ringan dan Type-Safe

Dalam dunia pengembangan aplikasi Node.js, developer biasanya dihadapkan pada pilihan tools untuk berinteraksi dengan database PostgreSQL. Tiga nama populer saat ini adalah:

* [Prisma](https://www.prisma.io/)
    
* [`pg`](https://node-postgres.com/) (alias node-postgres)
    
* [Drizzle ORM](https://orm.drizzle.team/)
    

**Drizzle** adalah pendatang baru, tapi mulai menarik perhatian karena ringan, cepat, dan *type-safe* tanpa banyak magic. Mari kita bahas dan bandingkan ketiganya.

---

## 🧱 1. Apa itu Drizzle?

> **Drizzle ORM** adalah ORM modern untuk TypeScript yang memanfaatkan *type inference* dari definisi schema secara langsung di kode TypeScript-mu. Ia memberikan pengalaman seperti Prisma, tetapi lebih dekat ke SQL dan tidak bergantung pada runtime generator atau query engine tersendiri.

---

## 📊 Perbandingan Drizzle vs Prisma vs pg

| Fitur | 🧪 Drizzle ORM | 🎯 Prisma ORM | 🧱 node-postgres (`pg`) |
| --- | --- | --- | --- |
| Bahasa | TypeScript | TypeScript | JavaScript/TypeScript |
| Type Safety | ✅ Sangat bagus | ✅ Sangat bagus | ❌ Manual |
| Pendekatan ORM | SQL-like builder | Abstraksi tinggi | Raw SQL |
| Auto migration | 🟡 Terbatas (`drizzle-kit`) | ✅ Lengkap | ❌ Manual |
| Query Performance | ✅ Cepat & langsung ke DB | 🟡 Kadang lambat (pakai query engine) | ✅ Cepat |
| Bundle size (client) | ✅ Kecil | ❌ Besar (banyak dep) | ✅ Ringan |
| Query Runtime | ✅ SQL langsung | ❌ Query engine terpisah | ✅ SQL langsung |
| Belajar dari awal | 🟢 Mudah untuk dev SQL-savvy | 🟢 Mudah secara umum | 🔴 Sulit (butuh raw SQL) |
| Kompatibilitas serverless | ✅ Cocok | 🟡 Hati-hati (masalah cold start) | ✅ Aman |

---

## 💻 Contoh Kode

### 1\. Drizzle (PostgreSQL)

```ts
// schema.ts
import { pgTable, serial, text } from 'drizzle-orm/pg-core';

export const users = pgTable('users', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
});

// query
const usersList = await db.select().from(users);
```

### 2\. Prisma

```typescript
// schema.prisma
model User {
  id    Int    @id @default(autoincrement())
  name  String
}

// query
const users = await prisma.user.findMany();
```

### 3\. pg (node-postgres)

```ts
const client = new Client();
await client.connect();

const res = await client.query('SELECT * FROM users');
const users = res.rows;
```

---

## 🚀 Kapan Pakai Masing-Masing?

| Use Case | Rekomendasi |
| --- | --- |
| Butuh kontrol penuh, suka SQL | ✅ Drizzle atau pg |
| Pengin productivity dan auto-gen | ✅ Prisma |
| Ingin bundle kecil (misal di Edge) | ✅ Drizzle |
| Legacy project atau full raw SQL | ✅ pg |
| Butuh relasi kompleks & dokumentasi lengkap | ✅ Prisma |

---

## 🔍 Keunggulan Drizzle

* ✅ *Zero-runtime*: Tidak ada kode aneh saat build atau generate.
    
* ✅ Sangat ringan dan cepat untuk deploy di Edge/serverless.
    
* ✅ Tipe langsung dari schema, tanpa generate tambahan.
    
* ✅ Migration cukup dari CLI `drizzle-kit`.
    

---

## ⚠️ Keterbatasan Drizzle

* 🟡 Masih baru, ekosistem belum seluas Prisma.
    
* 🟡 Belum mendukung banyak fitur advanced seperti Prisma relation resolver atau middleware bawaan.
    
* 🟡 Tidak ada “visual Studio” atau dashboard UI.
    

---

## 💬 Kesimpulan

Drizzle cocok untuk:

* Developer yang mengutamakan kecepatan, ringan, dan kontrol SQL.
    
* Project modern dengan kebutuhan bundle kecil, serverless, atau Edge.
    
* Pengganti Prisma untuk proyek yang mulai “terlalu berat”.
    

Prisma cocok untuk:

* Developer yang suka productivity tinggi dengan fitur seperti `prisma studio`, relasi otomatis, dan banyak plugin.
    
* Tim besar yang butuh dokumentasi dan kontrol data modeling visual.
    

pg cocok untuk:

* Developer expert SQL, atau saat ingin performa maksimal tanpa ORM sama sekali.
    

---

## 🛠 Rekomendasi Praktek

| Kebutuhan | Tools Ideal |
| --- | --- |
| Fullstack dengan Next.js | **Drizzle + Neon + Vercel** |
| Aplikasi skala besar | **Prisma + PostgreSQL** |
| Tool CLI / bot sederhana | **pg langsung** |

---
