Prisma
Prisma 6 ORM with PostgreSQL and typed JSONB support.
Overview
Adds Prisma 6 configured for PostgreSQL with the @prisma/adapter-pg driver adapter. Provides the database layer that other modules build on.
Prerequisites
None.
Installation
npx ds-start init my-app --prismaWhat It Adds
prisma/schema.prisma— Base schema with User modelprisma.config.ts— Prisma configurationlib/prisma.ts— Database client singletongenerated/prisma/— Generated Prisma client
Environment Variables
| Variable | Description |
|---|---|
DATABASE_URL | PostgreSQL connection string |
Usage
Database client
The client uses a global singleton pattern to avoid creating multiple connections in development:
import "dotenv/config"
import { PrismaPg } from "@prisma/adapter-pg"
import { PrismaClient } from "@/generated/prisma/client"
const connectionString = process.env.DATABASE_URL
if (!connectionString) {
throw new Error("DATABASE_URL is not set")
}
const globalForPrisma = globalThis as typeof globalThis & {
prisma?: PrismaClient
}
function createPrismaClient() {
const adapter = new PrismaPg({ connectionString })
return new PrismaClient({ adapter })
}
export const prisma = globalForPrisma.prisma ?? createPrismaClient()
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma
}Prisma config
import "dotenv/config"
import { defineConfig, env } from "prisma/config"
export default defineConfig({
schema: "prisma/schema.prisma",
migrations: { path: "prisma/migrations" },
datasource: { url: env("DATABASE_URL") },
})Querying data
import { prisma } from "@/lib/prisma"
// In a server component or API route
const users = await prisma.user.findMany()
const user = await prisma.user.findUnique({ where: { id: "..." } })Scripts
bun run db:generate # Generate Prisma client
bun run db:push # Push schema to database
bun run db:migrate # Run migrations
bun run db:studio # Open Prisma Studio