Use Prisma Postgres with Bun
-
Create a new project
First, create a directory and initialize it with
bun init.mkdir prisma-postgres-app cd prisma-postgres-app bun init -
Install Prisma dependencies
Then install the Prisma CLI (
prisma), Prisma Client (@prisma/client), and the Postgres driver adapter (@prisma/adapter-pg) as dependencies.bun add -d prisma bun add @prisma/client @prisma/adapter-pg -
Initialize Prisma with PostgreSQL
Use the Prisma CLI with
bunxto initialize the schema and migration directory, with PostgreSQL as the database.bunx --bun prisma init --dbThis creates a basic schema. Update it to use the Rust-free client optimized for Bun: open
prisma/schema.prismaand modify the generator block, then add aUsermodel.generator client { provider = "prisma-client" output = "../generated/prisma" output = "./generated" engineType = "client" runtime = "bun" } datasource db { provider = "postgresql" } model User { id Int @id @default(autoincrement()) email String @unique name String? } -
Configure database connection
Set up your Postgres database URL in the
.envfile.DATABASE_URL="postgresql://username:password@localhost:5432/mydb?schema=public" -
Create and run database migration
Then generate and run the initial migration.
The command writes a
.sqlmigration file toprisma/migrationsand executes it against your Postgres database. Bun does not load.envautomatically when it runs a CLI with--bun. Theprisma.config.tsgenerated byprisma initreadsDATABASE_URLfrom the environment, so pass--env-file=.envexplicitly.bun run --bun --env-file=.env prisma migrate dev --name initLoaded Prisma config from prisma.config.ts. Prisma schema loaded from prisma/schema.prisma. Datasource "db": PostgreSQL database "mydb", schema "public" at "localhost:5432" Applying migration `20250114141233_init` The following migration(s) have been created and applied from new schema changes: prisma/migrations/ └─ 20250114141233_init/ └─ migration.sql Your database is now in sync with your schema. -
Generate Prisma Client
prisma migrate devdoes not generate the Prisma client, so generate it with the Prisma CLI. The client provides a fully typed API for reading and writing to the database.bun run --bun --env-file=.env prisma generate -
Initialize Prisma Client with the Postgres adapter
Create a new file
prisma/db.tsthat initializes the PrismaClient with the Postgres adapter.import { PrismaClient } from "./generated/client"; import { PrismaPg } from "@prisma/adapter-pg"; const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL! }); export const prisma = new PrismaClient({ adapter }); -
Create a test script
Write a script that creates a new user, then counts the users in the database.
import { prisma } from "./prisma/db"; // create a new user await prisma.user.create({ data: { name: "John Dough", email: `john-${Math.random()}@example.com`, }, }); // count the number of users const count = await prisma.user.count(); console.log(`There are ${count} users in the database.`); -
Run and test the application
Run the script with
bun run. Each run creates a new user.bun run index.tsThere are 1 users in the database.bun run index.tsThere are 2 users in the database.bun run index.tsThere are 3 users in the database.
Prisma Postgres is now set up with Bun. Refer to the official Prisma Postgres docs as you continue to develop your application.