Skip to content

yowainwright/prisma-migrations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

133 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Prisma Migrations

Rollback and programmatic migrations for Prisma

npm codecov License: MIT

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.

Installation

npm install prisma-migrations @prisma/client prisma

Quick Start

# Create a migration
npx prisma-migrations create add_users_table

# Run it
npx prisma-migrations up

# Roll back
npx prisma-migrations down

Migration 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;

CLI

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 all

Programmatic API

import { 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();

Production Safety

  • 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`);
}

Documentation

Full documentation: jeffry.in/prisma-migrations

Development

bun install
bun run build
bun test

License

MIT

About

friendly prisma migration tooling

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors