Skip to main content
Prisma’s dynamic subcommand loading requires npm to be installed alongside Bun. This affects CLI commands such as prisma init and prisma migrate. Generated code works with Bun using the prisma-client generator.
1

Create a new project

Create a directory and initialize it with bun init.
terminal
mkdir prisma-app
cd prisma-app
bun init
2

Install Prisma dependencies

Then install the Prisma CLI (prisma), Prisma Client (@prisma/client), and the LibSQL adapter as dependencies.
terminal
bun add -d prisma
bun add @prisma/client @prisma/adapter-libsql
3

Initialize Prisma with SQLite

Use the Prisma CLI with bunx to initialize the schema and migration directory. This guide uses an in-memory SQLite database.
terminal
bunx --bun prisma init --datasource-provider sqlite
This creates a basic schema. Open prisma/schema.prisma, update the generator block to use the Rust-free client with the bun runtime, and add a User model.
https://mintcdn.com/bun-1dd33a4e/nIz6GtMH5K-dfXeV/icons/ecosystem/prisma.svg?fit=max&auto=format&n=nIz6GtMH5K-dfXeV&q=85&s=c37203455320f85a20a7b29ce374661cprisma/schema.prisma
  generator client {
    provider = "prisma-client"
    output = "./generated"
    engineType = "client"
    runtime = "bun"
  }

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

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

Create and run database migration

Generate and run the initial migration. This writes a .sql migration file to prisma/migrations, creates a new SQLite database, and runs the migration against it.
terminal
 bunx --bun prisma migrate dev --name init
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": SQLite database "dev.db" at "file:./dev.db"

SQLite database dev.db created at file:./dev.db

Applying migration `20251014141233_init`

The following migration(s) have been created and applied from new schema changes:

prisma/migrations/
 └─ 20251014141233_init/
   └─ migration.sql

Your database is now in sync with your schema.

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

Generate Prisma Client

As the output indicates, Prisma re-generates the Prisma client whenever you run a new migration. The client provides a fully typed API for reading and writing to your database. You can also re-generate it manually with the Prisma CLI.
terminal
bunx --bun prisma generate
6

Initialize Prisma Client with LibSQL

Create a new file prisma/db.ts that initializes the PrismaClient with the LibSQL adapter.
https://mintcdn.com/bun-1dd33a4e/JUhaF6Mf68z_zHyy/icons/typescript.svg?fit=max&auto=format&n=JUhaF6Mf68z_zHyy&q=85&s=7ac549adaea8d5487d8fbd58cc3ea35bprisma/db.ts
import { PrismaClient } from "./generated/client";
import { PrismaLibSQL } from "@prisma/adapter-libsql";

const adapter = new PrismaLibSQL({ url: process.env.DATABASE_URL || "" });
export const prisma = new PrismaClient({ adapter });
7

Create a test script

Write a script that creates a new user, then counts the users in the database.
https://mintcdn.com/bun-1dd33a4e/JUhaF6Mf68z_zHyy/icons/typescript.svg?fit=max&auto=format&n=JUhaF6Mf68z_zHyy&q=85&s=7ac549adaea8d5487d8fbd58cc3ea35bindex.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.`);
8

Run and test the application

Run the script with bun run. Each run creates a new user.
terminal
bun run index.ts
Created john-0.12802932895402364@example.com
There are 1 users in the database.
terminal
bun run index.ts
Created john-0.8671308799782803@example.com
There are 2 users in the database.
terminal
bun run index.ts
Created john-0.4465968383115295@example.com
There are 3 users in the database.

Prisma is now set up with Bun. See the Prisma docs as you build out your application.