Kadak
Framework Guides

Next.js

Use KadakORM in App Router with stable connections and safe mutations.

Next.js

Problem: hot reload can create too many DB connections in development.

Solution: cache one KadakORM client on globalThis.

lib/db.ts

import { connect } from '@shyk/kadak-orm'
import { users } from '@/lib/schema'

const tables = { users }

const globalForDb = globalThis as unknown as {
  db?: ReturnType<typeof connect>
}

export const db = globalForDb.db ?? connect('postgres://postgres:postgres@localhost:5432/kadak_demo', tables)

if (process.env.NODE_ENV !== 'production') {
  globalForDb.db = db
}

Read in a server component

import { db } from '@/lib/db'

export default async function UsersPage() {
  const users = await db.users.findMany({ $limit: 20, $order: { createdAt: 'desc' } })
  return <pre>{JSON.stringify(users, null, 2)}</pre>
}

Validate in a server action

'use server'

import { db } from '@/lib/db'
import { users } from '@/lib/schema'

export async function createUserAction(payload: unknown) {
  const parsed = users.insertValidator().safeParse(payload)
  if (!parsed.success) return { ok: false, error: parsed.error.flatten() }

  await db.users.insert(parsed.data)
  return { ok: true }
}

On this page