# Getting started (/docs/accelerate/getting-started)

> 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.

Learn how to get up and running with Prisma Accelerate

Location: Accelerate > Getting started

## Prerequisites [#prerequisites]

To get started with Accelerate, you will need the following:

* A [Prisma Data Platform account](https://console.prisma.io/?utm_source=docs\&utm_medium=content\&utm_content=accelerate)
* A project that uses [Prisma Client](https://www.prisma.io/docs/orm/v7/prisma-client/setup-and-configuration/introduction) `4.16.1` or higher. If your project is using interactive transactions, you need to use `5.1.1` or higher. (We always recommend using the latest version of Prisma.)
* A hosted PostgreSQL, MySQL/MariaDB, PlanetScale, CockroachDB, or MongoDB database

## 1. Enable Accelerate [#1-enable-accelerate]

Navigate to your Prisma Data Platform project, choose an environment, and enable Accelerate by providing your database connection string and selecting the region nearest your database.

> [!NOTE]
> If you require IP allowlisting or firewall configurations with trusted IP addresses, enable Static IP. Learn more on [how to enable static IP for Accelerate in the Platform Console](https://www.prisma.io/docs/accelerate/static-ip).

## 2. Add Accelerate to your application [#2-add-accelerate-to-your-application]

### 2.1. Update your database connection string [#21-update-your-database-connection-string]

Once enabled, you'll be prompted to generate a connection string that you'll use to authenticate requests.

Replace your direct database URL with your new Accelerate connection string.

```bash title=".env"
# New Accelerate connection string with generated API_KEY
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"

# Previous (direct) database connection string
# DATABASE_URL="postgresql://user:password@host:port/db_name?schema=public"
```

Prisma Client reads the `prisma://` URL from `DATABASE_URL` at runtime, while Prisma CLI commands use the connection string defined in `prisma.config.ts`.

Prisma Migrate and Introspection do not work with a `prisma://` connection string. In order to continue using these features add a new variable to the `.env` file named `DIRECT_DATABASE_URL` whose value is the direct database connection string:

```bash title=".env"
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
DIRECT_DATABASE_URL="postgresql://user:password@host:port/db_name?schema=public" # [!code ++]
```

Then point `prisma.config.ts` to the direct connection string:

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

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

Migrations and introspections will use the `directUrl` connection string rather than the one defined in `url` when this configuration is provided.

> `directUrl` is useful for you to carry out migrations and introspections. However, you don't need `directUrl` to use Accelerate in your application.

> [!NOTE]
> If you are using Prisma with PostgreSQL, there is no need for `directUrl`, as Prisma Migrate and Introspection work with the `prisma+postgres://` connection string.

### 2.2. Install the Accelerate Prisma Client extension [#22-install-the-accelerate-prisma-client-extension]

> [!NOTE]
> 💡 Accelerate requires [Prisma Client](https://www.prisma.io/docs/orm/v7/prisma-client/setup-and-configuration/introduction) version `4.16.1` or higher and [`@prisma/extension-accelerate`](https://www.npmjs.com/package/@prisma/extension-accelerate) version `1.0.0` or higher.
> 
> 💡 Accelerate extension [`@prisma/extension-accelerate`](https://www.npmjs.com/package/@prisma/extension-accelerate) version `2.0.0` and above requires Node.js version `18` or higher.

Install the latest version of Prisma Client and Accelerate Prisma Client extension

  

#### bun

```bash
bun add @prisma/client@latest @prisma/extension-accelerate
```

#### pnpm

```bash
pnpm add @prisma/client@latest @prisma/extension-accelerate
```

#### yarn

```bash
yarn add @prisma/client@latest @prisma/extension-accelerate
```

#### npm

```bash
npm install @prisma/client@latest @prisma/extension-accelerate
```

### 2.3. Generate Prisma Client for Accelerate [#23-generate-prisma-client-for-accelerate]

If you're using Prisma version `5.2.0` or greater, Prisma Client will automatically determine how it should connect to the database depending on the protocol in the database connection string. If the connection string in the `DATABASE_URL` starts with `prisma://`, Prisma Client will try to connect to your database using Prisma Accelerate.

When using Prisma Accelerate in long-running application servers, such as a server deployed on AWS EC2, you can generate the Prisma Client by executing the following command:

  

#### bun

```bash
bunx prisma generate
```

#### pnpm

```bash
pnpm dlx prisma generate
```

#### yarn

```bash
yarn dlx prisma generate
```

#### npm

```bash
npx prisma generate
```

When using Prisma Accelerate in a Serverless or an Edge application, we recommend you to run the following command to generate Prisma Client:

  

#### bun

```bash
bunx prisma generate --no-engine
```

#### pnpm

```bash
pnpm dlx prisma generate --no-engine
```

#### yarn

```bash
yarn dlx prisma generate --no-engine
```

#### npm

```bash
npx prisma generate --no-engine
```

The `--no-engine` flag prevents a Query Engine file from being included in the generated Prisma Client, this ensures the bundle size of your application remains small.

> [!WARNING]
> If your Prisma version is below `5.2.0`, generate Prisma Client with the `--accelerate` option:
> 
> 
>   
> 
>   #### bun

>     ```bash
>     bunx prisma generate --accelerate
>     ```
>
> 
>   #### pnpm

>     ```bash
>     pnpm dlx prisma generate --accelerate
>     ```
>
> 
>   #### yarn

>     ```bash
>     yarn dlx prisma generate --accelerate
>     ```
>
> 
>   #### npm

>     ```bash
>     npx prisma generate --accelerate
>     ```
>
> 
> 
> If your Prisma version is below `5.0.0`, generate Prisma Client with the `--data-proxy` option:
> 
> 
>   
> 
>   #### bun

>     ```bash
>     bunx prisma generate --data-proxy
>     ```
>
> 
>   #### pnpm

>     ```bash
>     pnpm dlx prisma generate --data-proxy
>     ```
>
> 
>   #### yarn

>     ```bash
>     yarn dlx prisma generate --data-proxy
>     ```
>
> 
>   #### npm

>     ```bash
>     npx prisma generate --data-proxy
>     ```
>
> 

### 2.4. Extend your Prisma Client instance with the Accelerate extension [#24-extend-your-prisma-client-instance-with-the-accelerate-extension]

Add the following to extend your existing Prisma Client instance with the Accelerate extension:

```ts
import { PrismaClient } from "@prisma/client";
import { withAccelerate } from "@prisma/extension-accelerate";

const prisma = new PrismaClient({
  accelerateUrl: process.env.DATABASE_URL,
}).$extends(withAccelerate());
```

If you are going to deploy to an edge runtime (like Cloudflare Workers, Vercel Edge Functions, Deno Deploy, or Supabase Edge Functions), use our edge client instead:

```ts
import { PrismaClient } from "@prisma/client/edge";
import { withAccelerate } from "@prisma/extension-accelerate";

const prisma = new PrismaClient({
  accelerateUrl: process.env.DATABASE_URL,
}).$extends(withAccelerate());
```

If VS Code does not recognize the `$extends` method, refer to [this section](https://www.prisma.io/docs/accelerate/more/faq#vs-code-does-not-recognize-the-extends-method) on how to resolve the issue.

#### Using the Accelerate extension with other extensions [#using-the-accelerate-extension-with-other-extensions]

Since [extensions are applied one after another](https://www.prisma.io/docs/orm/v7/prisma-client/client-extensions#conflicts-in-combined-extensions), make sure you apply them in the correct order. Extensions cannot share behavior and the last extension applied takes precedence.

If you are using [Query Insights](https://www.prisma.io/docs/query-insights) in your application, make sure you apply it *before* the Accelerate extension. For example:

```ts
const prisma = new PrismaClient({
  accelerateUrl: process.env.DATABASE_URL,
})
  .$extends(withOptimize())
  .$extends(withAccelerate());
```

### 2.5. Use Accelerate in your database queries [#25-use-accelerate-in-your-database-queries]

The `withAccelerate` extension primarily does two things:

* Gives you access to the `cacheStrategy` field within each applicable model method that allows you to define a cache strategy per-query.
* Routes all of your queries through a connection pooler.

#### No cache strategy to only use connection pool [#no-cache-strategy-to-only-use-connection-pool]

To use Accelerate's connection pooling without applying a cache strategy, run your query the same way you would without Accelerate.

By enabling Accelerate and supplying the Accelerate connection string, your queries now use the connection pooler by default.

> [!NOTE]
> As of Prisma version `5.2.0` you can use Prisma Studio with the Accelerate connection string.

#### Invalidate the cache and keep your cached query results up-to-date [#invalidate-the-cache-and-keep-your-cached-query-results-up-to-date]

If your application requires real-time or near-real-time data, cache invalidation ensures that users see the most current data, even when using a large `ttl` (Time-To-Live) or `swr` (Stale-While-Revalidate) [cache strategy](https://www.prisma.io/docs/accelerate/caching). By invalidating your cache, you can bypass extended caching periods to show live data whenever it's needed.

For example, if a dashboard displays customer information and a customer’s contact details change, cache invalidation allows you to refresh only that data instantly, ensuring support staff always see the latest information without waiting for the cache to expire.

To invalidate a cached query result, you can add tags and then use the `$accelerate.invalidate` API.

> [!NOTE]
> On-demand cache invalidation is available with our paid plans. For more details, please see our [pricing](https://www.prisma.io/pricing#accelerate).

To invalidate the query below:

```ts
await prisma.user.findMany({
  where: {
    email: {
      contains: "alice@prisma.io",
    },
  },
  cacheStrategy: {
    swr: 60,
    ttl: 60,
    tags: ["emails_with_alice"], // [!code highlight]
  },
});
```

You need to provide the cache tag in the `$accelerate.invalidate` API:

```ts
try {
  await prisma.$accelerate.invalidate({
    // [!code highlight]
    tags: ["emails_with_alice"], // [!code highlight]
  }); // [!code highlight]
} catch (e) {
  if (e instanceof Prisma.PrismaClientKnownRequestError) {
    // The .code property can be accessed in a type-safe manner
    if (e.code === "P6003") {
      console.log("You've reached the cache invalidation rate limit. Please try again shortly.");
    }
  }
  throw e;
}
```

## Related pages

- [`Caching queries`](https://www.prisma.io/docs/accelerate/caching): Learn everything you need to know to use Accelerate's global database caching
- [`Compare Accelerate`](https://www.prisma.io/docs/accelerate/compare): Learn how Prisma Accelerate compares to other connection poolers like pgbouncer
- [`Connection Pooling`](https://www.prisma.io/docs/accelerate/connection-pooling): Learn about everything you need to know to use Accelerate's connection pooling
- [`Evaluating`](https://www.prisma.io/docs/accelerate/evaluating): Learn about evaluating Prisma Accelerate
- [`Examples`](https://www.prisma.io/docs/accelerate/examples): Check out ready-to-run examples for Prisma Accelerate