Skip to main content

Overview

While generator configuration is primarily defined in your Prisma schema files, the prisma.config.ts file influences how generators are executed and where their output is located.

Schema-Based Generator Configuration

Generators are defined in your Prisma schema file (.prisma):
generator client {
  provider = "prisma-client-js"
  output   = "./generated/client"
}

Configuration File Integration

Schema Location

The schema configuration option determines where Prisma looks for generator definitions:
import { defineConfig } from '@prisma/config'

export default defineConfig({
  schema: './prisma/schema.prisma'
})

Multiple Schema Files

When using multiple schema files, generators can be defined in any of the files:
import { defineConfig } from '@prisma/config'

export default defineConfig({
  schema: './prisma/schemas' // Directory containing multiple .prisma files
})
Example schema structure:
prisma/schemas/
├── schema.prisma        # Contains models
└── generators.prisma    # Contains generator definitions
generators.prisma:
generator client {
  provider = "prisma-client-js"
  output   = "../generated/client"
}

generator json {
  provider = "prisma-json-types-generator"
}

Common Generator Configurations

Prisma Client (TypeScript)

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

Prisma Client (JavaScript - Legacy)

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

Multiple Generators

generator client {
  provider = "prisma-client"
}

generator dbml {
  provider = "prisma-dbml-generator"
  output   = "../docs"
}

generator erd {
  provider = "prisma-erd-generator"
  output   = "../erd.svg"
}

Generator Options

provider

Specifies which generator to use.
provider
string
required
The generator provider. Can be:
  • Built-in: "prisma-client", "prisma-client-js"
  • npm package: "prisma-dbml-generator"
  • Local path: "./my-generator"
generator client {
  provider = "prisma-client"
}

output

Defines where generated files are written.
output
string
Path to the output directory. Can be absolute or relative to the schema file.
generator client {
  provider = "prisma-client"
  output   = "./generated/client"
}
Default: node_modules/.prisma/client

previewFeatures

Enables preview features for the generator.
previewFeatures
string[]
Array of preview feature names to enable.
generator client {
  provider        = "prisma-client"
  previewFeatures = ["typedSql", "views"]
}

binaryTargets

Specifies which binary platforms to generate for.
binaryTargets
string[]
List of platform identifiers for binary compilation targets.
generator client {
  provider      = "prisma-client-js"
  binaryTargets = ["native", "debian-openssl-3.0.x"]
}
Common values:
  • "native" - Current platform
  • "debian-openssl-3.0.x"
  • "debian-openssl-1.1.x"
  • "linux-musl-openssl-3.0.x"
  • "rhel-openssl-3.0.x"
  • "darwin", "darwin-arm64"
  • "windows"
The new prisma-client generator uses WebAssembly and doesn’t require binary targets in most cases.

engineType

Specifies the query engine type (legacy generator only).
engineType
'library' | 'binary'
generator client {
  provider   = "prisma-client-js"
  engineType = "library"
}
  • "library" - Node-API library (default)
  • "binary" - Standalone binary
The new prisma-client generator uses WebAssembly and doesn’t use this option.

Path Resolution

Relative Paths

Generator output paths are resolved relative to the schema file location:
// prisma.config.ts
export default defineConfig({
  schema: './prisma/schema.prisma'
})
// prisma/schema.prisma
generator client {
  provider = "prisma-client"
  output   = "../generated/client" // Resolves to ./generated/client
}

Absolute Paths

generator client {
  provider = "prisma-client"
  output   = "/absolute/path/to/client"
}

Running Generators

Generate Command

Run all configured generators:
prisma generate
With custom config location:
prisma generate --config ./custom/prisma.config.ts

Watch Mode

prisma generate --watch

Specific Generator

Generate only a specific generator:
prisma generate --generator client

Custom Generators

Using npm Packages

Install and configure third-party generators:
npm install prisma-dbml-generator
generator dbml {
  provider = "prisma-dbml-generator"
  output   = "../docs/dbml"
}

Local Generator

