RuntimePackage ManagerBundlerTest RunnerLinterFormatterGuidesReferenceBlogFeedback

Use Prisma Postgres with Bun

  1. 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
    
  2. Install Prisma dependencies

    Then install the Prisma CLI (prisma), Prisma Client (@prisma/client), and the Postgres driver adapter (@prisma/adapter-pg) as dependencies.

    terminal
    bun add -d prisma
    bun add @prisma/client @prisma/adapter-pg
    
  3. 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/prisma" // [!code --]
    	output = "./generated" // [!code ++]
    	engineType = "client" // [!code ++]
    	runtime = "bun" // [!code ++]
    }
    
    datasource db {
    	provider = "postgresql"
    }
    
    model User { // [!code ++]
    	id    Int     @id @default(autoincrement()) // [!code ++]
    	email String  @unique // [!code ++]
    	name  String? // [!code ++]
    } // [!code ++]
    
  4. Configure database connection

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

    .env
    DATABASE_URL="postgresql://username:password@localhost:5432/mydb?schema=public"
    
  5. 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. Bun does not load .env automatically when it runs a CLI with --bun. The prisma.config.ts generated by prisma init reads DATABASE_URL from the environment, so pass --env-file=.env explicitly.

    terminal
    bun run --bun --env-file=.env prisma migrate dev --name init
    
    Text
    Loaded 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.
    
  6. Generate Prisma Client

    prisma migrate dev does 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.

    terminal
    bun run --bun --env-file=.env prisma generate
    
  7. Initialize Prisma Client with the Postgres adapter

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

    prisma/db.ts
    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 });
    
  8. 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.`);
    
  9. Run and test the application

    Run the script with bun run. Each run creates a new user.

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