# Introduction to Prisma Client (/docs/orm/prisma-client/setup-and-configuration/introduction)

Location: ORM > Prisma Client > Setup and Configuration > Introduction to Prisma Client

Prisma Client is an auto-generated and type-safe query builder that's *tailored* to your data. The easiest way to get started with Prisma Client is by following the **[Quickstart](/prisma-orm/quickstart/sqlite)**.

[Quickstart (5 min)](/prisma-orm/quickstart/sqlite)

Prerequisites [#prerequisites]

In order to set up Prisma Client, you need a Prisma Config and a [Prisma schema file](/orm/prisma-schema/overview):

  

#### Prisma Config

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

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

#### Prisma Schema

```prisma title="schema.prisma" 
datasource db {
  provider = "postgresql"
}

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

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

Installation [#installation]

[Install the Prisma CLI](/orm/reference/prisma-cli-reference), the Prisma Client library, and the [driver adapter](/orm/core-concepts/supported-databases/database-drivers) for your database:

  

#### PostgreSQL

  

  <CodeBlockTab value="npm">
    ```bash
    npm install prisma --save-dev
    npm install @prisma/client @prisma/adapter-pg pg
    ```

#### pnpm

```bash
pnpm add prisma --save-dev
pnpm add @prisma/client @prisma/adapter-pg pg
```

#### yarn

```bash
yarn add prisma --dev
yarn add @prisma/client @prisma/adapter-pg pg
```

#### bun

```bash
bun add prisma --dev
bun add @prisma/client @prisma/adapter-pg pg
```
    
  </CodeBlockTab>

#### MySQL / MariaDB

  

  <CodeBlockTab value="npm">
    ```bash
    npm install prisma --save-dev
    npm install @prisma/client @prisma/adapter-mariadb mariadb
    ```

#### pnpm

```bash
pnpm add prisma --save-dev
pnpm add @prisma/client @prisma/adapter-mariadb mariadb
```

#### yarn

```bash
yarn add prisma --dev
yarn add @prisma/client @prisma/adapter-mariadb mariadb
```

#### bun

```bash
bun add prisma --dev
bun add @prisma/client @prisma/adapter-mariadb mariadb
```
    
  </CodeBlockTab>

#### SQLite

  

  <CodeBlockTab value="npm">
    ```bash
    npm install prisma --save-dev
    npm install @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3
    ```

#### pnpm

```bash
pnpm add prisma --save-dev
pnpm add @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3
```

#### yarn

```bash
yarn add prisma --dev
yarn add @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3
```

#### bun

```bash
bun add prisma --dev
bun add @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3
```
    
  </CodeBlockTab>

> [!NOTE]
> Prisma 7 requires a [driver adapter](/orm/core-concepts/supported-databases/database-drivers) to connect to your database. Make sure your `package.json` includes `"type": "module"` for ESM support. See the [upgrade guide](/guides/upgrade-prisma-orm/v7) for details.

Generate the Client API [#generate-the-client-api]

Prisma Client is based on the models in Prisma Schema. To provide the correct types, you need generate the client code:

  

#### npm

```bash
npx prisma generate
```

#### pnpm

```bash
pnpm dlx prisma generate
```

#### yarn

```bash
yarn dlx prisma generate
```

#### bun

```bash
bunx --bun prisma generate
```

This will create a `generated` directory based on where you set the `output` to in the Prisma Schema. Any time your import Prisma Client, it will need to come from this generated client API.

Importing Prisma Client [#importing-prisma-client]

With the client generated, import it along with your [driver adapter](/orm/core-concepts/supported-databases/database-drivers) and create a new instance:

  

#### PostgreSQL

```ts
import { PrismaClient } from "./path/to/generated/prisma";
import { PrismaPg } from "@prisma/adapter-pg";

const adapter = new PrismaPg({
  connectionString: process.env.DATABASE_URL!,
});

export const prisma = new PrismaClient({ adapter });
```

#### MySQL / MariaDB

```ts
import { PrismaClient } from "./path/to/generated/prisma";
import { PrismaMariaDb } from "@prisma/adapter-mariadb";

const adapter = new PrismaMariaDb({
  host: "localhost",
  user: "root",
  database: "mydb",
});

export const prisma = new PrismaClient({ adapter });
```

#### SQLite

```ts
import { PrismaClient } from "./path/to/generated/prisma";
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";

const adapter = new PrismaBetterSqlite3({
  url: "file:./dev.db",
});

export const prisma = new PrismaClient({ adapter });
```

#### PostgreSQL (Edge)

```ts
import { PrismaClient } from "./path/to/generated/prisma/edge";
import { PrismaPostgresAdapter } from "@prisma/adapter-ppg";

const adapter = new PrismaPostgresAdapter({
  connectionString: process.env.DATABASE_URL!,
});

export const prisma = new PrismaClient({ adapter });
```

> [!WARNING]
> `PrismaClient` requires a driver adapter in Prisma 7. Calling `new PrismaClient()` without an `adapter` will result in an error.

Find out what [driver adapter](/orm/core-concepts/supported-databases/database-drivers) is needed for your database.

Your application should generally only create **one instance** of `PrismaClient`. How to achieve this depends on whether you are using Prisma ORM in a [long-running application](/orm/prisma-client/setup-and-configuration/databases-connections#prismaclient-in-long-running-applications) or in a [serverless environment](/orm/prisma-client/setup-and-configuration/databases-connections#prismaclient-in-serverless-environments).

Creating multiple instances of `PrismaClient` will create multiple connection pools and can hit the connection limit for your database. Too many connections may start to **slow down your database** and eventually lead to errors such as:

```bash
Error in connector: Error querying the database: db error: FATAL: sorry, too many clients already
   at PrismaClientFetcher.request
```

Use Prisma Client to send queries to your database [#use-prisma-client-to-send-queries-to-your-database]

Once you have instantiated `PrismaClient`, you can start sending queries in your code:

```ts
// run inside `async` function
const newUser = await prisma.user.create({
  data: {
    name: "Alice",
    email: "alice@prisma.io",
  },
});

const users = await prisma.user.findMany();
```

Evolving your application [#evolving-your-application]

Whenever you make changes to your database that are reflected in the Prisma schema, you need to manually re-generate Prisma Client to update the generated code in your output directory:

  

#### npm

```bash
npx prisma generate
```

#### pnpm

```bash
pnpm dlx prisma generate
```

#### yarn

```bash
yarn dlx prisma generate
```

#### bun

```bash
bunx --bun prisma generate
```

## Related pages

- [`Configuring error formatting`](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/error-formatting): This page explains how to configure the formatting of errors when using Prisma Client
- [`Custom model and field names`](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/custom-model-and-field-names): Learn how you can decouple the naming of Prisma models from database tables to improve the ergonomics of the generated Prisma Client API
- [`Database connections`](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/databases-connections): Learn how to manage database connections and configure connection pools
- [`Database polyfills`](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/database-polyfills): Prisma Client provides features that are not achievable with relational databases. These features are referred to as "polyfills" and explained on this page.
- [`Generating Prisma Client`](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client): Learn when and how to run prisma generate, configure the generator output, and import the generated client in your app.