DEV Community

Cover image for Prisma 7: They Ditched Rust and Everything Got Faster
Muhammad Usman
Muhammad Usman

Posted on • Originally published at pixicstudio.Medium

Prisma 7: They Ditched Rust and Everything Got Faster

Prisma 7 just launched, and this isn’t your typical point release. We’re talking a complete rewrite from Rust to TypeScript, 90% smaller bundles, 3× faster queries, and a type system that actually checks faster than the competition. Let me break down what matters and what you need to change.

Please support my original piece of work that is published here:
Prisma 7: They Ditched Rust and Everything Got Faster

The Big Move From Prisma 7

Prisma did something that sounds backwards, they migrated their entire client runtime from Rust to TypeScript. Yeah, you read that right. Rust is supposed to be the fast language, so why move away?

Turns out, the JavaScript-to-Rust communication layer was the bottleneck. Not the Rust code itself.

The results speak for themselves:

  • 90% smaller bundle output
  • 3× faster query execution
  • Significantly lower CPU and memory usage
  • Cloudflare Workers and Vercel Edge deployments just work now

No infrastructure-specific hacks. No binary compatibility nightmares. Just JavaScript talking to JavaScript.

Deno’s team said it best, dealing with native addons made supporting Prisma complex. The Rust-free version? Much simpler.

Plus, moving to TypeScript opens up contributions. You don’t need to be a Rust expert anymore to contribute to Prisma’s codebase.

Your Code Generation Lives in Your Project Now

Remember how Prisma always generated code into node_modules? That's gone.

Generated client and types now require an output path in your schema. You specify where they go — typically inside your src directory.

generator client {
  provider = "prisma-client"
  output   = "../generated/prisma"
}
Enter fullscreen mode Exit fullscreen mode

Your file watchers see them. Your dev tools react to them. Hot reload actually works the way you expect.

Make a schema change, run prisma generate, and your IDE updates instantly. Everything stays in sync without manual restarts.

This is huge for monorepos and projects with active development workflows.

New Config File That Actually Makes Sense

Say hello to prisma.config.tsa real TypeScript config file for Prisma CLI configuration.

import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
Enter fullscreen mode Exit fullscreen mode
export default defineConfig({
  schema: 'prisma/schema.prisma',
  migrations: {
    path: 'prisma/migrations',
    seed: 'tsx prisma/seed.ts',
  },
  datasource: {
    url: env('DATABASE_URL'),
  },
})
Enter fullscreen mode Exit fullscreen mode

Schema locations, migration paths, seed scripts, database URLs, all in one place. And since it’s TypeScript, you can use dynamic configuration, environment-specific logic, or whatever runtime config you need.

The file goes in your project root, right next to package.json.

Type Checking That’s Actually Fast

Prisma partnered with David Blass (the ArkType creator) to benchmark their type generation against other ORMs. The numbers are wild:

  • 98% fewer types needed to evaluate a schema
  • 45% fewer types for query evaluation
  • 70% faster full type checks

This isn’t marketing fluff. Fewer generated types means faster TypeScript Language Server response times. Your IDE stays snappy even with massive schemas.

Drizzle and TypeORM? They generate significantly more types for the same schema. More types = slower checks = slower dev experience.

Mapped Enums Finally Work

You can now use @map on enum members. Took long enough, this feature request was open since 2019.

enum PaymentProvider {
  MixplatSMS    @map("mixplat/sms")
  InternalToken @map("internal/token")
  Offline       @map("offline")
}
Enter fullscreen mode Exit fullscreen mode

Your database uses one value, your TypeScript code now gets the mapped values. This was the top-requested feature for v7.

Important note: This is a breaking change. If you were relying on the old unmapped behavior, you’ll need to update your code. The generated TypeScript will now use the mapped values directly.

Updated Prisma Studio

New version of Prisma Studio ships with v7. Access it via:

npx prisma studio
Enter fullscreen mode Exit fullscreen mode

The UI got a refresh with better data visualization, faster load times, and improved relationship navigation. Still the easiest way to browse your database without SQL.

Breaking Changes You Need to Know

Version Bumps

  • Node.js 20.19+ (Node.js 18 support dropped)
  • TypeScript 5.4.0+ (5.9.x recommended)

These aren’t optional. Prisma 7 won’t run on older versions.

Generator Provider Changed

This is the biggest breaking change in your schema file.

Old:

generator client {
  provider = "prisma-client-js"
}
Enter fullscreen mode Exit fullscreen mode

New:

generator client {
  provider = "prisma-client"
  output   = "../generated/prisma"
}
Enter fullscreen mode Exit fullscreen mode

The output field is now required. You must specify where to generate the client.

Run the codemod to fix it automatically:

npx @prisma/codemods migrate/client-generator-provider
Enter fullscreen mode Exit fullscreen mode

ES Module Support Required

Prisma ORM now ships as an ES module. Set the type field in your package.json:

{
  "type": "module"
}
Enter fullscreen mode Exit fullscreen mode

If you’re using TypeScript, update your tsconfig.json:

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "node",
    "target": "ES2023",
    "strict": true,
    "esModuleInterop": true
  }
}
Enter fullscreen mode Exit fullscreen mode

Environment Variables Don’t Auto-Load

Prisma 7 doesn’t load .env files automatically anymore. You need to handle this yourself.

