No Rust engine
As of v6.16.0, usage of Prisma ORM without Rust engine binaries on PostgreSQL, CockroachDB, Neon, MySQL, PlanetScale, SQLite, D1 & MS SQL Server databases has been Generally Available.
This page gives an overview of how to use this version of Prisma ORM.
The main technical differences if you're using Prisma ORM without a Rust engine are:
- no
binaryTargetsfield on thegeneratorblock - no query engine binary that's downloaded into the directory with your generated Prisma Client
engineTypeneeds to be set to"client"on thegeneratorblock- required usage of driver adapters for database connection management
- Prisma ORM v6.15.0 (or later)
generator client {
provider = "prisma-client" // or `prisma-client-js`
output = "../generated/prisma"
engineType = "client" // enable Prisma ORM without Rust
}To make the configuration take effect, you need re-generate Prisma Client:
bunx prisma generatepnpm prisma generateyarn prisma generatenpx prisma generateDepending on the database you use, you need to install a different driver adapter library:
bun add @prisma/adapter-pg@6.19.3pnpm add @prisma/adapter-pg@6.19.3yarn add @prisma/adapter-pg@6.19.3npm install @prisma/adapter-pg@6.19.3 bun add @prisma/adapter-better-sqlite3@6.19.3
``` bun add @prisma/adapter-d1@6.19.3
``` bun add @prisma/adapter-mariadb@6.19.3
``` bun add @prisma/adapter-planetscale@6.19.3
``` bun add @prisma/adapter-mssql@6.19.3
``` bun add @prisma/adapter-pg@6.19.3
``` bun add @prisma/adapter-neon@6.19.3
```Finally, instantiate Prisma Client which you can do using the driver adapter and the connection URL for the database instance you're using:
import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from '../generated/prisma/client'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
import { PrismaClient } from '../generated/prisma/client';
const adapter = new PrismaBetterSqlite3({ url: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter });import { PrismaClient } from '../generated/prisma/client'
import { PrismaD1 } from '@prisma/adapter-d1'
export interface Env {
DB: D1Database
}
export default {
async fetch(
request: Request,
env: Env,
ctx: ExecutionContext
): Promise<Response> {
const adapter = new PrismaD1(env.DB)
const prisma = new PrismaClient({ adapter })
// …
// ... query your DB
},
}import { PrismaMariaDb } from '@prisma/adapter-mariadb';
import { PrismaClient } from '../generated/prisma/client';
const adapter = new PrismaMariaDb({
host: "localhost",
port: 3306,
connectionLimit: 5
});
const prisma = new PrismaClient({ adapter });import { PrismaPlanetScale } from '@prisma/adapter-planetscale'
import { PrismaClient } from '../generated/prisma/client'
import { fetch as undiciFetch } from 'undici'
const adapter = new PrismaPlanetScale({ url: process.env.DATABASE_URL, fetch: undiciFetch })
const prisma = new PrismaClient({ adapter })import { PrismaMssql } from '@prisma/adapter-mssql';
import { PrismaClient } from '../generated/prisma/client';
const sqlConfig = {
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
server: process.env.HOST,
pool: {
max: 10,
min: 0,
idleTimeoutMillis: 30000
},
options: {
encrypt: true, // for azure
trustServerCertificate: false // change to true for local dev / self-signed certs
}
}
const adapter = new PrismaMssql(sqlConfig)
const prisma = new PrismaClient({ adapter });import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from '../generated/prisma/client'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })import { PrismaClient } from '../generated/prisma/client'
import { PrismaNeon } from '@prisma/adapter-neon'
import dotenv from 'dotenv'
dotenv.config()
const connectionString = `${process.env.DATABASE_URL}`
const adapter = new PrismaNeon({ connectionString })
const prisma = new PrismaClient({ adapter })If you went through the previous steps, you can query your database as you're used to with Prisma Client. No other changes are needed.
Use the Rust-free version of Prisma ORM with hosted Prisma Postgres through the Prisma Postgres serverless driver. This requires @prisma/adapter-ppg instead of the Accelerate extension.
generator client {
provider = "prisma-client" // or `prisma-client-js`
output = "../generated/prisma"
engineType = "client" // enable Prisma ORM without Rust
}To make the configuration take effect, you need re-generate Prisma Client:
bunx prisma generatepnpm add @prisma/adapter-better-sqlite3@6.19.3yarn add @prisma/adapter-better-sqlite3@6.19.3npm install @prisma/adapter-better-sqlite3@6.19.33. Install and configure the Prisma Postgres adapter
Section titled “3. Install and configure the Prisma Postgres adapter”Install the serverless driver adapter:
bun add @prisma/adapter-ppg @prisma/ppgpnpm add @prisma/adapter-d1@6.19.3yarn add @prisma/adapter-d1@6.19.3npm install @prisma/adapter-d1@6.19.3Import and instantiate Prisma Client with the adapter:
import { PrismaPostgresAdapter } from "@prisma/adapter-ppg";
import { PrismaClient } from "../../generated/prisma/client";
const adapter = new PrismaPostgresAdapter({
connectionString: process.env.DATABASE_URL!,
});
const prisma = new PrismaClient({ adapter });If you went through the previous steps, you can query your database as you're used to with Prisma Client. No other changes are needed.
The Rust-free version of Prisma ORM has been in Preview from versions v6.7.0 to v.6.14.0. Expand below if you're using any of these versions and are unable to upgrade to the latest one.
Expand to see instructions for Prisma ORM v6.7.0 to v6.14.0
Prerequisites
- Any Prisma ORM version between 6.7.0 and 6.14.0
1. Set feature flags
Usage of the new architecture requires the driverAdapters and queryCompiler feature flags to be set:
generator client {
provider = "prisma-client"
previewFeatures = ["queryCompiler", "driverAdapters"]
output = "../generated/prisma"
}2. Re-generate Prisma Client
To make the feature flags take effect, you need re-generate Prisma Client:
bunx prisma generatepnpm add @prisma/adapter-mariadb@6.19.3yarn add @prisma/adapter-mariadb@6.19.3npm install @prisma/adapter-mariadb@6.19.33. Install the driver adapter
Depending on the database you use, you need to install a different driver adapter library:
bun add @prisma/adapter-pg@6.19.3pnpm add @prisma/adapter-planetscale@6.19.3yarn add @prisma/adapter-planetscale@6.19.3npm install @prisma/adapter-planetscale@6.19.3 bun add @prisma/adapter-better-sqlite3@6.19.3
``` bun add @prisma/adapter-d1@6.19.3
``` bun add @prisma/adapter-mariadb@6.19.3
``` bun add @prisma/adapter-planetscale@6.19.3
``` bun add @prisma/adapter-mssql@6.19.3
``` bun add @prisma/adapter-pg@6.19.3
``` bun add @prisma/adapter-neon@6.19.3
```4. Instantiate Prisma Client
Finally, you need to instantiate Prisma Client which you can do using the driver adapter and the connection URL for the database instance you're using.
import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from '../generated/prisma/client'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
import { PrismaClient } from '../generated/prisma/client';
const adapter = new PrismaBetterSqlite3({ url: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter });import { PrismaClient } from '../generated/prisma/client'
import { PrismaD1 } from '@prisma/adapter-d1'
export interface Env {
DB: D1Database
}
export default {
async fetch(
request: Request,
env: Env,
ctx: ExecutionContext
): Promise<Response> {
const adapter = new PrismaD1(env.DB)
const prisma = new PrismaClient({ adapter })
// ... query your DB
},
}import { PrismaMariaDb } from '@prisma/adapter-mariadb';
import { PrismaClient } from '../generated/prisma/client';
const adapter = new PrismaMariaDb({
host: "localhost",
port: 3306,
connectionLimit: 5
});
const prisma = new PrismaClient({ adapter });import { PrismaPlanetScale } from '@prisma/adapter-planetscale'
import { PrismaClient } from '../generated/prisma/client'
import { fetch as undiciFetch } from 'undici'
const adapter = new PrismaPlanetScale({ url: process.env.DATABASE_URL, fetch: undiciFetch })
const prisma = new PrismaClient({ adapter })import { PrismaMssql } from '@prisma/adapter-mssql';
import { PrismaClient } from '../generated/prisma/client';
const sqlConfig = {
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
server: process.env.HOST,
pool: {
max: 10,
min: 0,
idleTimeoutMillis: 30000
},
options: {
encrypt: true, // for azure
trustServerCertificate: false // change to true for local dev / self-signed certs
}
}
const adapter = new PrismaMssql(sqlConfig)
const prisma = new PrismaClient({ adapter });import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from '../generated/prisma/client'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })import { PrismaClient } from '../generated/prisma/client'
import { PrismaNeon } from '@prisma/adapter-neon'
import dotenv from 'dotenv'
dotenv.config()
const connectionString = `${process.env.DATABASE_URL}`
const adapter = new PrismaNeon({ connectionString })
const prisma = new PrismaClient({ adapter })5. Query your database
If you went through the previous steps, you can query your database as you're used to with Prisma Client. No other changes are needed.