Instantiating Prisma Client

1. Creating PrismaClient Instance

import { PrismaClient } from "@prisma/client";
export const prisma = new PrismaClient();
NoteDetail
ConnectionLazy: opens on first query
PoolingInternal pool (one process)

2. Configuring Client Options

OptionPurpose
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;
WhyDetail
Avoid leaksHot-reload creates multiple clients otherwise
ConnectionsRe-use pool across modules

4. Managing Development Hot Reload

FrameworkApproach
Next.jsSingleton via globalThis
tsx / nodemonSame singleton works
BunUse --hot + singleton

5. Setting Error Formatting

ModeOutput
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! } }
});
UseDetail
Override URLDifferent DB per tenant/env
Per-requestInstantiate scoped client (costly)

7. Using Multiple Client Instances

PatternUse Case
Per databaseMicroservices reading two DBs
Per tenantMulti-tenant URL switching
Read/write splitOne client per replica

8. Implementing Lazy Loading

AspectDetail
DefaultConnection opens on first query
Forceawait prisma.$connect() in warm path

9. Handling Client Initialization Errors

ErrorCause
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 PracticeDetail
Export from single moduleRe-import everywhere
DisconnectGracefully on SIGTERM in servers