Database
Database Overview
Prisma client, adapters, and the migrate/seed workflow
@repo/database is a Prisma client over PostgreSQL. Local default is Docker Postgres (docker compose up -d postgres), not Neon. Neon is what you use on Cloudflare Workers (and optionally on Vercel).
There are 16 models. Better Auth owns most of them; four are app tables.
| Kind | Models |
|---|---|
| Better Auth core | User, Session, Account, Verification |
| Better Auth plugins | TwoFactor, Organization, Member, Invitation, Team, TeamMember, Subscription, RateLimit |
| App-specific | InviteLink, File, WebhookEvent |
InviteLink is not a Better Auth plugin. Field-by-field: Database Design. Schema: packages/database/prisma/schema.prisma.
Adapters
packages/database/index.ts picks the driver at runtime:
| Runtime | Adapter |
|---|---|
| Node (local Docker, Vercel, Docker image) | PrismaPg (TCP) |
Cloudflare workerd (CF_BUILD / Workers UA) | PrismaNeon — DATABASE_URL must be a Neon pooled (-pooler) endpoint |
Commands
Happy path from the repo root:
pnpm migrate # format + generate + db push
pnpm --filter @repo/database db:seed # wipe (keeps RateLimit), then seedpnpm migrate is not prisma migrate dev. Do not add versioned migrations unless you are changing the kit's workflow.
Seed is blocked when NODE_ENV=production. It does not delete RateLimit rows.
Client import
import { database } from "@repo/database";