Core Components
Prisma ORM consists of several key components:- Prisma Client: Auto-generated, type-safe query builder
- Prisma Schema: Declarative data modeling language (PSL)
- Prisma Config: TypeScript-based configuration system
- Prisma Migrate: Declarative database migration system
- Query Compiler: WebAssembly-based query planner and compiler
- Driver Adapters: JavaScript database driver integration layer
Prisma Client
Prisma Client is an auto-generated query builder that provides type-safe database access. It’s generated based on your Prisma schema and can be used in any Node.js or TypeScript backend.Client Engine Architecture
The Client Engine (ClientEngine) orchestrates query execution using a WebAssembly-based query compiler:
Query Execution Flow
Queries flow through the following components:- PrismaClient - User-facing API
- ClientEngine.request() - Request handling
- Query Compiler - Query planning (WebAssembly)
- Executor.execute() - Query execution
- QueryInterpreter.run() - Execution against driver adapter
- Driver Adapter - Database communication
Prisma 7 uses JavaScript drivers via driver adapters instead of native binaries. The query compiler and PSL parser are compiled to WebAssembly for maximum portability.
Executor Types
Prisma Client supports two execution modes:Local Executor
Used for direct database connections via driver adapters:Remote Executor
Used for Prisma Accelerate and Data Proxy connections:Query Compiler
The Query Compiler is a Rust component compiled to WebAssembly that handles:- Query Planning: Converting Prisma operations to SQL
- Query Optimization: Optimizing query execution plans
- Type Validation: Ensuring type safety at runtime
Query Plan Cache
Prisma uses a query plan cache to avoid recompiling identical queries:Driver Adapters
Driver adapters enable Prisma to work with JavaScript database drivers. Available adapters:@prisma/adapter-pg- PostgreSQL (node-postgres)@prisma/adapter-neon- Neon serverless PostgreSQL@prisma/adapter-libsql- libSQL/Turso@prisma/adapter-planetscale- PlanetScale serverless@prisma/adapter-d1- Cloudflare D1@prisma/adapter-better-sqlite3- better-sqlite3@prisma/adapter-mssql- Microsoft SQL Server@prisma/adapter-mariadb- MariaDB@prisma/adapter-ppg- Prisma Postgres Serverless
Driver Adapter Interface
All adapters implement theSqlDriverAdapter interface:
Using Driver Adapters
Prisma Migrate
Prisma Migrate is a declarative migration system that:- Generates migration files based on schema changes
- Applies migrations to your database
- Tracks migration history
- Supports shadow databases for validation
Schema Engine
Migrate uses a Schema Engine (native binary) to:- Introspect databases
- Generate migration SQL
- Validate schema changes
- Apply migrations
DMMF (Data Model Meta Format)
The DMMF is an AST (Abstract Syntax Tree) representation of your Prisma schema in JSON format:Generator System
Prisma uses a generator system to create the client. Generators receive the DMMF and produce code:Component Communication
Key Architecture Principles
Type Safety
Prisma’s architecture ensures type safety from schema to runtime:- Schema types are validated at generation time
- Client types are generated from DMMF
- Runtime validation ensures data consistency
Performance
Optimizations throughout the stack:- Query plan caching
- WebAssembly compilation for fast query planning
- Direct driver integration (no binary engines)
- Connection pooling via driver adapters
Portability
Prisma works across environments:- WebAssembly for cross-platform support
- JavaScript drivers for edge runtime compatibility
- No native dependencies in Prisma Client
Package Structure
The monorepo contains specialized packages:| Package | Purpose |
|---|---|
@prisma/client | Client runtime |
@prisma/client-common | Shared client utilities |
@prisma/client-engine-runtime | Query interpreter and transaction manager |
@prisma/client-generator-js | Traditional generator (prisma-client-js) |
@prisma/client-generator-ts | New TypeScript generator (prisma-client) |
@prisma/config | Configuration system |
@prisma/migrate | Migration commands |
@prisma/internals | Shared CLI utilities |
@prisma/driver-adapter-utils | Driver adapter interfaces |
@prisma/adapter-* | Database-specific adapters |
Next Steps
Prisma Schema
Learn about the Prisma Schema Language
Prisma Config
Configure Prisma with TypeScript
Data Model
Understand data modeling concepts
Generators
Explore the generator system