NestJS Prisma Setup
Use this workflow to install or repair Prisma in a NestJS backend with reproducible verification.
Scope and outcomes
- Add Prisma CLI and client dependencies.
- Initialize
prisma/schema.prismaandprisma.config.tswith SQLite defaults. - Wire a reusable
PrismaServiceand globalPrismaModulefor Nest DI. - Run migrations and client generation.
- Verify runtime read/write behavior through application endpoints.
Preflight checks (required)
- Confirm repository contains Nest bootstrap files (
src/main.tsand app module). - Detect package manager from lockfile:
package-lock.json-> npmpnpm-lock.yaml-> pnpmyarn.lock-> yarn
- Confirm Node runtime compatibility for installed Nest/Prisma versions.
- If Prisma already exists, do repair mode only (preserve existing schema/models unless user requests schema rewrite).
Install dependencies
Run commands from repository root using the detected package manager.
npm
npm install --save-dev prisma dotenv
npm install @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3
npm install @nestjs/config
pnpm
pnpm add -D prisma dotenv
pnpm add @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3
pnpm add @nestjs/config
yarn
yarn add -D prisma dotenv
yarn add @prisma/client @prisma/adapter-better-sqlite3 better-sqlite3
yarn add @nestjs/config
Notes:
- Install
@nestjs/configonly if not already present. - Keep
prismaand@prisma/clienton the same major version.
Initialize Prisma
Run from repository root using the selected package manager runner:
npx prisma init --datasource-provider sqlite --output ../src/libs/prisma/generated
Equivalent runners are acceptable (pnpm prisma init, yarn prisma init) if they produce the same files.
Expected outputs:
prisma/schema.prismaprisma.config.ts.env(merge entries if file already exists)
Configure schema and Prisma config
- Apply generator and datasource scaffolding from reference.md.
- Keep datasource URL in
prisma.config.tswhen using driver adapters. - For CommonJS projects, set
moduleFormat = "cjs". - For NodeNext/ESM projects, keep generator/module settings and emitted
.jsimport paths aligned. - Add or preserve project models in
prisma/schema.prisma.
Add Prisma runtime integration
- Create or repair files from reference.md:
src/libs/prisma/prisma.service.tssrc/libs/prisma/prisma.module.ts
PrismaServicerequirements:- Extend generated
PrismaClient. - Inject
ConfigServiceand readDATABASE_URL. - Construct
PrismaBetterSqlite3adapter and passsuper({ adapter }). - Implement
OnModuleInitandOnModuleDestroy. - Optionally run startup
VACUUMwith non-fatal failure handling.
- Extend generated
- Enforce constructor safety: do not access
thisbeforesuper(). - Do not use
this.$on('beforeExit', ...)with driver adapters.
Wire Nest module graph
- Ensure
ConfigModule.forRoot({ isGlobal: true })exists inAppModule(or equivalent bootstrap config). - Import
PrismaModuleintoAppModule. - Keep
PrismaModuleglobal so feature modules can injectPrismaServicewithout repeated imports.
Environment configuration
For SQLite, ensure .env contains:
DATABASE_URL="file:./dev.db"
Use an absolute path when runtime cwd differs from project root. Keep .env excluded from source control when required by repository policy.
Migrations and client generation
After schema changes:
npx prisma migrate dev --name init
npx prisma generate
Optional scripts:
"prisma:generate": "prisma generate",
"prisma:migrate": "prisma migrate dev"
Verification gates (required)
- Start application (
npm run start:devor project equivalent). - Confirm no Prisma connection or adapter initialization errors at startup.
- Execute at least one read and one write path through endpoints/services that inject
PrismaService. - Confirm generated client artifacts exist under
src/libs/prisma/generated. - Confirm migration files and SQLite db file are created as expected.
- If NodeNext/ESM is enabled, confirm runtime imports resolve with emitted
.jsextensions.
Repair mode guidance
Use this when Prisma already exists but is broken:
- Reconcile
prismaand@prisma/clientmajor versions. - Verify
prisma.config.tsdatasource URL is present and points toDATABASE_URL. - Fix incorrect generated client import paths (CJS vs ESM mismatch).
- Remove unsupported
beforeExithook usage for adapter-based clients. - Re-run
prisma generateand app startup verification gates.
Checklist
- Detect package manager and execute matching commands
- Install Prisma dependencies and
@nestjs/configwhen needed - Initialize Prisma with SQLite provider and generated client output path
- Configure
schema.prismaandprisma.config.ts - Add or repair
PrismaServiceandPrismaModule - Wire
ConfigModuleandPrismaModulein app module graph - Run migrations and generate client
- Verify runtime read/write behavior and generated artifacts
- Validate ESM/CJS alignment when applicable
Additional resources
- Full implementation snippets: reference.md
- Usage pattern examples: examples.md
- NestJS Prisma recipe
- Prisma CLI init reference
- Prisma driver adapters