0% found this document useful (0 votes)
27 views

How to use Prisma ORM with Turborepo _ Prisma Documentation

This guide explains how to integrate Prisma ORM with a Turborepo monorepo, detailing the steps to set up Prisma, manage database configurations, and share types across multiple applications. It covers creating a database package, initializing Prisma, generating types, and importing the database package into a web app. Additionally, it provides instructions for setting up scripts and running the project in development, ensuring a modular and scalable architecture.

Uploaded by

artemvasylenko26
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

How to use Prisma ORM with Turborepo _ Prisma Documentation

This guide explains how to integrate Prisma ORM with a Turborepo monorepo, detailing the steps to set up Prisma, manage database configurations, and share types across multiple applications. It covers creating a database package, initializing Prisma, generating types, and importing the database package into a web app. Additionally, it provides instructions for setting up scripts and running the project in development, ensuring a modular and scalable architecture.

Uploaded by

artemvasylenko26
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

Guides Framework Guides

How to use Prisma ORM with Turborepo


15 min

Prisma is a powerful ORM for managing databases, and Turborepo simplifies monorepo
workflows. By combining these tools, you can create a scalable, modular architecture for
your projects.

This guide will show you how to set up Prisma as a standalone package in a Turborepo
monorepo, enabling efficient configuration, type sharing, and database management
across multiple apps.

What you'll learn:

How to set up Prisma in a Turborepo monorepo.


Steps to generate and reuse PrismaClient across packages.
Integrating the Prisma package into other applications in the monorepo.

NOTE
This guide was tested using Turborepo version 2.3.3 and Prisma ORM version
6.1.0 .

1. Create your monorepo using turborepo


To set up a Turborepo monorepo named hello-world , run the following command:

$ npx create-turbo@latest hello-world

After the setup, choose a package manager for the project. Navigate to the project root
directory and install Turborepo as a development dependency:

npm yarn pnpm

$ cd ./hello-world
$ npm install turbo --save-dev Ask AI
https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 1/8
17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

For more information about installing Turborepo, refer to the official Turborepo guide .

2. Add a new database package to the hello-world


monorepo
Create a database package within the packages directory. Then, create a package.json
file for the package by running:

$ cd packages/
$ mkdir database
$ cd database
$ touch package.json

Define the package.json file as follows:

{
"name": "@repo/db",
"version": "0.0.0"
}

Next, install the required dependencies to use Prisma ORM. Use your preferred package
manager:

npm yarn pnpm

$ npm install prisma --save-dev


$ npm install @prisma/client

3. Initialize prisma by running prisma init


Inside the database directory, initialize prisma by running:

npm yarn pnpm

$ npx prisma init

This should create several files inside packages/database :

schema.prisma is where your Prisma schema lives. Here, you'll be able to modify the
shape of your database. The prisma init command by default will create a

https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 2/8
17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

configuration for PostgreSQL to be used. You can modify the schema to use any other
supported database by Prisma ORM.
.gitignore adds some ignored files to git
.env lets you manually specify your DATABASE_URL for prisma.

WARNING
Make sure to replace the DATABASE_URL inside packages/database/.env with a
valid database url.

Add a model to your Prisma schema in database/prisma/schema.prisma :

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

generator client {
provider = "prisma-client-js"
output = "../generated/client"
}

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

The importance of generating Prisma types in a custom directory

In the schema.prisma file, we specify a custom output path where Prisma will generate
its types. This ensures Prisma's types are resolved correctly across different package
managers.

In this guide, the types will be generated in the database/generated/client


directory.

4. Create scripts to execute Prisma CLI commands


Let's add some scripts to the package.json inside packages/database :

https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 3/8
17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

{
"scripts": {
"db:generate": "prisma generate",
"db:migrate": "prisma migrate dev --skip-generate",
"db:deploy": "prisma migrate deploy"
}
}

Let's also add these scripts to turbo.json in the root:

{
"tasks": {
"db:generate": {
"cache": false
},
"db:migrate": {
"cache": false,
"persistent": true // This is necessary to interact with the CLI and assi
},
"db:deploy": {
"cache": false
}
}
}

1. Migrate your prisma.schema and generate types

Navigate to the project root and run the following command to automatically migrate our
database:

npm yarn pnpm

$ npx turbo db:migrate

