This guide is for engineers, architects, and operators who need to understand how Prisma ORM is built, how its pieces fit together, how to operate it across environments, and how to contribute to or reason about the codebase itself. It complements the User Guide, which focuses on day-to-day usage.
Prisma is distributed as a pnpm monorepo containing the prisma CLI, the @prisma/client runtime, the Prisma Migrate engine wrappers, the client generators, and a family of database driver adapters. The data-modeling and migration intelligence is implemented in Rust engines that the TypeScript layer drives over a defined protocol.
Table of Contents
- Executive Summary
- Architecture Overview
- Repository Structure
- Component Inventory
- The Schema Engine & DMMF
- Driver Adapters
- Configuration Reference
- Operations
- Security
- Code Patterns & Conventions
- Testing Strategy
- Potential Improvements & Tech Debt
- Contributing
- Quick Reference
1. Executive Summary
| Aspect | Detail |
|---|---|
| What it is | A type-safe ORM toolkit for Node.js/TypeScript: schema modeling, migrations, and a generated query client. |
| License | Apache 2.0. |
| Distribution | npm packages: prisma (CLI) and @prisma/client (runtime), plus @prisma/adapter-* driver adapters. |
| Repository | A pnpm + Turborepo monorepo (pnpm-workspace.yaml, turbo.json) with ~30 published packages and many internal/test packages. |
| Core implementation | TypeScript orchestration layer over Rust engines (schema engine, query/DMMF). The client is generated from the DMMF. |
| Supported databases | PostgreSQL, Prisma Postgres, MySQL/MariaDB, SQLite, SQL Server, MongoDB, CockroachDB. |
| Primary entry points | packages/cli (the prisma binary), packages/client (the runtime), packages/migrate (migration commands + schema engine wrapper). |
Design philosophy: Declare your data model once; everything else (types, queries, migrations) is derived from it. The Rust engines own the hard correctness problems (schema parsing, introspection, migration diffing); the TypeScript layer owns ergonomics, code generation, and the CLI.
2. Architecture Overview
┌──────────────────────────────────────────────┐
│ prisma CLI │
│ (packages/cli — `prisma`) │
│ init · generate · db · migrate · studio ... │
└───────┬───────────────────────┬───────────────┘
│ │
prisma.config.ts │ │ schema.prisma
(defineConfig/env) │ │
▼ ▼
┌─────────────────────┐ ┌────────────────────────┐
│ @prisma/internals │ │ Client generators │
│ schema loading, │ │ client-generator-ts, │
│ config, helpers, │ │ client-generator-js │
│ engine commands │ │ (emit typed client) │
└──────────┬──────────┘ └───────────┬────────────┘
│ │ DMMF
▼ ▼
┌─────────────────────┐ ┌────────────────────────┐
│ Schema Engine │ │ @prisma/client │
│ (Rust binary) │ │ runtime + generated │
│ parse · introspect │ │ query API │
│ migrate · diff │ └───────────┬────────────┘
└──────────┬──────────┘ │
│ │ queries
▼ ▼
┌──────────────────────────────────────────────────┐
│ Driver Adapters │
│ @prisma/adapter-pg / -neon / -planetscale / │
│ -d1 / -libsql / -mariadb / -mssql / -ppg ... │
└──────────────────────┬───────────────────────────┘
▼
Your database
Two cooperating layers:
- TypeScript orchestration (
packages/*) — the CLI, schema loading, config, code generation, and the client runtime. - Rust engines — native binaries that perform schema parsing, introspection, migration planning/diffing, and produce the DMMF. The TypeScript layer downloads (via
@prisma/fetch-engine), spawns, and communicates with these binaries through@prisma/internalsandpackages/migrate/src/SchemaEngine*.
Request paths:
- Modeling/migration commands (
migrate dev,db push,db pull,migrate diff) load schema + config in TypeScript, then delegate the heavy lifting to the schema engine binary. - Application queries go through the generated client, which produces a query plan that is executed against the database via the configured driver adapter.
3. Repository Structure
The monorepo is organized under packages/, with supporting top-level folders. Total scale at the documented commit: ~4,556 files across 239 source-significant folders.
prisma/
├── packages/
│ ├── cli/ The `prisma` binary; top-level command registry
│ ├── client/ @prisma/client runtime, query engine bindings
│ ├── client-common/ Shared client types/utilities
│ ├── client-engine-runtime/ Client-side engine runtime
│ ├── client-generator-ts/ Generates the TypeScript client (default v7)
│ ├── client-generator-js/ Generates the JS client (legacy/compat)
│ ├── client-generator-registry/ Generator registry/resolution
│ ├── migrate/ Prisma Migrate commands + schema engine wrapper
│ ├── internals/ Shared internals: schema loading, config, helpers
│ ├── config/ prisma.config.ts loader (defineConfig/env)
│ ├── generator/ generator-helper/ Generator protocol + helpers
│ ├── get-platform/ Platform/OS detection for engine binaries
│ ├── fetch-engine/ Downloads engine binaries
│ ├── engines/ Engine version pinning + binary resolution
│ ├── dmmf/ get-dmmf/ DMMF types and extraction
│ ├── debug/ Debug logging
│ ├── driver-adapter-utils/ Shared adapter contracts
│ ├── adapter-pg/ -neon/ -ppg/ -planetscale/ -mariadb/
│ ├── adapter-mssql/ -d1/ -libsql/ -better-sqlite3/ Database driver adapters
│ ├── bundled-js-drivers/ Bundled JS DB drivers
│ ├── instrumentation/ instrumentation-contract/ OpenTelemetry tracing
│ ├── sqlcommenter*/ SQL Commenter (query tags/insights/trace-context)
│ ├── ts-builders/ TypeScript code-generation builders
│ ├── param-graph/ param-graph-builder/ Query parameter graph
│ ├── query-plan-executor/ Query plan execution service
│ ├── schema-files-loader/ Multi-file schema loading
│ ├── credentials-store/ Platform auth credential storage
│ └── integration-tests/ type-benchmark-tests/ Test packages
├── helpers/ Build helpers (compile, blaze)
├── scripts/ CI/release scripts (scripts/ci/publish.ts)
├── sandbox/ Local experimentation projects
├── docker/ Docker setups for DB testing (postgres, mongodb, ...)
├── eslint-local-rules/ Custom ESLint rules
├── pnpm-workspace.yaml Workspace definition
├── turbo.json Turborepo task graph
└── vitest.config.ts Test runner config
Note
The monorepo also contains a large
packages/client/tests/e2e/**tree (Next.js schema-resolution scenarios, bundler/edge tests, TS-version matrix). These are test fixtures, not shipped product surface — treat them as such when reasoning about the codebase.
4. Component Inventory
| Package | Role | Audience |
|---|---|---|
prisma (packages/cli) |
The prisma binary. Parses top-level commands and delegates. |
Users + ops |
@prisma/client (packages/client) |
The runtime query client; consumes the generated artifacts. | Application devs |
@prisma/migrate (packages/migrate) |
migrate/db subcommands and the schema engine wrapper (SchemaEngine, SchemaEngineCLI). |
Users + ops |
@prisma/internals (packages/internals) |
Shared core: schema context loading, config validation, engine commands, arg/format/HelpError CLI helpers. |
Internal |
@prisma/config (packages/config) |
Loads and validates prisma.config.ts; exposes defineConfig and env. |
Users (config) |
@prisma/engines / @prisma/fetch-engine |
Pin engine versions and download the right binary for the platform. | Internal/ops |
@prisma/get-platform |
Detects OS/libc/arch to select an engine binary target. | Internal |
client-generator-ts / client-generator-js |
Code generators that emit the typed client from the DMMF. | Internal |
@prisma/generator / generator-helper |
The generator protocol (third parties can implement custom generators). | Integrators |
dmmf / get-dmmf |
DMMF type definitions and extraction from the engine. | Internal |
adapter-* (9 packages) |
Driver adapters bridging Prisma to native DB drivers. | Application devs |
driver-adapter-utils |
Shared adapter contract/types. | Adapter authors |
instrumentation / instrumentation-contract |
OpenTelemetry tracing integration. | Ops/observability |
sqlcommenter* |
SQL Commenter support: query tags, query insights, trace context. | Ops/observability |
query-plan-executor |
Standalone query-plan execution server (examples under examples/server.ts). |
Advanced/internal |
credentials-store |
Stores Prisma Data Platform auth tokens (PRISMA_PLATFORM_AUTH_FILE). |
Platform integration |
5. The Schema Engine & DMMF
Rust engines
The intelligence behind schema parsing, introspection, migration planning, and diffing lives in Rust engine binaries. The TypeScript layer:
- Resolves the correct engine version (
@prisma/engines,@prisma/engines-version). - Downloads the platform-specific binary (
@prisma/fetch-engine, honoringPRISMA_ENGINES_MIRROR,BINARY_DOWNLOAD_VERSION, proxy variables). - Spawns and communicates with the schema engine (
packages/migrate/src/SchemaEngine.ts,SchemaEngineCLI.ts) for operations likeintrospect,createMigration,applyMigrations,migrateDiff,devDiagnostic, anddiagnoseMigrationHistory.
You can point Prisma at a custom engine binary with PRISMA_SCHEMA_ENGINE_BINARY (or the legacy PRISMA_MIGRATION_ENGINE_BINARY), which is useful for debugging engine behavior.
DMMF — Data Model Meta Format
The DMMF is the JSON abstract syntax tree of your data model (the model, datasource, and generator blocks of your schema). The entire Prisma Client is generated from the DMMF, which is produced by the Rust engines.
schema.prisma ──(schema engine)──▶ DMMF (JSON AST) ──(generators)──▶ typed Prisma Client
Important
The DMMF is a Prisma-internal API with no stability guarantees. It can change in breaking ways between minor versions. Do not build third-party tooling against the DMMF expecting a stable contract; use the documented generator interface (
@prisma/generator) instead.
Generators
Client generation is pluggable. The default v7 generator is prisma-client (emits TypeScript via client-generator-ts), and a JS generator (client-generator-js) exists for compatibility. Generators are resolved through client-generator-registry and implement the protocol in @prisma/generator/generator-helper, so third parties can write custom generators (e.g. for other languages) that consume the same DMMF.
6. Driver Adapters
In v7, Prisma Client connects to the database through a driver adapter passed to the PrismaClient constructor. Adapters wrap a native driver and conform to the contract in @prisma/driver-adapter-utils.
| Adapter | Underlying driver / target | Typical use |
|---|---|---|
@prisma/adapter-pg |
pg (node-postgres) |
Server-side PostgreSQL |
@prisma/adapter-neon |
Neon serverless driver | Serverless/edge Postgres |
@prisma/adapter-ppg |
Prisma Postgres | Managed Prisma Postgres |
@prisma/adapter-planetscale |
PlanetScale serverless driver | Serverless MySQL |
@prisma/adapter-mariadb |
MariaDB/MySQL driver | MySQL/MariaDB |
@prisma/adapter-mssql |
mssql/tedious |
SQL Server |
@prisma/adapter-d1 |
Cloudflare D1 | Edge SQLite (Workers) |
@prisma/adapter-libsql |
libSQL/Turso | Embedded/edge SQLite |
@prisma/adapter-better-sqlite3 |
better-sqlite3 | Local SQLite |
import { PrismaClient } from './generated/prisma/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })
Note
Adapters that connect lazily may not surface connection failures at
$connect()time (see issues #28959, #25418). For eager connectivity checks, run a trivial query at startup.
7. Configuration Reference
prisma.config.ts
CLI configuration is defined in prisma.config.ts via defineConfig from the prisma/config entry point.
| Key | Type | Description |
|---|---|---|
schema |
string |
Path to the schema file or schema folder. |
datasource.url |
string |
Connection string used by CLI commands (commonly env('DATABASE_URL')). |
migrations.path |
string |
Migration directory (default prisma/migrations). |
migrations.seed |
string |
Seed command for prisma db seed. |
migrations.initShadowDb |
string |
SQL to initialize the shadow database (used by migrate dev/diff). |
tables.external |
string[] |
Tables managed outside Prisma Migrate (excluded from diff/push). |
enums.external |
string[] |
Enums managed outside Prisma Migrate. |
extensions |
— | Extension hooks passed to the schema engine setup. |
Important
.envfiles are not auto-loaded. Import a loader (import 'dotenv/config') at the top ofprisma.config.ts, or run the CLI under Bun / withnode --env-file. Theenv()helper throws if a referenced variable is missing, which is a feature: misconfiguration fails fast.
Environment variables (operational)
| Variable | Purpose |
|---|---|
DATABASE_URL |
Database connection string (referenced from config). |
DEBUG |
Debug namespaces, e.g. prisma:*, prisma:migrate:dev, prisma:db:pull. |
PRISMA_ENGINES_MIRROR |
Mirror for engine binary downloads (air-gapped/proxied environments). |
BINARY_DOWNLOAD_VERSION |
Pin the engine binary version. |
PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING |
Tolerate a missing engine checksum. |
PRISMA_CLI_BINARY_TARGETS |
Restrict which engine binary targets the CLI fetches. |
PRISMA_SCHEMA_ENGINE_BINARY |
Path to a custom schema engine binary. |
PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK |
Disable Migrate's advisory lock (use with care). |
PRISMA_SHOW_ALL_TRACES |
Include all spans in client tracing. |
HTTP_PROXY / HTTPS_PROXY / NO_PROXY |
Proxy config for engine downloads. |
NODE_TLS_REJECT_UNAUTHORIZED |
Node TLS verification toggle. |
CHECKPOINT_DISABLE |
Disable anonymous version-check telemetry. |
PRISMA_TELEMETRY_INFORMATION |
Tag attached to telemetry events. |
PRISMA_HIDE_UPDATE_MESSAGE / PRISMA_DISABLE_WARNINGS / PRISMA_HIDE_PREVIEW_FLAG_WARNINGS |
Output verbosity controls. |
RUST_LOG / RUST_BACKTRACE |
Engine-level diagnostic logging. |
BROWSER |
Browser Studio opens. |
Tip
Run
prisma debugto print the current value (set/unset) of every variable Prisma inspects, plus the resolved schema path and engine cache directory — ideal for support tickets and CI debugging.
8. Operations
Environment workflows
| Environment | Recommended commands |
|---|---|
| Local dev | prisma migrate dev, prisma db push (prototyping), prisma studio, prisma dev (local Postgres). |
| CI | prisma validate, prisma format --check, prisma generate, prisma migrate deploy against a test DB. |
| Staging/Production | prisma migrate deploy only. Never migrate dev (it can reset). Use migrate status for health checks. |
Deploying schema changes
# In your deploy pipeline, after code is built:
npx prisma migrate deploy
npx prisma generate # if the client isn't committed/prebuilt
migrate deploy applies only already-created migrations, never prompts, and never resets — making it safe for automated pipelines.
Migration history management
- Baselining an existing DB:
prisma migrate resolve --applied <initial_migration>. - Failed migration recovery:
prisma migrate resolve --rolled-back <name>(rolled back manually) or--applied <name>(hotfixed forward).prisma migrate statusprints the exact command. - Drift detection:
prisma migrate statusexits non-zero when the database is behind or histories diverge — wire this into a pre-deploy gate.
Engine binary distribution
In restricted networks, engine binaries can't be fetched from the default CDN. Use PRISMA_ENGINES_MIRROR to point at an internal mirror, BINARY_DOWNLOAD_VERSION to pin a version, and the proxy variables (HTTPS_PROXY, NO_PROXY) for egress. PRISMA_CLI_BINARY_TARGETS limits which platform binaries are downloaded (useful for slimming CI images and container builds — set binaryTargets in the generator block to match your deploy target).
Observability
- Tracing:
@prisma/instrumentationintegrates with OpenTelemetry. SetPRISMA_SHOW_ALL_TRACESto include all spans. - SQL Commenter: the
sqlcommenter*packages append query tags, query-insights metadata, and W3C trace context to emitted SQL so queries can be correlated with application traces in your database monitoring.
9. Security
Caution
Prisma executes SQL and migrations against your production database. Treat connection strings, engine mirrors, and the migration pipeline as sensitive surfaces.
Credentials & connection strings
- Connection strings carry database credentials. Keep
DATABASE_URLin environment variables/secret managers, never in source control.prisma initwrites.envand adds it (and the generated client) to.gitignoreautomatically. - Prisma strips Prisma-specific query parameters (
schema,connection_limit,pool_timeout,pgbouncer,sslidentity,sslaccept,socket_timeout,statement_cache_size) before passing the URL to the underlying driver. - Platform auth tokens are stored via
credentials-storeat the path inPRISMA_PLATFORM_AUTH_FILE.
Destructive-command guardrails
Several commands can destroy data and have built-in safeguards:
| Command | Guardrail |
|---|---|
prisma migrate reset |
Interactive confirmation; requires --force in non-interactive contexts. |
prisma db push --force-reset |
Drops the database; confirmation required. |
prisma db drop |
Preview-only (--preview-feature); requires typing the database name or --force. |
prisma db push (data loss) |
Prompts on potential data loss unless --accept-data-loss. |
AI-agent safety checkpoint
Prisma includes an AI-agent confirmation checkpoint (packages/migrate/src/utils/ai-safety.ts) for destructive operations. When it detects that the CLI is running inside an AI coding agent — by inspecting environment markers such as CLAUDECODE, GEMINI_CLI, CURSOR_AGENT, OR_APP_NAME, REPLIT_CLI, and CODEX_SANDBOX — it inserts an additional confirmation gate before reset/drop/force-reset operations.
Important
This guardrail exists to prevent an autonomous agent from silently dropping a database. If you build automation around Prisma, account for this checkpoint (or supply explicit
--forcewhere you genuinely intend destructive behavior).
Non-interactive safety
migrate dev, migrate reset, and db push detect non-interactive environments (canPrompt()/isCi()) and fail closed rather than guessing — e.g. MigrateDevEnvNonInteractiveError, MigrateResetEnvNonInteractiveError, DbPushIgnoreWarningsWithFlagError. This prevents accidental destructive actions in CI. Pass the explicit flag (--force, --accept-data-loss) only when you mean it.
Telemetry
Prisma performs an anonymous version "checkpoint" check. Disable it with CHECKPOINT_DISABLE=1 in privacy-sensitive or air-gapped environments.
10. Code Patterns & Conventions
Command pattern. Every CLI command is a class implementing the Command interface from @prisma/internals, with:
- A
static new()factory. - A
static helptemplate built withformat(...)andkleur/colors. - A
parse(argv, config, baseDir)method that parses flags witharg(argv, { '--flag': Type, ... }). - A
help(error?)method returning aHelpError.
export class Format implements Command {
static new(): Format { return new Format() }
private static help = format(`...`)
async parse(argv, config, baseDir) {
const args = arg(argv, { '--help': Boolean, '--schema': String, '--check': Boolean })
if (isError(args)) return this.help(args.message)
// ...
}
help(error?) { /* ... */ }
}
Note
Because flags are declared in the
arg(...)map and documented in thehelptemplate, those two locations are the authoritative source for a command's interface. AST-based extraction does not see them; read the command class to enumerate flags.
Command registration. The top-level CLI class (packages/cli/src/CLI.ts) holds a Commands map and dispatches argv[0] to the matching command. db and migrate are themselves dispatchers (DbCommand, MigrateCommand) that route their second argument to subcommands.
Schema/config loading. Commands load schema context via loadSchemaContext/getSchemaWithPath and validate datasource config with validatePrismaConfigWithDatasource, both from @prisma/internals — centralizing the "where is my schema and connection string" logic.
Engine lifecycle. Migration commands call Migrate.setup(...) to spawn the schema engine, perform RPCs (introspect, applyMigrations, migrateDiff, ...), and always migrate.stop() in a finally block to terminate the engine process.
Conventions. TypeScript throughout; kleur/colors for terminal styling; @prisma/debug (the Debug('prisma:...') namespaces) for tracing; structured error classes (e.g. NoSchemaFoundError, PreviewFlagError) rather than bare strings. Custom lint rules live in eslint-local-rules/.
11. Testing Strategy
| Layer | Location | What it covers |
|---|---|---|
| Unit/command tests | packages/cli/src/__tests__, packages/*/src/**/*.test.ts |
CLI parsing, command behavior, helpers. |
| Integration tests | packages/integration-tests |
Engine ↔ TS interactions. |
| End-to-end tests | packages/client/tests/e2e/** |
Real-world scenarios: Next.js schema resolution, bundlers (tsup/esbuild), edge runtimes, a TS-version matrix (5.4 → next). |
| Type tests | packages/client/src/__tests__/types, type-benchmark-tests |
Generated client type correctness and type-checking performance. |
| Database fixtures | docker/ |
Dockerized PostgreSQL, MongoDB (replica/migrate-seed), PlanetScale proxy for local DB-backed tests. |
The test runner is Vitest (vitest.config.ts); the build/test task graph is orchestrated by Turborepo (turbo.json). See TESTING.md at the repo root for how to run suites locally.
Note
The large
e2efixture matrix exists because Prisma's correctness depends heavily on how bundlers, runtimes, and TypeScript versions interact with the generated client — areas that unit tests can't cover. Many community-reported bugs (TS-compilation regressions, bundler issues) map directly to these suites.
12. Potential Improvements & Tech Debt
Observations drawn from the source and the issue tracker at the documented commit:
- Startup connectivity semantics.
$connect()not failing on unreachable databases with some adapters (#28959, #25418) is a recurring confusion. A documented "eager connect" option or clearer adapter contract would reduce surprise. - TypeScript compile cost. Large generated clients stress
tsc(#29011, #16418, OOM in #19999). Thetype-benchmark-testspackage tracks this; continued work on emitted-type size pays off directly for big schemas. db executeconfig coverage. An in-sourceTODOnotes thatdb executedoes not yet fully honorprisma.config.tsdriver adapters (it primarily consumes the datasource URL). Aligning it with the rest of the config-driven commands would remove a special case.- Studio provider gaps. Studio failures on MSSQL URLs (#29620) and introspection errors (#29280) indicate adapter/Studio coverage that lags the core.
- Migrate-on-partitioned-tables.
migratedropping manually created partitioned tables (#13407) is a long-standing correctness gap in the engine's diffing for advanced Postgres features. - Dependency hygiene. Issues around bundled/transitive dependencies in the
7.xline (#29605, #29618) suggest tightening supply-chain pinning for the@prisma/devlocal-Postgres path.
13. Contributing
- Prerequisites: Node.js LTS (or Bun),
pnpm. Install workspace deps withpnpm install. - Build: Turborepo drives builds (
turbo.json); per-package build scripts live in eachpackage.json. - Test: Vitest. Database-backed tests use the Dockerized services under
docker/. SeeTESTING.md. - Engine upgrades: When the Rust team changes the DMMF, bump
@prisma/engines/@prisma/engines-versiontogether (e.g.pnpm update -r @prisma/engines@<version> @prisma/engines-version@<version>), regenerate, and review snapshot changes carefully — only accept DMMF snapshot diffs you understand.ARCHITECTURE.mddocuments the DMMF debugging flow. - Guidelines: Follow
CONTRIBUTING.mdandCODE_OF_CONDUCT.md. Custom lint rules ineslint-local-rules/are enforced viaeslint.config.cjs. - Release: Publishing is automated through
scripts/ci/publish.ts(gated by env flags likeDRY_RUN,RELEASE_VERSION,ONLY_PACKAGES/SKIP_PACKAGES).
Note
The repo includes agent-oriented context files (
AGENTS.md,CLAUDE.md,GEMINI.md) at the root — Prisma maintains explicit guidance for AI coding assistants working in the codebase, consistent with the AI-safety checkpoint in the migration tooling.
14. Quick Reference
Engine RPCs (schema engine)
| RPC | Triggered by |
|---|---|
introspect |
prisma db pull |
createMigration / applyMigrations |
migrate dev, migrate deploy, migrate reset |
migrateDiff |
migrate diff |
dbExecute |
db execute |
devDiagnostic / diagnoseMigrationHistory |
migrate dev, migrate status |
markMigrationApplied / markMigrationRolledBack |
migrate resolve |
reset |
migrate reset, db push --force-reset |
Prisma error code families
| Range | Domain |
|---|---|
P1xxx |
Common / connection (e.g. P1001 unreachable, P1003 DB missing, P1012 schema invalid) |
P2xxx |
Prisma Client query errors |
P3xxx |
Prisma Migrate errors |
P4xxx |
Introspection errors (e.g. P4001 empty database) |
Key files for engineers
| Path | What |
|---|---|
packages/cli/src/CLI.ts |
Top-level command registry + help. |
packages/migrate/src/commands/*.ts |
All db/migrate subcommands (flags + behavior). |
packages/migrate/src/SchemaEngine*.ts |
Schema engine process wrapper. |
packages/config/src |
prisma.config.ts loading (defineConfig, env). |
packages/internals/src |
Shared schema/config/CLI helpers. |
packages/client-generator-ts/src |
TypeScript client generator. |
packages/migrate/src/utils/ai-safety.ts |
AI-agent destructive-command checkpoint. |
ARCHITECTURE.md / TESTING.md / CONTRIBUTING.md |
Engineer-facing docs. |