Rollback and programmatic migrations for Prisma
Adds up/down migrations, rollback, and programmatic API to Prisma. Compatible with Prisma 5, 6, and 7.
| Feature | Prisma Migrate | This Tool |
|---|---|---|
| Run migrations forward | Yes | Yes |
| Rollback migrations | No | Yes |
| Run from Node.js code | No | Yes |
| Step-by-step control | No | Yes |
Uses Prisma's _prisma_migrations table. Works alongside prisma migrate.
npm install prisma-migrations @prisma/client prisma# Create a migration
npx prisma-migrations create add_users_table
# Run it
npx prisma-migrations up
# Roll back
npx prisma-migrations downMigration file (prisma/migrations/[timestamp]_add_users_table/migration.sql):
-- Migration: Up
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL
);
-- Migration: Down
DROP TABLE IF EXISTS users;npx prisma-migrations up # Run all pending
npx prisma-migrations up --steps 2 # Run next 2
npx prisma-migrations down # Rollback last
npx prisma-migrations down --steps 3 # Rollback last 3
npx prisma-migrations status # Check status
npx prisma-migrations reset --force # Rollback allimport { Migrations } from 'prisma-migrations';
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
const migrations = new Migrations(prisma);
await migrations.up(); // Run all pending
await migrations.down(); // Rollback last
await migrations.pending(); // Get pending list
await prisma.$disconnect();- Transactions: Migrations run in database transactions with automatic rollback on failure
- Lock Protection: Advisory locks prevent concurrent migration runs
- Checksum Validation: Detects if applied migrations have been modified
For concurrent deployments:
const result = await migrations.upIfNotLocked();
if (result.ran) {
console.log(`Applied ${result.count} migrations`);
}Full documentation: jeffry.in/prisma-migrations
bun install
bun run build
bun testMIT