agentsclimarketplace

Zenstack migrate from prisma

Skill zenstackhq/skills/skills/zenstack-migrate-from-prisma

Migrate an existing Prisma project to ZenStack V3. Use when replacing Prisma/@prisma/client with ZenStack, converting schema.prisma to ZModel, swapping PrismaClient for ZenStackClient, updating generate/migrate scripts, mapping Prisma custom generators and client extensions, or keeping Prisma migrate tooling working.From its SKILL.md

Install
npx -y skills add zenstackhq/skills --skill zenstack-migrate-from-prisma

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • reads credentialsReads from 1 credential source: `process.env.DATABASE_URL`.
  • 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 5 commands, including `npm uninstall prisma @prisma/client` and 4 more.

SKILL.md

5.9 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

Migrating from Prisma to ZenStack V3

ZenStack V3 is designed as a drop-in upgrade path for Prisma: it keeps a Prisma-compatible query API and a schema language (ZModel) that is a superset of the Prisma schema. Most apps migrate with mechanical changes and no query rewrites. Supported databases: PostgreSQL, MySQL, SQLite.

For general setup/CLI details see zenstack-project-setup; for the client/dialect see zenstack-querying; for schema syntax see zenstack-schema-modeling.

At a glance

PrismaZenStack V3
prisma, @prisma/client@zenstackhq/cli (dev), @zenstackhq/schema, @zenstackhq/orm
schema.prismazenstack/schema.zmodel (Prisma schema is valid ZModel)
prisma generatezen generate
prisma db push / migrate dev / migrate deployzen db push / zen migrate dev / zen migrate deploy
new PrismaClient()new ZenStackClient(schema, { dialect })
bundled DB engineyou install a DB driver (pg / mysql2 / better-sqlite3)

Step 1 — Swap dependencies

npm uninstall prisma @prisma/client
npm install @zenstackhq/schema @zenstackhq/orm
npm install --save-dev @zenstackhq/cli

ZenStack does not bundle a database engine — install the driver for your database:

DatabaseInstall
PostgreSQLnpm install pg + npm install -D @types/pg
MySQLnpm install mysql2
SQLitenpm install better-sqlite3 + npm install -D @types/better-sqlite3

@zenstackhq/cli has a peer dependency on prisma, which is installed automatically when needed for migration commands (ZenStack's migrate commands wrap Prisma Migrate).

Step 2 — Move and rename the schema

Move schema.prisma → zenstack/schema.zmodel. No edits are required — every valid Prisma schema is valid ZModel. Optional cleanup:

  • Drop the generator client { ... } block (no effect in ZenStack — code gen is driven by zen generate).
  • The datasource block is kept; its url is used by the migration engine (the ORM runtime gets its connection from the driver/dialect instead).
  • If you used Prisma's multi-file/multi-schema feature, merge files using ZModel import statements.

Run zen check to confirm the converted schema is valid (syntax + semantics) before moving on.

Once moved, you can start adding ZenStack-only features that Prisma lacks — access policies (zenstack-access-control), @@delegate polymorphism, typed JSON, mixins, computed fields (zenstack-schema-modeling).

Step 3 — Update the generate script

{ "scripts": { "generate": "zen generate" } }

Run zen generate after every schema change, before using the client.

Step 4 — Replace the client

Swap new PrismaClient() for new ZenStackClient(schema, { dialect }), supplying a Kysely dialect for your driver (see zenstack-querying for all dialects). PostgreSQL example:

import { ZenStackClient } from '@zenstackhq/orm';
import { PostgresDialect } from '@zenstackhq/orm/dialects/postgres';
import { schema } from './zenstack/schema';
import { Pool } from 'pg';

export const db = new ZenStackClient(schema, {
    dialect: new PostgresDialect({
        pool: new Pool({ connectionString: process.env.DATABASE_URL }),
    }),
});

Your existing findMany/create/update/etc. calls keep working — the ORM API is Prisma-compatible.

Step 5 — Update type references

  • Model types (e.g. User) — import from the generated models.
  • Input/argument types (e.g. UserCreateArgs) — import from the generated input.

Most code relies on inferred types and needs no explicit imports.

Step 6 — Update migration scripts

{
  "scripts": {
    "db:push": "zen db push",
    "migrate:dev": "zen migrate dev",
    "migrate:deploy": "zen migrate deploy"
  }
}

Move your existing migration history from prisma/migrations to zenstack/migrations (ZenStack's default location, next to zenstack/schema.zmodel). It continues to work unchanged since ZenStack migrate wraps Prisma Migrate. See the zenstack-db-migration skill for the full migration workflow.

Special case — Prisma custom generators

If you depend on Prisma custom generators (e.g. zod, ERD, type generators) that read a schema.prisma, keep emitting one with the @core/prisma plugin and chain the commands:

plugin prisma {
    provider = '@core/prisma'
    output = './schema.prisma'
}
{ "scripts": { "generate": "zen generate && prisma generate --schema=zenstack/schema.prisma" } }

Mapping Prisma Client extensions

Prisma extensionZenStack equivalent
Query extension (intercept calls)A runtime plugin via db.$use(...) with an onQuery hook
Result extension (computed fields)@computed field in ZModel + the computedFields option on ZenStackClient (see zenstack-schema-modeling)

After migrating

Verify with: zen generate → typecheck → run your test suite / app. Then incrementally adopt ZenStack's value-add features (access control, query builder escape hatch, auto CRUD APIs via zenstack-crud-server).

Already on ZenStack V2? Start here (V2 was Prisma-based), then apply the V2→V3 deltas in zenstack-project-setup (package renames, policy plugin, post-update/before(), types+mixins, grouped hooks).

Reference docs

Full ZenStack documentation for this topic is bundled under references/:

What ships with it: 1 file

37 B alongside SKILL.md

references/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.