Use Prisma with Bun
- Create a new project
Create a directory and initialize it with
bun init.terminalmkdir prisma-app cd prisma-app bun init - Install Prisma dependencies
Then install the Prisma CLI (
prisma), Prisma Client (@prisma/client), and the LibSQL adapter as dependencies.terminalbun add -d prisma bun add @prisma/client @prisma/adapter-libsql - Initialize Prisma with SQLite
Use the Prisma CLI with
bunxto initialize the schema and migration directory. This guide uses a local SQLite database file.prisma initwrites its connection string,DATABASE_URL="file:./dev.db", to.env.terminalbunx --bun prisma init --datasource-provider sqliteThis creates a basic schema. Open
prisma/schema.prisma, update the generator block to use the Rust-free client with thebunruntime, and add aUsermodel.prisma/schema.prisma
generator client { provider = "prisma-client" output = "../generated/prisma" // [!code --] output = "./generated" // [!code ++] engineType = "client" // [!code ++] runtime = "bun" // [!code ++] } datasource db { provider = "sqlite" } model User { // [!code ++] id Int @id @default(autoincrement()) // [!code ++] email String @unique // [!code ++] name String? // [!code ++] } // [!code ++] - Create and run database migration
Generate and run the initial migration. The command writes a
.sqlmigration file toprisma/migrations, creates a new SQLite database, and runs the migration against it. 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.terminalbun run --bun --env-file=.env prisma migrate dev --name initTextLoaded Prisma config from prisma.config.ts. 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. - 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 your database.terminalbun run --bun --env-file=.env prisma generate - Initialize Prisma Client with LibSQL
Create a new file
prisma/db.tsthat initializes the PrismaClient with the LibSQL adapter.prisma/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 }); - 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.terminalbun run index.tsTextThere are 1 users in the database.terminalbun run index.tsTextThere are 2 users in the database.terminalbun run index.tsTextThere are 3 users in the database.
Prisma is now set up with Bun. See the Prisma docs as you build out your application.