// At the top of your prisma.config.ts
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
Enter fullscreen mode Exit fullscreen mode
export default defineConfig({
  datasource: {
    url: env('DATABASE_URL'),
  },
})
Enter fullscreen mode Exit fullscreen mode

Or use --env-file with Node.js 20+:

node --env-file=.env index.js
Enter fullscreen mode Exit fullscreen mode

For Bun users: No action needed. Bun automatically loads .env files.

This gives you more control over environment loading but requires explicit setup.

MongoDB Not Supported Yet

If you’re using MongoDB with Prisma, stay on v6 for now. MongoDB support is coming in a future release.

Don’t upgrade production MongoDB projects yet.

Driver Adapters Now Required

All databases now require a driver adapter. This change aligns with making Prisma Client as lean and open as possible.

For PostgreSQL:

import 'dotenv/config'
import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from './generated/prisma/client'
Enter fullscreen mode Exit fullscreen mode
const adapter = new PrismaPg({ 
  connectionString: process.env.DATABASE_URL 
})
const prisma = new PrismaClient({ adapter })
Enter fullscreen mode Exit fullscreen mode

For SQLite:

import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3'
import { PrismaClient } from './generated/prisma/client'
Enter fullscreen mode Exit fullscreen mode
const adapter = new PrismaBetterSqlite3({
  url: process.env.DATABASE_URL || 'file:./dev.db'
})
const prisma = new PrismaClient({ adapter })
Enter fullscreen mode Exit fullscreen mode

You’ll need to install the appropriate adapter:

npm install @prisma/adapter-pg pg @types/pg
# or
npm install @prisma/adapter-better-sqlite3
Enter fullscreen mode Exit fullscreen mode

Client Middleware Removed

The client middleware API has been removed. Use Client Extensions instead.

Old (removed):

prisma.$use(async (params, next) => {
  // middleware logic
  return next(params)
})
Enter fullscreen mode Exit fullscreen mode

New (use extensions):

const prisma = new PrismaClient().$extends({
  query: {
    user: {
      async findMany({ args, query }) {
        // extension logic
        return query(args)
      }
    }
  }
})
Enter fullscreen mode Exit fullscreen mode

Metrics Preview Feature Removed

The Metrics preview feature was deprecated in 6.14.0 and removed in 7.0.0. If you need metrics, use the underlying driver adapter or Client Extensions to expose this information.

Prisma Postgres: Managed Database Built for Developers

Prisma now ships with a managed Postgres offering. Built on bare-metal infrastructure with unikernel microVMs. Translation: fast and stays fast.

Getting started is one command:

npx create-db@latest
Enter fullscreen mode Exit fullscreen mode

This creates a temporary 24-hour database that you can claim to make permanent. No sign-up required to test it out.

Or use the --db flag with prisma init:

npx prisma init --datasource-provider postgresql --db
Enter fullscreen mode Exit fullscreen mode

You get:

  • Database provisioned instantly
  • Connection string ready to use
  • Native Prisma ORM integration
  • Zero configuration needed

Best part? It’s standard Postgres. Any tool that speaks Postgres can connect, TablePlusRetoolCloudflare HyperdrivepgAdmin, even other ORMs.

No vendor lock-in. Just Postgres with great developer experience.

All internal Vercel apps are already running on Prisma Postgres.

Migration Path

Automated Upgrade (Recommended)

npm install @prisma/client@7
npm install -D prisma@7
Enter fullscreen mode Exit fullscreen mode

Then run the migration codemods:

npx @prisma/codemods migrate/client-generator-provider
Enter fullscreen mode Exit fullscreen mode

Manual Upgrade Steps

  1. Update your dependencies to v7
  2. Change provider = "prisma-client-js" to provider = "prisma-client" in your schema
  3. Add output = "../generated/prisma" to your generator block
  4. Add "type": "module" to your package.json
  5. Update your tsconfig.json for ES modules
  6. Create prisma.config.ts in your project root
  7. Import and configure driver adapters in your code
  8. Add import 'dotenv/config' to load environment variables

New Project

npm install prisma @prisma/client @prisma/adapter-pg pg dotenv --save-dev
npx prisma init --datasource-provider postgresql --output ../generated/prisma
Enter fullscreen mode Exit fullscreen mode

New projects get the v7 defaults automatically.

What This Means for You

Prisma 7 removes friction everywhere. Smaller bundles mean faster cold starts in serverless environments. TypeScript-native means no more binary compatibility issues with different Node versions or platforms.

Better type generation means your IDE stays responsive even with 100+ models. The new config file gives you control without complexity.

And the Rust-free client opens up the codebase to more contributors. You don’t need specialized systems programming knowledge to fix bugs or add features anymore.

This is the foundation for what comes next. Prisma’s betting on TypeScript, developer experience, and being truly platform-agnostic.

The migration is straightforward for most projects. Update your schema, add the config file, install a driver adapter, and you’re done.

Start testing the stable release. These changes will become muscle memory fast.

Did you learn something good today as a developer?
Then show some love.
© Usman Writes
WordPress Developer | Website Strategist | SEO Specialist
Don’t forget to subscribe to Developer’s Journey to show your support.

Top comments (1)

Collapse
 
web_dev-usman profile image
Muhammad Usman

Please support my piece of work that is originally published here:
Prisma 7: They Ditched Rust and Everything Got Faster