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.
Today, we are issuing the 2.4.0 stable release.
๐ Help us spread the word about Prisma by starring the repo โ๏ธ or tweeting about the release ๐
A long-awaited feature - the ability to order by multiple fields in Prisma Client is finally here!
Until now you could only order by a single scalar field of a model. The API design however was already prepared for ordering multiple fields with the object syntax we have. Instead of just one property, that orderBy object can now have as many fields as you want! The order of the fields hereby determines the order of the returned list (see example below).
Note: As this is an incremental change in the API, we introduce this feature without a feature flag.
You can use it like so:
// order by `age` descending and then by `name` ascending
const users = await prisma.user.findMany({
orderBy: {
age: 'desc',
name: 'asc'
}
})
As mentioned by the comment, the returned objects in users are ordered first by age (descending), and then by name (ascending).
๐ Documentation: Sort on multiple fields
$ dollar prefix for top-level Prisma Client methodsIn recent versions, we introduced a couple of top-level methods in Prisma Client (e.g. prisma.transaction() and prisma.use()) in preview mode. The immediate feedback was that the denylist for model names grew - which breaks Prisma schemas where a model is called Transaction, transaction, use, or Use. And the list goes on...
In order to have a future-proof API, that allows maximum expressibility in terms of model names, we decided to prefix all non-query methods with a dollar sign $. That means Prisma Client will from now on ship with the following methods:
$disconnect$connect$on$queryRaw$executeRaw$use$transactionThe preview methods have already been renamed, the pre-existing methods like connect are still available, you just get a deprecation warning. They will be available for a few more releases with an alias, so no hurry to update them yet.
<!-- > Note: The mental model here now becomes very simple - everything with a $ comes from Prisma, everything without a $ (e.g. prisma.user.findMany()) comes from your schema. -->
With this release, we shipped a number of improvements for Prisma Studio:
Try out Prisma Studio in the online demo or in your Prisma project by running:
npx prisma studio --experimental
middlewares and transactionApiAs mentioned above, we ar changing the names of some the top-level Prisma Client methods. This affects the two preview features middlewares and transactionApi.
middlewaresYou still need to enable the preview feature via the generator block in your Prisma schema to access it:
generator client {
provider = "prisma-client-js"
previewFeatures = ["middlewares"]
}
Before
prisma.on()
After
prisma.$on()
transactionApiYou still need to enable the preview feature via the generator block in your Prisma schema to access it:
generator client {
provider = "prisma-client-js"
previewFeatures = ["transactionApi"]
}
Before
prisma.transaction()
After
prisma.$transaction()
2.1.0, 2.2.0, and 2.3.0Just a quick reminder:
2.1.0 we introduced two experimental features, namely connectOrCreate and transactionApi.2.2.0 we introduced aggregateApi.2.3.0 we introduced middlewares and the distinctApi.In case they're useful for you, please give them a try and share your feedback! These features remain in preview in this release.
To help spread the word about Prisma, we'd very much appreciate if you would star this repo ๐ And if you're excited about the features in this week's release, then help us and share it on Twitter.
prisma@default("") for String fieldsCreateInput and UpdateInput have different typings for optional relations@relation field after introspectionoutput is specified on generator@@map and @map with argument name loses the name after re-introspection@map will get option commented if it invalid without map{ where: { non_fk_field: null } }prisma-client-jsmigratelanguage-toolsstudioprisma-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
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