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[]
}
β οΈΒ Note that there have been breaking changes to the 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: