Getting started
Prerequisites
To get started with Accelerate, you will need the following:
- A GitHub account.
- A project that uses Prisma Client
4.16.1or higher. If your project is using interactive transactions, you need to use5.1.1or higher. (We always recommend using the latest version of Prisma.) - A hosted PostgreSQL, MySQL, PlanetScale, CockroachDB, or MongoDB database.
1. Enable Accelerate in a project
In order to enable Accelerate, you can log in to Prisma Data Platform and create a new project. Follow the instructions in the UI to add Accelerate.
At the end of the setup process, you'll obtain a connection string that connects to Accelerate. This connection string also contains an API key that you need to use when configuring Prisma Client to use Accelerate.
2. Use Accelerate in your application
To get started using Accelerate, we recommend using the latest version of Prisma ORM.
2.1. Update your database connection string
After enabling Accelerate in your project and creating a new API key, you should be given an Accelerate connection string.
To use this connection string, update the datasource block's url field in your Prisma schema:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
Most likely, as shown above, your database connection string in defined in a .env file rather than hard-coded into the schema file.
Update that variable to use the new Accelerate connection string:
# __API_KEY__ is a unique API key that Accelerate generates and automatically assigns to a project.
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
# Previous connection string
# DATABASE_URL="postgresql://user:password@host:port/db_name?schema=public"
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:
As of Prisma version 5.2.0 you can use Prisma Studio with the Accelerate connection string.
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
DIRECT_DATABASE_URL="postgresql://user:password@host:port/db_name?schema=public"
Then in your Prisma schema's datasource block add a field named directUrl with the following:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = 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.
directUrlis useful for you to carry out migrations and introspections. However, you don't needdirectUrlto use Accelerate in your application.
2.2. Install the Accelerate Prisma Client extension
Run the following command to install the Accelerate extension for Prisma Client:
npm install @prisma/extension-accelerate
2.3. 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:
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:
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.
If your Prisma version is below 5.2.0, generate Prisma Client with the --accelerate option:
npx prisma generate --accelerate
If your Prisma version is below 5.0.0, generate Prisma Client with the --data-proxy option:
2.4. Extend your Prisma Client instance to add the Accelerate extension
To use Accelerate, you must extend Prisma Client with the Accelerate extension. Extend your Prisma Client instance to add the Accelerate extension:
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
If you are going to deploy to an edge runtime (like Cloudflare Workers, Vercel Edge Functions, Deno Deploy, or Netlify Edge Functions), use our edge client instead:
import { PrismaClient } from '@prisma/client/edge'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
If VS Code does not recognize the $extends method, refer to this section on how to resolve the issue.
If you are using Prisma Middleware in your application, make sure they are added before any Prisma Client extensions (like Accelerate). For example:
const prisma = new PrismaClient().$use(middleware).$extends(withAccelerate())
2.5. Use Accelerate in your database queries
The withAccelerate extension primarily does two things:
- Gives you access to the
cacheStrategyfield 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
If you simply want to take advantage of Accelerate's connection pooling feature without applying a cache strategy, you may run your query the same way you would have without Accelerate.
By enabling Accelerate and supplying the Accelerate connection string, your queries now use the connection pooler by default.
Define a cache strategy
Update a query with the new cacheStrategy property which allows you to define a cache strategy for that specific query:
const user = await prisma.user.findMany({
where: {
email: {
contains: 'alice@prisma.io',
},
},
cacheStrategy: { swr: 60, ttl: 60 },
})
In the example above, swr: 60 and ttl: 60 means Accelerate will serve cached data for 60 seconds and then another 60 seconds while Accelerate fetches fresh data in the background.
You should now see improved performance for your cached queries.
For information about which strategy best serves your application, see Select a cache strategy.