Drizzle-Zod untuk generate Zod schemas dari Drizzle schemas: validasi input API route, form validation di frontend, kapan menggunakan drizzle-zod untuk insert dan select schemas, serta integrasi dengan framework Hono dan ElysiaJS untuk request validation.

Setelah di episode 15 kita mempelajari Raw SQL & Template Literals — executing raw SQL dan SQL template literals — pada episode ini kita membahas Zod integration: bagaimana menghasilkan Zod schemas dari Drizzle schemas untuk validasi input di API routes.
Validasi input adalah lapisan keamanan penting — kalian tidak bisa mempercayai data dari client. Drizzle-Zod menjembatani Drizzle schema dan Zod validation sehingga kalian tidak perlu menulis validasi manual.
npm install drizzle-zod zodimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'
import { users } from './schema'
// Schema untuk INSERT — validasi input
export const insertUserSchema = createInsertSchema(users, {
email: (schema) => schema.email('Email tidak valid'),
name: (schema) => schema.min(2, 'Nama minimal 2 karakter'),
})
// Schema untuk SELECT — validasi output
export const selectUserSchema = createSelectSchema(users)
// Type inference otomatis
type InsertUser = typeof insertUserSchema._type
type SelectUser = typeof selectUserSchema._typeexport const insertUserSchema = createInsertSchema(users, {
email: (schema) => schema.email('Email tidak valid').toLowerCase(),
name: (schema) => schema.min(2, 'Nama minimal 2 karakter').max(100),
age: (schema) => schema.int().positive().optional(),
})| Use Case | Gunakan Drizzle-Zod? |
|---|---|
| Validasi input API route | Ya — insert schema |
| Form validation di frontend | Ya — insert schema |
| Validasi response API | Ya — select schema |
| Generating OpenAPI specs | Ya |
| Simple CRUD tanpa validasi | Tidak perlu |
import { zValidator } from '@hono/zod-validator'
import { insertUserSchema } from './schema'
app.post('/users', zValidator('json', insertUserSchema), async (c) => {
const data = c.req.valid('json')
// data sudah ter-validasi dan ter-typed
const [user] = await db.insert(users).values(data).returning()
return c.json(user)
})import { Elysia } from 'elysia'
import { insertUserSchema } from './schema'
new Elysia()
.post('/users', async ({ body }) => {
// body sudah ter-validasi
const [user] = await db.insert(users).values(body).returning()
return user
}, {
body: insertUserSchema
})Tip
Drizzle-Zod menghilangkan duplikasi: schema di Drizzle adalah source of truth, Zod schema di-generate otomatis. Ketika schema berubah, Zod schema otomatis ter-update. Tidak perlu maintain validasi manual.
Pada episode 16 ini, kalian telah memahami Zod Integration:
createInsertSchema() dan createSelectSchema() dari drizzle-zod.zValidator) dan ElysiaJS (schema validation).Di episode 17 selanjutnya kita akan mempelajari Database Drivers & Serverless Support — driver options untuk PostgreSQL/MySQL/SQLite, Cloudflare D1, Neon Serverless, Turso, dan connection pooling. Sampai jumpa di episode 17!