install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/TerminalSkills/skills/prisma" ~/.claude/skills/comeonoliver-skillshub-prisma && rm -rf "$T"
manifest:
skills/TerminalSkills/skills/prisma/SKILL.mdsource content
Prisma — Next-Generation TypeScript ORM
You are an expert in Prisma, the TypeScript ORM with a declarative schema, auto-generated type-safe client, migrations, and studio GUI. You help developers model databases with Prisma Schema Language, generate a fully typed client that catches query errors at compile time, run zero-downtime migrations, and integrate with Postgres, MySQL, SQLite, MongoDB, CockroachDB, and PlanetScale.
Core Capabilities
Schema
// prisma/schema.prisma generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id String @id @default(cuid()) email String @unique name String role Role @default(USER) posts Post[] profile Profile? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([email]) @@map("users") } model Post { id String @id @default(cuid()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId String categories Category[] createdAt DateTime @default(now()) @@index([authorId]) @@index([published, createdAt]) } model Profile { id String @id @default(cuid()) bio String? avatar String? user User @relation(fields: [userId], references: [id]) userId String @unique } model Category { id String @id @default(cuid()) name String @unique posts Post[] } enum Role { USER ADMIN MODERATOR }
Queries
import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); // Create with relations const user = await prisma.user.create({ data: { name: "Alice", email: "alice@example.com", profile: { create: { bio: "Developer" } }, posts: { create: [ { title: "First Post", content: "Hello world", published: true }, { title: "Draft", content: "Work in progress" }, ], }, }, include: { posts: true, profile: true }, }); // Complex queries — fully typed const publishedPosts = await prisma.post.findMany({ where: { published: true, author: { role: "ADMIN" }, createdAt: { gte: new Date("2026-01-01") }, }, include: { author: { select: { name: true, email: true } }, categories: true, }, orderBy: { createdAt: "desc" }, take: 20, skip: 0, }); // Aggregate const stats = await prisma.post.aggregate({ _count: true, _avg: { createdAt: true }, where: { published: true }, }); // Transaction const [updatedPost, newNotification] = await prisma.$transaction([ prisma.post.update({ where: { id: "..." }, data: { published: true } }), prisma.notification.create({ data: { userId: "...", message: "Post published!" } }), ]); // Raw SQL when needed const result = await prisma.$queryRaw` SELECT u.name, COUNT(p.id) as post_count FROM users u LEFT JOIN posts p ON p."authorId" = u.id GROUP BY u.name ORDER BY post_count DESC LIMIT 10 `;
Migrations
npx prisma migrate dev --name add-categories # Create + apply migration npx prisma migrate deploy # Apply in production npx prisma db push # Push schema without migration (prototyping) npx prisma studio # GUI for browsing data npx prisma generate # Regenerate client after schema change
Installation
npm install prisma @prisma/client npx prisma init # Creates schema.prisma + .env
Best Practices
- Type-safe queries — Every query is fully typed; wrong field names or types caught at compile time
- Relations — Define in schema with
; query with@relation
orinclude
for eager loadingselect - Migrations — Use
in development;prisma migrate dev
in CI/productionmigrate deploy - Indexes — Add
for fields you filter/sort by; Prisma warns about missing indexes@@index - Select vs Include — Use
to pick specific fields (smaller payloads);select
for full relationsinclude - Transactions — Use
for atomic multi-table operations; auto-rollback on failure$transaction - Connection pooling — Use
or pgbouncer for serverless; Lambda needs poolingprisma-accelerate - Prisma Studio —
for visual data browser; great for debugging and manual editsnpx prisma studio