Prisma Config reference
Overview
This feature is currently in Early Access and still subject to change.
The prisma.config.ts
file configures the Prisma CLI, including subcommands like migrate
and studio
, using TypeScript. You can define your config in two ways:
Using the defineConfig
helper:
import path from 'node:path';
import { defineConfig } from 'prisma/config';
export default defineConfig({
earlyAccess: true,
schema: path.join('prisma', 'schema.prisma'),
});
Or using TypeScript's satisfies
operator with the PrismaConfig
type:
import path from 'node:path';
import type { PrismaConfig } from 'prisma'
export default {
earlyAccess: true,
schema: path.join('prisma', 'schema.prisma'),
} satisfies PrismaConfig
Configuration interface
export declare type PrismaConfig<Env extends EnvVars = never> = {
/**
* Whether features with an unstable API are enabled.
*/
earlyAccess: true;
/**
* The path to the schema file or path to a folder that shall be recursively searched for .prisma files.
*/
schema?: string;
/**
* The configuration for Prisma Studio.
*/
studio?: PrismaStudioConfigShape<Env>;
/**
* The configuration for Prisma Migrate + Introspect
*/
migrate?: PrismaMigrateConfigShape<Env>;
};
Options reference
earlyAccess
- Type:
boolean
- Required: Yes (during Early Access)
- Default: none
Controls whether the config file is enabled. Must be set to true
during Early Access.
migrate
- Type:
object
- Required: No
- Default:
{}
Configures how Prisma Migrate communicates with your underlying database. See sub-options below for details.
migrate.adapter
- Type:
(env: Env) => Promise<SqlMigrationAwareDriverAdapterFactory>
- Required: No
- Default: none
A function that returns a Prisma driver adapter instance which is used by the Prisma CLI to run migrations. The function receives an env
parameter containing environment variables and should return a Promise
that resolves to a valid Prisma driver adapter.
Example using the Prisma ORM D1 driver adapter:
import path from 'node:path'
import type { PrismaConfig } from 'prisma'
import { PrismaD1HTTP } from '@prisma/adapter-d1'
// import your .env file
import 'dotenv/config'
type Env = {
CLOUDFLARE_D1_TOKEN: string
CLOUDFLARE_ACCOUNT_ID: string
CLOUDFLARE_DATABASE_ID: string
}
export default {
earlyAccess: true,
schema: path.join('prisma', 'schema.prisma'),
migrate: {
async adapter(env) {
return new PrismaD1HTTP({
CLOUDFLARE_D1_TOKEN: env.CLOUDFLARE_D1_TOKEN,
CLOUDFLARE_ACCOUNT_ID: env.CLOUDFLARE_ACCOUNT_ID,
CLOUDFLARE_DATABASE_ID: env.CLOUDFLARE_DATABASE_ID,
})
},
},
} satisfies PrismaConfig<Env>
schema
- Type:
string
- Required: No
- Default:
./prisma/schema.prisma
and./schema.prisma
Configures how Prisma ORM locates and loads your schema file(s). Can be a file or folder path. Relative paths are resolved relative to the prisma.config.ts
file location. See here for more info about schema location options.
studio
- Type:
object
- Required: No
- Default: none
Configures how Prisma Studio connects to your database.
studio.adapter
- Type:
(env: Env) => Promise<SqlMigrationAwareDriverAdapterFactory>
- Required: No
- Default: none
A function that returns a Prisma driver adapter instance. The function receives an env
parameter containing environment variables and should return a Promise
that resolves to a valid Prisma driver adapter.
Example using the Prisma ORM LibSQL driver adapter:
import type { PrismaConfig } from 'prisma'
export default {
earlyAccess: true,
studio: {
adapter: async (env: Env) => {
const { PrismaLibSQL } = await import('@prisma/adapter-libsql')
const { createClient } = await import('@libsql/client')
const libsql = createClient({
url: env.DOTENV_PRISMA_STUDIO_LIBSQL_DATABASE_URL,
})
return new PrismaLibSQL(libsql)
},
},
} satisfies PrismaConfig
Common patterns
Setting up your project
To get started with Prisma Config, create a prisma.config.ts
file in your project root. You can use either of these approaches:
Using defineConfig
:
import { defineConfig } from 'prisma/config'
export default defineConfig({
earlyAccess: true
})
Using TypeScript types:
import type { PrismaConfig } from 'prisma'
export default {
earlyAccess: true
} satisfies PrismaConfig
Using environment variables
When using prisma.config.ts
, environment variables from .env
files are not automatically loaded. You'll need to:
- Install the
dotenv
package:
npm install dotenv
- Import
dotenv/config
in your config file:
import 'dotenv/config'
import type { PrismaConfig } from 'prisma'
export default {
earlyAccess: true,
// now you can use process.env variables
} satisfies PrismaConfig
Using multi-file schemas
If you want to split your Prisma schema into multiple files, you need to specify the path to your Prisma schema folder via the schema
property:
import path from 'node:path';
import type { PrismaConfig } from 'prisma'
export default {
earlyAccess: true,
schema: path.join('prisma', 'schema'),
} satisfies PrismaConfig
In that case, your migrations
directory must be located next to the .prisma
file that defines the datasource
block.
For example, assuming schema.prisma
defines the datasource
, here's how how need to place the migrations folder:
# `migrations` and `schema.prisma` are on the same level
.
├── migrations
├── models
│ ├── posts.prisma
│ └── users.prisma
└── schema.prisma
Custom config location
You can specify a custom location for your config file when running Prisma CLI commands:
prisma validate --config ./path/to/myconfig.ts