Prisma ORM ↗ is a Node.js and TypeScript ORM with a focus on type safety and developer experience. This example demonstrates how to use Prisma ORM with PostgreSQL via Cloudflare Hyperdrive in a Workers application.
- A Cloudflare account with Workers access
- A PostgreSQL database (such as Prisma Postgres ↗)
- A Hyperdrive configuration to your PostgreSQL database
- An existing Worker project
Install Prisma CLI as a dev dependency:
npm
i -D prisma
yarn
add -D prisma
pnpm
add -D prisma
bun
add -d prisma
Install the pg driver and Prisma driver adapter for use with Hyperdrive:
npm
i pg@>8.13.0 @prisma/adapter-pg
yarn
add pg@>8.13.0 @prisma/adapter-pg
pnpm
add pg@>8.13.0 @prisma/adapter-pg
bun
add pg@>8.13.0 @prisma/adapter-pg
If using TypeScript, install the types package:
npm
i -D @types/pg
yarn
add -D @types/pg
pnpm
add -D @types/pg
bun
add -d @types/pg
Add the required Node.js compatibility flags and Hyperdrive binding to your Wrangler configuration file:
{
// required for database drivers to function
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-07-20",
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<your-hyperdrive-id-here>"
}
]
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-07-20"
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"Initialize Prisma in your application:
npx prisma initThis creates a prisma folder with a schema.prisma file and an .env file.
Define your database schema in the prisma/schema.prisma file:
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
createdAt DateTime @default(now())
}Add your database connection string to the .env file created by Prisma:
DATABASE_URL="postgres://user:password@host:port/database"Add helper scripts to your package.json:
"scripts": {
"migrate": "npx prisma migrate dev",
"generate": "npx prisma generate --no-engine",
"studio": "npx prisma studio"
}Generate the Prisma client with driver adapter support:
npm run generateGenerate and apply the database schema:
npm run migrateWhen prompted, provide a name for the migration (for example, init).
Use your Hyperdrive configuration when using Prisma ORM. Update your src/index.ts file:
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "@prisma/client";
export interface Env {
HYPERDRIVE: Hyperdrive;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create Prisma client using driver adapter with Hyperdrive connection string
const adapter = new PrismaPg({ connectionString: env.HYPERDRIVE.connectionString });
const prisma = new PrismaClient({ adapter });
// Sample query to create and fetch users
const user = await prisma.user.create({
data: {
name: "John Doe",
email: `john.doe.${Date.now()}@example.com`,
},
});
const allUsers = await prisma.user.findMany();
return Response.json({
newUser: user,
allUsers: allUsers,
});
},
} satisfies ExportedHandler<Env>;Deploy your Worker:
npx wrangler deploy- Learn more about How Hyperdrive Works.
- Refer to the troubleshooting guide to debug common issues.
- Understand more about other storage options available to Cloudflare Workers.