prisma-8

Use when working in a project that depends on @prisma/orm-postgres, @prisma/orm-sqlite, or @prisma/orm-mongo (Prisma 8, formerly Prisma Next): editing contract.prisma or a contract.ts builder, running `prisma contract emit`, planning or applying migrations, editing migration.ts, writing db.orm / db.sql / db.query queries, wiring db.ts or middleware, integrating a build tool, using the Supabase extension or RLS, or reading a dotted error code such as MIGRATION.HASH_MISMATCH. Use when the user asks "what is Prisma 8", "where do I start", or compares it to another ORM. Use when the user asks to upgrade or bump Prisma 8 in an app or an extension package. Use when you see @internal/* or @prisma/orm-* imports, prisma.config.ts with definePrismaConfig, or contract.json / contract.d.ts. Do not use for Prisma ORM 7 or earlier (schema.prisma + @prisma/client).

Install
npx skills add 'https://github.com/prisma/orm/tree/main/skills/prisma-8'
Download bundle ↓
main · fac8604Scanned 2026-09-17

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included.

File history ↗

upgrading/app/upgrades/8.0.0-rc.8-to-8.0.0-rc.9/instructions.md

upgrading/app/upgrades/8.0.0-rc.8-to-8.0.0-rc.9/instructions.mdBrowse 76 files
View on GitHub
← Back to SKILL.md

from: "8.0.0-rc.8" to: "8.0.0-rc.9" changes:

  • id: reemit-supabase-extension-version summary: | Re-emit contracts using the Supabase extension so their extension version metadata matches the installed rc.9 package.
  • id: mongo-index-projections-use-native-lists summary: | MongoDB wildcard index include and exclude projections in Prisma schema files must use native PSL lists instead of encoded list strings. detection: glob: "**/.prisma" matches: - '\b(?:include|exclude)\s:\s*"[[^"\r\n]*]"'
  • id: mongo-text-index-weights-use-native-records summary: | MongoDB text-index weights in Prisma schema files must use native PSL records instead of encoded JSON strings. detection: glob: "**/.prisma" matches: - '\bweights\s:\s*"{\s*(?:\.|[^"\])*}"'
  • id: explicit-enum-sort-values summary: | PostgreSQL text-backed enums now sort by stored value rather than declaration order; encode semantic ranks explicitly when ordering matters.
  • id: namespace-qualify-sql-orm-filter-types summary: | SQL ORM reusable filter types now require the domain namespace before the model name: <Contract, Namespace, Model>.
  • id: mongo-unlowered-attributes-are-rejected summary: | MongoDB Prisma schema files must not carry @default(...), @updatedAt, or @db.* attributes; the Mongo interpreter never lowered them and now rejects them. detection: glob: "**/*.prisma" matches: - '@(?:default(|updatedAt\b|db.)'

8.0.0-rc.8 → 8.0.0-rc.9 — User upgrade instructions

reemit-supabase-extension-version

After updating the Supabase extension to rc.9, run prisma contract emit for each contract that uses it and commit the regenerated contract.json and contract.d.ts. Verify that the Supabase extension's version metadata is 8.0.0-rc.9 in both artifacts; do not edit generated contracts by hand.

mongo-index-projections-use-native-lists

For every Prisma schema matched by detection, replace encoded projection strings with native PSL lists. For example, change include: "[a, b]" to include: ["a", "b"] and exclude: "[a]" to exclude: ["a"]. Decode each string's fields in their existing order and preserve whether the argument is include or exclude.

mongo-text-index-weights-use-native-records

For every Prisma schema matched by detection, replace the encoded JSON string passed to weights with a native PSL record. For example, change weights: "{\"title\": 10}" to weights: { title: 10 }, preserving every field name and numeric weight.

explicit-enum-sort-values

Review queries that order text-backed enum columns and rely on declaration order. To retain semantic ranking, use an explicit ranking expression or numeric enum values. For example, a priority enum can use { codecId: 'pg/int4@1', nativeType: 'int4' } with member('Low', 0), member('High', 1), and member('Urgent', 2). In PSL, use @@type("pg/int4@1") with Low = 0, High = 1, and Urgent = 2. Update literal writes and type annotations to the numeric values, then re-emit the contract. For an existing database, create a data-preserving migration mapping the old strings to their numeric ranks and update defaults and constraints; do not rewrite applied migration history. PostgreSQL native enum columns retain the database's native ordering.

namespace-qualify-sql-orm-filter-types

Find TypeScript references to ShorthandWhereFilter, RelationPredicate, RelationPredicateInput, and RelationFilterAccessor. Add the model's domain namespace as the second generic argument and place the model name third. Rewrite ShorthandWhereFilter<Contract, Model> as ShorthandWhereFilter<Contract, Namespace, Model> and ShorthandWhereFilter<Contract, Model, Namespace> as ShorthandWhereFilter<Contract, Namespace, Model>. Rewrite the relation types from <Contract, Model> to <Contract, Namespace, Model>. Use the namespace facet through which the model is queried, such as 'public' for db.public.User.

mongo-unlowered-attributes-are-rejected

First, before editing any schema, determine whether the project targets MongoDB: its prisma.config.ts imports @prisma/orm-mongo, or its package.json depends on that package. If neither holds, skip this change entirely and leave every schema untouched. The detection pattern also matches SQL schemas, where @default(...) and @db.<Type> are supported and deleting them breaks the contract.

For every matched MongoDB schema, delete each @default(...), @updatedAt, and @db.<Type> attribute from the field that carries it, leaving the field's type and its other attributes in place. For example, change status ProductStatus @default(Active) to status ProductStatus and updatedAt DateTime @updatedAt to updatedAt DateTime. The Mongo interpreter never lowered these attributes into the contract, so the emitted contract.json does not change; defaults and timestamps stay the responsibility of application code, as they already were. prisma contract emit now fails with PSL_UNSUPPORTED_FIELD_ATTRIBUTE while any of them remain.