Instantiating Prisma Client
1. Creating PrismaClient Instance
import { PrismaClient } from "@prisma/client" ;
export const prisma = new PrismaClient ();
Note Detail
Connection Lazy: opens on first query
Pooling Internal pool (one process)
2. Configuring Client Options
Option Purpose
logLogging config
datasourcesOverride URL per environment
errorFormat"pretty" | "colorless" | "minimal"
transactionOptionsDefault timeout/isolation
3. Using Singleton Pattern
Example: Next.js / Node singleton
import { PrismaClient } from "@prisma/client" ;
const globalForPrisma = globalThis as unknown as { prisma ?: PrismaClient };
export const prisma = globalForPrisma.prisma ?? new PrismaClient ();
if (process.env. NODE_ENV !== "production" ) globalForPrisma.prisma = prisma;
Why Detail
Avoid leaks Hot-reload creates multiple clients otherwise
Connections Re-use pool across modules
4. Managing Development Hot Reload
Framework Approach
Next.js Singleton via globalThis
tsx / nodemon Same singleton works
Bun Use --hot + singleton
Mode Output
prettyColored, multi-line (dev default)
colorlessMulti-line plain
minimalOne-line (prod)
6. Configuring Data Sources
const prisma = new PrismaClient ({
datasources: { db: { url: process.env. READ_REPLICA_URL ! } }
});
Use Detail
Override URL Different DB per tenant/env
Per-request Instantiate scoped client (costly)
7. Using Multiple Client Instances
Pattern Use Case
Per database Microservices reading two DBs
Per tenant Multi-tenant URL switching
Read/write split One client per replica
8. Implementing Lazy Loading
Aspect Detail
Default Connection opens on first query
Force await prisma.$connect() in warm path
9. Handling Client Initialization Errors
Error Cause
PrismaClientInitializationErrorBad URL, binary not found
P1001Can't reach DB
P1002Connection timed out
10. Using Global Prisma Instance
// lib/prisma.ts
import { PrismaClient } from "@prisma/client" ;
export const prisma = (globalThis as any ).prisma ?? new PrismaClient ();
(globalThis as any ).prisma = prisma;
Best Practice Detail
Export from single module Re-import everywhere
Disconnect Gracefully on SIGTERM in servers