Migration Strategies

Learn how to manage database schema changes effectively with Stabilize ORM

CLI Commands

terminal
❯bunx stabilize-cli generate:migration User
terminal
❯bunx stabilize-cli migrate
terminal
❯bunx stabilize-cli migrate:rollback
terminal
❯bunx stabilize-cli migrate:fresh --force
terminal
❯bunx stabilize-cli status

Programmatic Migration

scripts/migrate.ts
import { generateMigration, runMigrations, DBType } from "stabilize-orm";
import { User } from "./models/User";
// Generate migration from model
const migration = await generateMigration(User, "create_users", DBType.SQLite);
console.log("SQL:", migration.up[0]);
// Run migrations
await runMigrations(
{ type: DBType.SQLite, connectionString: "./data/app.db" },
[migration]
);

What Gets Generated

  • Table creation with correct column types per database
  • Auto-increment primary key for id columns
  • NOT NULL for required columns
  • UNIQUE for unique columns
  • DEFAULT values and expressions
  • Timestamp columns from timestamps config
  • History table if versioned: true

Best Practices

  • Always review generated migrations before running
  • Test migrations on a copy of production data
  • Never modify existing migrations after deployment
  • Use migrate:fresh only in development
  • Back up your database before production migrations
  • Use status to check which migrations are applied