# Prisma v8.0.0-rc.23 — Release & Upgrade Intelligence
- **Product:** Prisma (https://prisma.io)
- **Version:** v8.0.0-rc.23
- **Released:** Nov 06, 2026
- **Impact Score:** 7/10
- **Breaking Changes:** Source flagged
- **Canonical Analysis:** https://changelogs.us/prisma/updates/v8.0.0-rc.23/

## Executive Summary (TL;DR)
Prisma v8.0.0-rc.23. Source highlight: MongoDB indexes carry their names, and migrations create and drop each index by its name. On PostgreSQL, `Int`, `BigInt`, `Float`, `Decimal`, `String`, `Boolean` and `Bytes` become convenience types, and SQLite and MySQL get the convenience date and time types. The pgvector, PostGIS, ParadeDB and ci

## Breaking Changes & Deprecations
- The upgrade recipes for this hop: the [app recipe](https://github.com/prisma/orm/blob/v8.0.0-rc.23/skills/prisma-8/upgrading/app/upgrades/8.0.0-rc.22-to-8.0.0-rc.23/) and the [extension recipe](https://github.com/prisma/orm/blob/v8.0.0-rc.23/skills/prisma-8/upgrading/extension/upgrades/8.0.0-rc.22-to-8.0.0-rc.23/). Each breaking change below names the change ids to look for in them. The app recipe opens with the order to do the steps in. After upgrading, run `prisma contract emit` once, so a contract that an extension such as Supabase stamps with its version matches the installed package (`con
- Breaking changes - **MongoDB indexes carry their names.** Every index of a MongoDB contract records the name MongoDB stores it under, so every MongoDB contract with an index gets a new storage hash. An index written without a name is named after its keys, such as `email_1`, the name earlier releases already gave it in the database, so no database changes. Migrations create and drop each index by that name, and an operation id names the index, as in `index.users.create(email_1)`. Two indexes of one collection that would get one name, such as a unique and a sparse index on `email`, are refused; 

## New Features
- **`temporal-polyfill` is a peer dependency of the MySQL and SQLite packages.** The MySQL and SQLite control planes, such as the `prisma` commands, now import it. npm, pnpm and bun install it for you. A project that installs with Yarn adds `temporal-polyfill` (`^1.0.4`) to its dependencies. A MySQL `DateTime` field now refuses to write a year before 1000 or after 9999 with `RUNTIME.ENCODE_FAILED`. On SQLite, `db verify` reads a database default of `date('now')` as the current date, so it matches 
- On PostgreSQL, `Int`, `BigInt`, `Float`, `Decimal`, `String`, `Boolean` and `Bytes` are convenience types, as `DateTime` is. Each is named for what a field means, and its optional `storage` argument (and `as`, for `BigInt`) chooses an explicit type named after the database type, such as `Int(storage: int2)` for `Int2` or `BigInt(as: number)` for `Int8Number`. Written bare, each gives the same type as before, so every existing schema emits the same contract. (#30942)
- SQLite and MySQL get the convenience types `DateTime`, `Date`, `Time` and `Duration`. `as:` chooses the value the application reads, such as a JavaScript `Date`, a string or a `Temporal` value, and on MySQL `storage:` chooses the column, such as `DateTime(storage: timestamp)`. A bare `DateTime` is the type `DateTime` was before, so every existing SQLite and MySQL contract emits the same. (#30922, #30950)
- ORM `create`, `update`, `upsert` and `delete` work on MySQL and return the written rows, as on PostgreSQL. MySQL has no `RETURNING`, so the ORM writes and then reads the rows back by their key in the same transaction. (#30927)
- `supabase()` takes the options `postgres()` takes, including `cursor`, which streams rows from a server-side cursor, and `binding`. (#30920)
- A Supabase database whose pgvector, PostGIS, ParadeDB or citext extension lives in schema `extensions` adopts Prisma 8 with `prisma contract emit` and `prisma db sign`. (#30956)

## Bug Fixes
- Migration statements cover value objects and variants on PostgreSQL and SQLite. `prisma migration plan` and `db update` take `--rename GeoPoint.lat:GeoPoint.latitude`, `--delete GeoPoint.lng` and `--backfill GeoPoint.country` for a value object field, rename or delete an enum value a value object holds, and take `--convert Bug` or `--delete Bug` for a variant whose discriminator value changed or that was removed. Each statement acts on every column that holds the value object. A failed migration
- Prisma ORM no longer refuses to start when it is loaded from more than one copy. `RUNTIME.MULTIPLE_ORM_COPIES`, added in 8.0.0-rc.22, is removed for now, because a host that loads the ORM in two module instances, such as Prisma Composer's boot wrapper beside the app bundle, cannot satisfy it. A narrower check may return later. Installing one version of every `@prisma/orm-*` package is still required: values made by one copy are not recognised by another. (#30961)
- A released Supabase role session resets its role. Before, its connection went back to the pool still running as the session's role, such as `authenticated`, so the next user of that connection ran under that role. (#30920)
- On MySQL, stopping a stream early on a large result no longer ends the process with an unhandled rejection. The driver interrupts the statement itself before it closes the connection. (#30931)
