ADR: Prisma 7 Migration
Status: Proposed Date: 2026-01-12 Deciders: Architecture Team Related: Prisma Schema Consolidation
Context
Current State
The monorepo uses Prisma 6.x across all packages:
packages/database: 6.16.3apps/miniapp: 6.13.0 (being consolidated)- Other consumers: Various 6.x versions
Prisma 7 Release
Prisma 7.0.0 was released with major breaking changes:
The datasource property `url` is no longer supported in schema files.
Move connection URLs for Migrate to `prisma.config.ts` and pass either
`adapter` for a direct database connection or `accelerateUrl` for
Accelerate to the `PrismaClient` constructor.Breaking Changes in Prisma 7
Datasource URL removal from schema:
prisma# No longer supported in schema.prisma datasource db { provider = "postgresql" url = env("DATABASE_URL") # ❌ Removed }New
prisma.config.tsfile required:typescript// prisma.config.ts import { defineConfig } from 'prisma/config' export default defineConfig({ datasources: { db: { url: process.env.DATABASE_URL, }, }, })PrismaClient constructor changes:
typescript// New pattern for connection import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient({ adapter: myAdapter, // Or accelerateUrl for Accelerate })Migration command changes:
- Migrations now read URL from
prisma.config.ts - Runtime client uses adapter/constructor config
- Migrations now read URL from
Decision
Defer Prisma 7 migration until after schema consolidation is complete.
Rationale
- One Change at a Time: Consolidating schemas first reduces migration surface area
- Stability: Prisma 6.x is stable and working
- Breaking Changes: Prisma 7 requires significant refactoring
- Ecosystem Readiness: Allow time for ecosystem (ORMs, tools) to catch up
Migration Strategy (When Ready)
Prerequisites:
- Schema consolidation complete (single
packages/database) - All consumers using
@emergexyz/db - Test coverage for database operations
- Schema consolidation complete (single
Phase 1: Configuration Migration:
typescript// packages/database/prisma.config.ts import { defineConfig } from 'prisma/config' export default defineConfig({ earlyAccess: true, datasources: { db: { url: process.env.DATABASE_URL, }, }, })Phase 2: Schema Update:
prisma# Remove url from datasource datasource db { provider = "postgresql" # url removed - now in prisma.config.ts }Phase 3: Client Update:
- Update PrismaClient instantiation pattern
- Test all database operations
- Update any direct Prisma CLI usage
Phase 4: Dependency Update:
json{ "dependencies": { "@prisma/client": "^7.0.0", "prisma": "^7.0.0" } }
Consequences
Positive (of deferring)
- Reduced Risk: Consolidation is lower risk than version upgrade
- Incremental Progress: Can validate consolidation before adding complexity
- Team Bandwidth: Focus on one migration at a time
Negative (of deferring)
- Technical Debt: Staying on older version temporarily
- Missing Features: Prisma 7 improvements not available yet
Prisma 7 Benefits (when migrated)
- Better Configuration: TypeScript config file
- Improved Adapters: Better support for serverless/edge
- Performance: Various runtime improvements
- Type Safety: Enhanced type inference
Timeline
| Phase | Description | Target |
|---|---|---|
| 1 | Schema Consolidation | January 2026 |
| 2 | Prisma 7 Migration | February 2026 |
| 3 | Adapter Optimization | March 2026 |
