Runtime
Bundler
Package Manager
Test Runner
Guides
Reference
Blog
Install Bun
Guides 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.