Prisma Client is an auto-generated, type-safe and modern JavaScript/TypeScript ORM for Node.js that's tailored to your data. Supports PostgreSQL, CockroachDB, MySQL, MariaDB, SQL Server, SQLite & MongoDB databases.
Last release 2 days ago
01 Sep 2026
Ships fairly regularly
a new release about every 1 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
7 years old
10657 releases · first in 2020
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Today, we are issuing the 2.1.3 patch release.
Nothing published for this version
Today, we are issuing the 2.1.2 patch release.
Nothing published for this version
Nothing published for this version
Today, we are issuing the 2.1.1 patch release.
prisma migrate Nothing published for this version
Today, we are issuing the 2.1.0 stable release.
Next to a lot of bug fixes, this version includes a number of new features.
Json data in Prisma ClientWhen querying data, you can now perform basic filtering with Json fields using equal and not:
const jsonData = [
{
array1key: 'array1value',
},
]
// `equal` filter. Return all posts with this particular `jsonData`
const result = await prisma.post.findMany({
where: {
jsonData
},
})
// `not` filter. Return all posts, which don't have this `jsonData`
const result = await prisma.post.findMany({
where: {
jsonData: { not: jsonData }
},
})
📚 Documentation: Working with Json fields
<details><summary>Expand to view a Prisma schema for this example</summary>
A sample Prisma schema for the example above could look like this:
model Post {
id Int @id @default(autoincrement())
title String
content String?
jsonData Json
}
</details>
You can now hide the Prisma CLI update notifier message by setting the environment variable PRISMA_HIDE_UPDATE_MESSAGE (e.g. to "1", "true" or "asd").
export PRISMA_HIDE_UPDATE_MESSAGE="1"
Under the hood, we enabled prepared statement caching for PostgreSQL. This way Prisma Client's query engine does not repeatedly prepare the same statement but can reuse an existing one which reduces database CPU usage and query latency.
The Prisma VSCode extension received an extraordinary number of tiny fixes this release, which will make using it much more pleasant. Give it a try!
With the GA release of Prisma 2.0, you can expect much more stable releases in the future. At the same time, we of course want to be able to release new features that are fresh from our developers for you to try out. This is the best way we can get them stable enough to be generally available.
We are doing this with experimental features.
🚨 The following features are not part of our official and stable API and may be changed or removed completely in a future release.
With this release, we introduce feature flags for Prisma Client. Similar to the --experimental flag in the CLI (for prisma studio and prisma migrate), this enables us to hide functionality from the default API that all users get when installing Prisma and Prisma Client. Instead, users can explicitly opt-in to certain features by enabling them via the new experimentalFeatures field on the Prisma Client generator definition in their Prisma schema.
The experimentalFeatures field can be set like this:
generator client {
provider = "prisma-client-js"
experimentalFeatures = ["connectOrCreate", "transactionApi"]
}
Read more below to learn about the connectOrCreate and transactionApi experimental features.
connectOrCreateWhen updating or creating a record, we now provide a new operation as a nested mutation: connectOrCreate.
You can connect (if exists) or create (if it doesn't exist) to a related row.
📚 Documentation: Relation queries: connectOrCreate
In this example, we create a new post and connect it to an author with the email address [email protected]. If that author doesn't exist yet, create it with the name "Alice".
await prisma.post.create({
data: {
title: 'Prisma 2.1.0',
author: {
connectOrCreate: {
where: {
email: "[email protected]"
},
create: {
name: "Alice",
email: "[email protected]"
}
}
}
}
})
To enable connectOrCreate, you can use the feature flag connectOrCreate in your Prisma schema file:
generator client {
provider = "prisma-client-js"
experimentalFeatures = ["connectOrCreate"]
}
Please share your feedback on how this feature works for you. We are interested in both positive and negative feedback, so we know if this feature is already ready for production! (If encounter any problems, please open a new issue here).
transactionApiWhile Prisma already ships transactions within nested writes, there are many use cases, where you might want to perform multiple unrelated write operations in a transaction and rollback, if one of them fails. By wrapping your write operations in the new transaction() function, you can achieve exactly this!
(Note, that these transactions are not long-running and are executed directly after each other. This is an explicit design decision of Prisma. In case this does not cover your use case yet, please chime in on GitHub).
//run inside `async` function
await prisma.transaction([
prisma.user.create({
data: {
email: "[email protected]",
},
}),
prisma.user.create({
data: {
email: "[email protected]",
},
}),
])
Alternatively, you can store the unresolved promises in variables and pass these to the new transaction function:
const userOperation1 = prisma.user.create({
data: {
email: "[email protected]",
},
})
const userOperation2 = prisma.user.create({
data: {
email: "[email protected]",
},
})
//run inside `async` function
await prisma.transaction([userOperation1, userOperation2])
To enable the experimental transaction api, you can use the feature flag transactionApi in your Prisma schema file:
generator client {
provider = "prisma-client-js"
experimentalFeatures = ["transactionApi"]
}
Please leave feedback on how this feature works for you https://github.com/prisma/prisma-client-js/issues/667. We are interested in both positive and negative feedback, so we know if this feature is already ready for production. (If there are problems you can also open a new issue here).
In the Prisma CLI, we are using dedicated experimental flags that can be added to any command.
One common problem when using Prisma is that manual changes to your Prisma schema are overwritten the next time you run prisma introspect. This version adds an experimental mode for this functionality where we try to keep some of these changes:
You enable this by supplying the --experimental-reintrospection flag to prisma introspect:
npx prisma introspect --experimental-reintrospection
Please leave feedback on how this feature works for you https://github.com/prisma/prisma/issues/2829. We are interested in both positive and negative feedback, so we know if this feature is already ready for production. (If there are problems you can also open a new issue at here).
prismaOption::unwrap() on a None value"prisma init to supply connection string to be used in datasourcegenerate/validateEnvironment variables loaded from uses wrong directory separator (slashes) on Windows@prisma/debug logs in testsdatasources in Prisma Client constructor parametersprisma-client-jsJsonFilter input has no fieldscreate and update__internal from typesvscodetype_alias from auto-completion studioprisma-enginesNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version