# Prisma ORM (/docs/orm)

> For the complete Prisma documentation index, see [llms.txt](https://www.prisma.io/docs/llms.txt). A markdown version of any docs page is available by appending `.md` to its URL.

Prisma ORM is a next-generation Node.js and TypeScript ORM that provides type-safe database access, migrations, and a visual data editor.

Location: Prisma ORM

Prisma ORM is [open-source](https://github.com/prisma/prisma) and consists of:

* [**Prisma Client**](https://www.prisma.io/docs/orm/prisma-client): Auto-generated, type-safe **ORM interface**
* [**Prisma Migrate**](https://www.prisma.io/docs/orm/prisma-migrate): Database migration system
* [**Prisma Studio**](https://www.prisma.io/studio): GUI to view and edit your data

Prisma Client works with any Node.js or TypeScript backend, whether you're deploying to traditional servers, serverless functions, or microservices.

> [!NOTE]
> Try Prisma Next
> 
> Prisma Next is the next major version of Prisma ORM, available now in Early Access. Start with the [Prisma Next getting started guide](https://www.prisma.io/docs/next) and share feedback in [Discord](https://pris.ly/discord?utm_source=docs\&utm_medium=inline_text). This section documents Prisma 7, the current generally available release.

## Get started [#get-started]

- [Quickstart](https://www.prisma.io/docs/prisma-orm/quickstart/prisma-postgres): Prisma ORM 7 with Prisma Postgres in about 5 minutes.

- [Add to an existing project](https://www.prisma.io/docs/prisma-orm/add-to-existing-project/postgresql): Introspect your database and start querying with Prisma ORM 7.

- [Prisma Next docs](https://www.prisma.io/docs/orm/next): The Early Access docs for the next major version.

Working with a coding agent? Copy the prompt below, or start from the [getting started page](https://www.prisma.io/docs) for the full stack.

```text
Add Prisma ORM 7 to this project with my existing database.

If I have not given you a database connection string and none exists in the project, stop and ask.

1. Run `npx prisma@latest init` (Prisma 7). For an existing database, set DATABASE_URL in `.env` and introspect it with `npx prisma db pull`; for a new schema, define models in `prisma/schema.prisma` and run `npx prisma migrate dev --name init`. If migrate dev asks to reset the database, stop and ask me first.
2. Install the driver adapter for the database (Prisma 7 requires one), e.g. `npm install @prisma/adapter-pg` for PostgreSQL, and pass it to `new PrismaClient({ adapter })`. Generate the client with `npx prisma generate` and write one query in an existing code path.
3. Run the query (e.g. with `npx tsx`) and show me the output, the schema, and the query you added.

Current docs: https://www.prisma.io/docs/orm.md and https://www.prisma.io/docs/llms.txt.
```

## Why Prisma ORM [#why-prisma-orm]

Traditional database tools force a tradeoff between **productivity** and **control**. Raw SQL gives full control but is error-prone and lacks type safety. Traditional ORMs improve productivity but abstract too much, leading to the [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch) and performance pitfalls like the n+1 problem.

Prisma takes a different approach:

* **Type-safe queries** validated at compile time with full autocompletion
* **Thinking in objects** without the complexity of mapping relational data
* **Plain JavaScript objects** returned from queries, not complex model instances
* **Single source of truth** in the Prisma schema for database and application models
* **Healthy constraints** that prevent common pitfalls and anti-patterns

## When to use Prisma [#when-to-use-prisma]

**Prisma is a good fit if you:**

* Build server-side applications (REST, GraphQL, gRPC, serverless)
* Value type safety and developer experience
* Work in a team and want a clear, declarative schema
* Need migrations, querying, and data modeling in one toolkit

**Consider alternatives if you:**

* Need full control over every SQL query (use raw SQL drivers)
* Want a no-code backend (use a BaaS like Supabase or Firebase)
* Need an auto-generated CRUD GraphQL API (use Hasura or PostGraphile)

## How it works [#how-it-works]

### 1. Define your schema [#1-define-your-schema]

The [Prisma schema](https://www.prisma.io/docs/orm/prisma-schema/overview) defines your data models and database connection:

```prisma
datasource db {
  provider = "postgresql"
}

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

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  published Boolean @default(false)
  author    User?   @relation(fields: [authorId], references: [id])
  authorId  Int?
}
```

### 2. Configure your connection [#2-configure-your-connection]

Create a `prisma.config.ts` file in your project root:

```ts title="prisma.config.ts"
import "dotenv/config";
import { defineConfig, env } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  migrations: {
    path: "prisma/migrations",
  },
  datasource: {
    url: env("DATABASE_URL"),
  },
});
```

### 3. Run migrations [#3-run-migrations]

Use [Prisma Migrate](https://www.prisma.io/docs/orm/prisma-migrate) to create and apply migrations:

  

#### bun

```bash
bunx prisma migrate dev
```

#### pnpm

```bash
pnpm dlx prisma migrate dev
```

#### yarn

```bash
yarn dlx prisma migrate dev
```

#### npm

```bash
npx prisma migrate dev
```

Or [introspect](https://www.prisma.io/docs/orm/prisma-schema/introspection) an existing database:

  

#### bun

```bash
bunx prisma db pull
```

#### pnpm

```bash
pnpm dlx prisma db pull
```

#### yarn

```bash
yarn dlx prisma db pull
```

#### npm

```bash
npx prisma db pull
```

### 4. Query with Prisma Client [#4-query-with-prisma-client]

Generate and use the type-safe client:

  

#### bun

```bash
bun add @prisma/client
bunx prisma generate
```

#### pnpm

```bash
pnpm add @prisma/client
pnpm dlx prisma generate
```

#### yarn

```bash
yarn add @prisma/client
yarn dlx prisma generate
```

#### npm

```bash
npm install @prisma/client
npx prisma generate
```

```ts
import { PrismaClient } from "./generated/client";
// Import the driver adapter for your specific database (example uses PostgreSQL)
import { PrismaPg } from "@prisma/adapter-pg";

// Initialize the adapter according to your driver's requirements
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });

// Pass the adapter instance to PrismaClient
const prisma = new PrismaClient({ adapter });

// Find all users with their posts
const users = await prisma.user.findMany({
  include: { posts: true },
});

// Create a user with a post
const user = await prisma.user.create({
  data: {
    email: "alice@prisma.io",
    posts: {
      create: { title: "Hello World" },
    },
  },
});
```

> [!NOTE]
> Prisma 7 Connection Requirements
> 
> Starting with **Prisma 7**, providing a [driver adapter](https://www.prisma.io/docs/orm/core-concepts/supported-databases/database-drivers) is mandatory for direct database connections. This change standardizes database connectivity across Node.js, Serverless, and Edge environments.
> 
> If you use Prisma Accelerate, instantiate Prisma Client with `accelerateUrl` and the Accelerate extension instead of a driver adapter.
> 
> To ensure compatibility:
> 
> * **Install an adapter:** Use the specific package for your database (e.g., `@prisma/adapter-pg`, `@prisma/adapter-mysql`, etc.).
> * **Enable ESM:** Your `package.json` must include `"type": "module"`.
> 
> For detailed instructions, see the [V7 Upgrade Guide](https://www.prisma.io/docs/guides/upgrade-prisma-orm/v7).

## Next steps [#next-steps]

* [**Prisma schema**](https://www.prisma.io/docs/orm/prisma-schema/overview) - Learn the schema language
* [**Prisma Client**](https://www.prisma.io/docs/orm/prisma-client) - Explore the query API

## Related pages

- [`Build faster with Prisma + AI`](https://www.prisma.io/docs/ai): Build faster with Prisma and AI coding tools like Cursor, Codex, and ChatGPT
- [`CLI Overview`](https://www.prisma.io/docs/cli): The Prisma CLI is the command-line interface for Prisma ORM. Use it to initialize projects, generate Prisma Client, manage databases, run migrations, and more
- [`Console`](https://www.prisma.io/docs/console): Learn how to use the Console to manage and integrate Prisma products into your application.
- [`Guides`](https://www.prisma.io/docs/guides): A collection of guides for various tasks and workflows
- [`Introduction to Prisma Next`](https://www.prisma.io/docs/next): Prisma Next is the next major version of Prisma ORM, available in Early Access.