generator custom {
  provider = "node ./my-generator.js"
  output   = "./generated"
}

Generator Registry

Prisma 7 includes a generator registry for managing multiple generators. This is automatically handled by the CLI.

Configuration

Generators are automatically registered when defined in your schema:
generator client {
  provider = "prisma-client"
}

generator types {
  provider = "prisma-json-types-generator"
}
Both generators will be executed when you run prisma generate.

Environment-Specific Configuration

You can use environment variables in generator configuration:
import { defineConfig, env } from '@prisma/config'
import 'dotenv/config'

const isProduction = env('NODE_ENV') === 'production'

export default defineConfig({
  schema: isProduction 
    ? './prisma/schema.production.prisma'
    : './prisma/schema.prisma'
})

TypedSQL Configuration

Enable the TypedSQL preview feature:
generator client {
  provider        = "prisma-client"
  previewFeatures = ["typedSql"]
}
Configure the TypedSQL directory in prisma.config.ts:
import { defineConfig } from '@prisma/config'

export default defineConfig({
  typedSql: {
    path: './prisma/queries'
  }
})
Directory structure:
prisma/
├── schema.prisma
└── queries/
    ├── getUserById.sql
    └── searchUsers.sql

Views Configuration

Enable views preview feature:
generator client {
  provider        = "prisma-client"
  previewFeatures = ["views"]
}
Configure the views directory:
import { defineConfig } from '@prisma/config'

export default defineConfig({
  views: {
    path: './prisma/views'
  }
})
Directory structure:
prisma/
├── schema.prisma
└── views/
    ├── active_users.sql
    └── user_statistics.sql

Common Patterns

Monorepo Setup

// apps/api/prisma.config.ts
import { defineConfig } from '@prisma/config'
import path from 'node:path'

export default defineConfig({
  schema: './prisma/schema.prisma'
})
// apps/api/prisma/schema.prisma
generator client {
  provider = "prisma-client"
  output   = "../../packages/database/generated"
}

Separate Dev and Prod Schemas

import { defineConfig, env } from '@prisma/config'
import 'dotenv/config'

const environment = env('NODE_ENV')

export default defineConfig({
  schema: `./prisma/schema.${environment}.prisma`
})

Multiple Database Projects

project/
├── prisma-postgres.config.ts
├── prisma-mysql.config.ts
├── postgres/
│   └── schema.prisma
└── mysql/
    └── schema.prisma
prisma generate --config prisma-postgres.config.ts
prisma generate --config prisma-mysql.config.ts

Troubleshooting

Generator Not Found

Error:
Generator "client" not found
Solutions:
  1. Verify the generator is defined in your schema file
  2. Check the schema path in prisma.config.ts
  3. Ensure the schema file has a .prisma extension

Output Path Errors

Error:
Cannot write to output directory
Solutions:
  1. Check file permissions on the output directory
  2. Verify the output path is correct
  3. Ensure parent directories exist

Binary Target Issues

Error:
Query engine binary not found for platform
Solution: Add the correct binary target:
generator client {
  provider      = "prisma-client-js"
  binaryTargets = ["native", "debian-openssl-3.0.x"]
}
The new prisma-client generator uses WebAssembly and should not have binary target issues.

Best Practices

1. Use Relative Paths

// ✅ Good: Portable across environments
generator client {
  provider = "prisma-client"
  output   = "../generated/client"
}

// ❌ Bad: Hardcoded absolute path
generator client {
  provider = "prisma-client"
  output   = "/Users/john/project/generated/client"
}

2. Organize Generators in Separate File

prisma/
├── models/
│   ├── user.prisma
│   └── post.prisma
└── generators.prisma  # All generator configs here

3. Document Custom Generator Options

// Generator for creating DBML documentation
// Run with: prisma generate --generator dbml
generator dbml {
  provider = "prisma-dbml-generator"
  output   = "../docs/database"
}

4. Use Preview Features Explicitly

generator client {
  provider        = "prisma-client"
  previewFeatures = ["typedSql", "views"] // Explicit is better
}