6.7.0
Today, we are excited to share the 6.7.0
stable release 🎉
🌟 Help us spread the word about Prisma by starring the repo ☝️ or posting on X about the release.
Highlights
Prisma ORM without Rust engines (Early Access)
If you're a regular visitor of our company blog, you may already know that we're currently working on moving the core of Prisma from Rust to TypeScript. We have written extensively about why we're moving away from Rust and already shared the first measurements of performance boosts we saw from the re-write.
This re-write is not just a move from one programming language to another. It fundamentally improves the architecture of Prisma ORM and replaces the Query Engine (which is written in Rust and deployed as a standalone binary) with a much leaner and more efficient approach that we call Query Compiler.
In this release, we're excited to give you Early Access to the new Query Compiler for PostgreSQL and SQLite database 🥳 Support for more database will follow very soon!
To use the new "Rust-free" version of Prisma ORM, add the queryCompiler
(new) and driverAdapters
feature flags to your client generator:
generator client {
provider = "prisma-client-js"
previewFeatures = ["queryCompiler", "driverAdapters"]
output = "../generated/prisma"
}
Now run prisma generate
to re-generate Prisma Client. If you didn't use a driver adapter before, you'll need to install one. For example, the one for PostgreSQL:
npm install @prisma/adapter-pg
Once installed, you can instantiate PrismaClient
as follows:
import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from './generated/prisma'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })
This version of PrismaClient
doesn't have a Query Engine binary and you can use it in the exact same way as before.
📚 Learn more in the docs.
Support for better-sqlite3
JavaScript driver (Preview)
Driver adapters are Prisma ORM's way of letting you use JS-native drivers (like pg
) to interact with your database. In this release, we're introducing a new driver adapter for using the better-sqlite3
package, so you can now interact with SQLite database in a JS-native way.
To use it, first enable the driverAdapters
Preview feature flag in on your client generator
, then install these libraries:
npm install @prisma/adapter-better-sqlite3
Now you can instantiate Prisma Client as follows:
import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3';
import { PrismaClient } from './generated/prisma';
const adapter = new PrismaBetterSQLite3({
url: "file:./prisma/dev.db"
});
const prisma = new PrismaClient({ adapter });
📚 Learn more in the docs.
Multi-file Prisma schemas are now production-ready
The prismaSchemaFolder
Preview feature is moving into General Availability 🎉 With that change, Prisma ORM now by default supports splitting your Prisma schema file and e.g. lets you organize your schema as follows:
prisma/schema.prisma
→ defines data source and generator
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
prisma/models/posts.prisma
→ defines Post
model
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
prisma/models/users.prisma
→ defines User
model
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
prismaSchemaFolder
Preview feature in the last 6.6.0 release. If you've been using this feature to split your Prisma schema, make sure to read the release notes and update your project accordingly.
📚 Learn more in the docs.
Splitting generated output with new prisma-client
generator (Preview)
With the prisma-client-js
generator, the generated Prisma Client library is put into a single index.d.ts
file. This sometimes led to issues with large schemas where the size of the generated output could slow down code editors and breaking auto-complete.
As of this release, our new prisma-client
generator (that was released in 6.6.0) now splits the generated Prisma Client library into multiple files and thus avoids the problems of a single, large output file.
Also: As a bonus, we now ensure that generated files do not raise any ESLint and TypeScript errors!
Before
generated/
└── prisma
├── client.ts
├── index.ts # -> this is split into multiple files in 6.7.0
└── libquery_engine-darwin.dylib.node
After
generated/
└── prisma
├── client.ts
├── commonInputTypes.ts
├── enums.ts
├── index.ts
├── internal
│ ├── class.ts
│ └── prismaNamespace.ts
├── libquery_engine-darwin.dylib.node
├── models
│ ├── Post.ts
│ └── User.ts
└── models.ts
📚 Learn more in the docs.
Company news
Our team has been busy shipping more than just the ORM! Check out these articles to learn what else we've been up to recently: