Prisma ORM Configuration

Configure Prisma ORM for type-safe database operations and schema management in MakerKit.

Prisma is configured in the @kit/database package with the schema at packages/database/src/prisma/schema.prisma. The generated client lives in packages/database/src/prisma/generated and is exported via packages/database/src/client.ts for application use.

This guide is part of the Database Configuration documentation.

Prisma Configuration

Understand the Prisma setup in MakerKit.

Package Structure

packages/database/
├── src/
│ ├── prisma/
│ │ ├── schema.prisma # Data model definitions
│ │ ├── migrations/ # Version-controlled migrations
│ │ └── generated/ # Auto-generated Prisma Client
│ ├── client.ts # Exported database client
│ └── index.ts # Package exports
└── package.json

Configuration Files

Schema Definition

The Prisma schema at packages/database/src/prisma/schema.prisma defines:

packages/database/src/prisma/schema.prisma

generator client {
provider = "prisma-client"
output = "./generated"
}
datasource db {
provider = "postgresql"
}
// Models defined below...

Key points:

  • output = "./generated" places the client in the same package for co-location
  • the repo uses prisma.config.ts for schema, migrations, and datasource configuration
  • DATABASE_URL must be set in your environment, or Prisma falls back to the local dev URL defined in packages/database/prisma.config.ts

Client Export

The client is instantiated and exported in packages/database/src/client.ts:

packages/database/src/client.ts

export * from './adapters/postgres';

The actual Prisma client setup lives in packages/database/src/adapters/postgres.ts, where the app creates a singleton PrismaClient using @prisma/adapter-pg.

Database Connection

Configure DATABASE_URL in your environment:

./.env.local

# Local development with Docker
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/postgres"
# Production (example for Neon)
DATABASE_URL="postgresql://user:pass@ep-xxx.us-east-2.aws.neon.tech/dbname?sslmode=require"

Connection string format:

postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public

Common Commands

Run these from the project root:

CommandDescription
pnpm --filter @kit/database prisma:generateRegenerate client after schema changes
pnpm --filter @kit/database prisma:migrateCreate and apply migrations
pnpm --filter @kit/database prisma:studioOpen Prisma Studio GUI at localhost:5555
pnpm --filter @kit/database prisma:pushPush schema without creating migration (dev only)

Expected output for prisma:generate:

Environment variables loaded from .env
Prisma schema loaded from packages/database/src/prisma/schema.prisma
✔ Generated Prisma Client to ./src/prisma/generated

Common Pitfalls

  • Not regenerating after codebase updates - After pulling updates or upgrading MakerKit, run pnpm --filter @kit/database prisma:generate to sync the client with any schema changes
  • Running commands from wrong directory - Always use pnpm --filter @kit/database from the project root, not cd packages/database && pnpm prisma
  • Multiple Prisma Client instances - Causes connection pool exhaustion; use the singleton pattern shown above
  • Editing generated files - Changes are overwritten on next generate; modify schema.prisma instead

Next: Schema Overview →