Next.js + Prisma Combo Skill
SkillDev toolsUse when working on a Next.js App Router project that uses Prisma as the ORM — covers server component data fetching, singleton client setup, and type-safe query patterns.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Next.js + Prisma Combo Skill skill
What this skill tells your AI
The instructions your AI receives, as published by drvoss/everything-copilot-cli in skills/development/nextjs-prisma/SKILL.md and read by ahel’s review.
When to Use
- Setting up Prisma in a new Next.js App Router project
- Reviewing or refactoring data-fetching logic in Server Components
- Debugging Prisma client instantiation issues (hot-reload client explosion)
- Implementing type-safe CRUD operations across Server Actions and API routes
Workflow
1. Singleton Client Setup
Ensure Prisma client is instantiated only once across hot reloads:
Next.js version note: The
globalcache pattern below is recommended for Next.js 13/14. In Next.js 15 (with React 19), module-level singletons are stable across hot reloads — you can useexport const prisma = new PrismaClient(...)directly inlib/prisma.ts.
// lib/prisma.ts (Next.js 13/14 pattern)
import { PrismaClient } from "@prisma/client"
const globalForPrisma = global as unknown as { prisma: PrismaClient }
export const prisma =
globalForPrisma.prisma ??
new PrismaClient({
log: process.env.NODE_ENV === "development" ? ["query", "error"] : ["error"],
})
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma
2. Data Fetching in Server Components
// app/users/page.tsx
import { prisma } from "@/lib/prisma"
export default async function UsersPage() {
// Runs on the server — safe to use Prisma directly
const users = await prisma.user.findMany({
select: { id: true, name: true, email: true },
orderBy: { createdAt: "desc" },
})
return <UserList users={users} />
}
3. Server Actions with Prisma
// app/users/actions.ts
"use server"
import { prisma } from "@/lib/prisma"
import { revalidatePath } from "next/cache"
export async function createUser(data: { name: string; email: string }) {
await prisma.user.create({ data })
revalidatePath("/users")
}
4. Avoiding Common Pitfalls
- Never import
prismain"use client"components — it will fail at runtime - Use
prisma.$transaction()when a page requires multiple dependent writes - Apply
selectto limit fields — avoid sending sensitive columns to the client - Run
prisma generateafter every schema change before running the dev server
5. Environment Setup Checklist
# 1. Install
pnpm add prisma @prisma/client
pnpm prisma init
# 2. Add DATABASE_URL to .env
# 3. Define schema in prisma/schema.prisma
# 4. Run first migration
pnpm prisma migrate dev --name init
# 5. Generate client
pnpm prisma generate
Rules Applied
rules/frameworks/nextjs.md— App Router, Server Components, environment variablesrules/frameworks/prisma.md— schema design, singleton client, query safetyrules/common/security.md— secrets management, input validation
Signals
- GitHub stars
- 46
- Forks
- 11
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
nextjs-prisma- Source
- github.com/drvoss/everything-copilot-cli