๐ Help us spread the word about Prisma by starring the repo or tweeting about the release. ๐
Highlights
JSON protocol Early Preview
This release introduces an early Preview feature: JSON protocol.
If you have been using Prisma for a while, read our documentation about our Query Engine or peeked at our codebase, you might be aware that Prisma Client uses a GraphQL-like protocol to communicate to the Query Engine when you execute a query. This was mainly because of historical reasons (Prisma was born initially from the GraphQL backend-as-a-service โGraphcoolโ) and wasn't changed as it worked well.
During performance investigations and optimizations, though, we noticed that GraphQL added a CPU and memory overhead that was especially noticeable for larger Prisma schemas. Therefore, we found an alternative way to express our queries without needing that overhead: JSON.
To try out the new protocol, enable the jsonProtocol
Preview feature in your Prisma schema:
generator client {
provider = "prisma-client-js"
previewFeatures = ["jsonProtocol"]
}
Regenerate Prisma Client to use the new JSON protocol.
For environments or situations where it is not viable to enable the Preview feature flag to your Prisma schema file, we also added an environment variable that you can use to force the use of the JSON Protocol Preview feature: PRISMA_ENGINE_PROTOCOL=json
.
Note: This is an early Preview feature with a significant limitation: Invalid input to Prisma Client will throw unpolished, internal errors that are less descriptive and user-friendly than our usual ones. We intend to improve these future releases.
We expect using jsonProtocol
to improve Prisma Client's startup performance significantly. This will likely have a more significant impact on applications with larger Prisma schemas.
We would appreciate your feedback on this feature on the following particularly:
- Does using this preview feature introduce any regressions or problems in your application?
- If not, how does it influence the performance of your application? Can you share before and after measurements?
For feedback, please comment on the GitHub feedback issue.
Introspection support for MySQL, SQL Server, and CockroachDB views
You can now run prisma db pull
against your database to populate your Prisma schema with your views in MySQL, SQL Server, and CockroachDB.
To learn more, refer to our documentation on views introspection. Try it out and let us know your thoughts in this GitHub issue.
Webpack plugin for Next.js apps using Prisma in monorepo setups
If you've been using Prisma Client in a Next.js app in a monorepo setup, you might have seen this infamous error message:
Error: ENOENT: no such file or directory, open schema.prisma
We finally pinpointed the problem's source to the Next.js bundling step and opened an issue in the Next.js repository for Vercel to investigate and hopefully fix it.
In the meantime, we've created a workaround via a webpack plugin that makes sure your Prisma schema is copied to the correct location: @prisma/nextjs-monorepo-workaround-plugin
.
To use the plugin, first install it:
npm install -D @prisma/nextjs-monorepo-workaround-plugin
Import the plugin into your next.config.js
file and use it in config.plugins
:
const { PrismaPlugin } = require('@prisma/nextjs-monorepo-workaround-plugin')
module.exports = {
webpack: (config, { isServer }) => {
if (isServer) {
config.plugins = [...config.plugins, new PrismaPlugin()]
}
return config
},
}
For further information, refer to our documentation to learn how to use it and open an issue if it doesn't work as expected.
Fixes and improvements
Prisma Client
- Prisma hangs when javascript is minified
- Issue with prisma failing to locate schema file in monorepo
- NextJS try to open "schema.prisma" at wrong path.
- pnpm workspace + nextjs:
ENOENT: no such file or directory, open '...\.next\server\pages\api\schema.prisma'
- next.js ENOENT trying to open schema.prisma
- Error with custom output in NPM monorepo:
Error: ENOENT: no such file or directory, open 'schema.prisma'
- Error with custom output in Turborepo using Blitz.js: Error: ENOENT: no such file or directory, open '<...>/schema.prisma'
- Upsert fails on Postgres with list column.
- Error received when connecting items in an existing one-to-many relationship on MySQL
ENOENT
with custom output and ESM module in NPM monorepo (including Nextjs):no such file or directory, open /.../schema.prisma...
- Setting
ignoreEnvVarErrors: true
Node API QE causesdatasourceOverrides
to be ignored - PCE: Support query extensions for raw queries
Prisma Migrate
- sslaccept=accept_invalid_certs not working with mysql server 8.0.30
- Error 08S01 (1043) -> Bad Handshake. MySQL Connection with SSL certs
- Introspection of MySQL views
- Introspection of SQL Server views
- Introspection of CockroachDB views
db pull
: add new codes for introspection warnings for views in the CLI- Figure out where getDMMF is used for validation
- Error when
directUrl
isprisma://
connection string - 4.10.0, unexpected:
errorCode: 'P1012' PrismaClientInitializationError: error: Environment variable not found: DATABASE_URL.
- Validation output is now always colored, also in CI
- Prisma Client falsely validates
directUrl
env var value, leading to validation error (Affects PDP/Data Proxy and normal Engine) - Fix Postgres introspection of partition tables false positives on inherited tables
- Support openSUSE Tumbleweed
- Change
validate
to returnResult<(), JsError>
inWasm
module - (internal): add unit tests for path-specific libssl version parsing
Credits
Huge thanks to @KhooHaoYit, @rintaun, @ivan, @Mini256, @Lioness100, @yukukotani, @sandrewTx08, @fubhy, @zachtil, @unflxw, @Mosaab-Emam for helping!
๐บ Join us for another "What's new in Prisma" live stream
Learn about the latest release and other news from the Prisma community by joining us for another "What's new in Prisma" live stream.
The stream takes place on YouTube on Thursday, March 2 at 5 pm Berlin | 8 am San Francisco.