2. Generate your prisma.schema

To generate the types from Prisma schema, from the project root run:

npm yarn pnpm

$ npx turbo db:generate

https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 4/8
17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

5. Export prisma types and an instance of PrismaClient


to be used across the monorepo
Next, export the generated types and an instance of PrismaClient so it can used in your
applications.

In the packages/database directory, create a src folder and add a client.ts file. This
file will define an instance of PrismaClient :

packages/database/src/client.ts

import { PrismaClient } from "../generated/client";

const globalForPrisma = global as unknown as { prisma: PrismaClient };

export const prisma =


globalForPrisma.prisma || new PrismaClient();

if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;

Then create an index.ts file in the src folder to re-export the generated prisma types
and the PrismaClient instance:

packages/database/src/index.ts

export { prisma } from './client' // exports instance of prisma


export * from "../generated/client" // exports generated types from prisma

Follow the Just-in-Time packaging pattern and create an entrypoint to the package
inside packages/database/package.json :

{
"exports": {
".": "./src/index.ts"
}
}

By completing these steps, you'll make the Prisma types and PrismaClient instance
accessible throughout the monorepo.

6. Importing the database package into the web app in


the monorepo

https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 5/8
17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

The hello-world project should have an app called web at apps/web . Add the database
dependency to apps/web/package.json :

npm yarn pnpm

{
"dependencies": {
"@repo/db": "*"
}
}

Run your package manager's install command inside the apps/web directory:

npm yarn pnpm

$ cd apps/web
$ npm install

Let's import the intantiated prisma client from the database package in the web app in
the page.tsx file:

import styles from "./page.module.css";


import { prisma } from "@repo/db";

export default async function Home() {


const user = await prisma.user.findFirst()
return (
<div className={styles.page}>
{user?.name ?? "No user added yet"}
</div>
);
}

Then create a .env file in the web directory and copy of the contents of the .env file in
the database directory containing the DATABASE_URL .:

DATABASE_URL="Same database url as used in the database directory"

NOTE
If you want to use a single .env file in the root directory across your apps and
packages in a Turborepo setup, consider using a package like dotenvx .

https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 6/8
17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

To implement this, update the package.json files for each package or app to
ensure they load the required environment variables from the shared .env file. For
detailed instructions, refer to the dotenvx guide for Turborepo .

Keep in mind that Turborepo


recommends using separate .env files for each package to promote modularity
and avoid potential conflicts.

7. Setup dependent tasks


The db:generate and db:deploy scripts are not yet optimized for the monorepo setup but
are essential for the dev and build tasks.

If a new developer runs turbo dev on an application without first running db:generate ,
they will encounter errors.

To prevent this, ensure that db:generate is always executed before running dev or
build . Additionally, make sure both db:deploy and db:generate are executed before
db:build . Here's how to configure this in your turbo.json file:

{
"tasks": {
"dev": {
"dependsOn": ["^db:generate"],
"cache": false
// Additional configuration for dev tasks
},
"build": {
"dependsOn": ["^db:generate"],
// Additional configuration for build tasks
}
}
}

8. Run the project in development

WARNING
Before starting the development server, note that if you are using Next.js v15.2.0,
do not use Turbopack as there is a known issue . Remove Turbopack from your
dev script by updating your apps/web/package.json

apps/web/package.json

https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 7/8
17/03/2025, 02:28 How to use Prisma ORM with Turborepo | Prisma Documentation

"script":{
- "dev": "next dev --turbopack --port 3000",
+ "dev": "next dev --port 3000",
}

Then from the project root run the project:

npm yarn pnpm

$ npx turbo run dev --filter=web

Navigate to the http://localhost:3000 and you should see the message:

No user added yet

NOTE
You can add users to your database by creating a seed script or manually by using
Prisma Studio.

To use Prisma Studio to add manually data via a GUI, navigate inside the
packages/database directory and run prisma studio using your package
manager:

npm yarn pnpm

$ npx prisma studio

This command starts a server with a GUI at http://localhost:5555 , allowing you to


view and modify your data.

Congratulations, you're done setting up Prisma for Turborepo!

Tags: Turborepo Monorepo Vercel

Edit this page on GitHub

https://www.prisma.io/docs/guides/turborepo#1-create-your-monorepo-using-turborepo 8/8

You might also like