Skip to content
Bun
Bun
Ecosystem & Frameworks

Use Prisma Postgres with Bun

Prisma needs Node.js to run certain generation code, so make sure Node.js is installed in the environment where you run bunx prisma commands.

Create a new project

First, create a directory and initialize it with bun init.

terminal
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 accelerate extension as dependencies.

terminal
bun add -d prisma
bun add @prisma/client @prisma/extension-accelerate

Initialize Prisma with PostgreSQL

Use the Prisma CLI with bunx to initialize the schema and migration directory, with PostgreSQL as the database.

terminal
bunx --bun prisma init --db

This creates a basic schema. Update it to use the Rust-free client optimized for Bun: open prisma/schema.prisma and modify the generator block, then add a User model.

prisma/schema.prisma
generator client {
	provider = "prisma-client"
	output = "./generated"
	engineType = "client"
	runtime = "bun"
}

datasource db {
	provider = "postgresql"
	url      = env("DATABASE_URL")
}

model User { 
	id    Int     @id @default(autoincrement()) 
	email String  @unique
	name  String?
} 

Configure database connection

Set up your Postgres database URL in the .env file.

.env
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 .sql migration file to prisma/migrations and executes it against your Postgres database.

terminal
bunx --bun prisma migrate dev --name init
Environment variables loaded from .env
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.

✔ Generated Prisma Client (6.17.1) to ./generated in 18ms

Generate Prisma Client

As the output shows, Prisma re-generates the Prisma client whenever you run a new migration. The client provides a fully typed API for reading and writing to the database. To re-generate the client manually, use the Prisma CLI.

terminal
bunx --bun prisma generate

Initialize Prisma Client with Accelerate

Create a new file prisma/db.ts that initializes the PrismaClient with the Postgres adapter.

prisma/db.ts
import { PrismaClient } from "./generated/client";
import { withAccelerate } from '@prisma/extension-accelerate'

export const prisma = new PrismaClient().$extends(withAccelerate())

Create a test script

Write a script that creates a new user, then counts the users in the database.

index.ts
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.

terminal
bun run index.ts
There are 1 users in the database.
terminal
bun run index.ts
There are 2 users in the database.
terminal
bun run index.ts
There 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.

Was this page helpful?Suggest editsRaise issue