Migrations
Manage database schema changes with automatic migration generation
Generate Migrations
Use the CLI to generate migrations from your model definitions:
terminal
❯bunx stabilize-cli generate:migration User
Or generate migrations programmatically:
scripts/generate-migration.ts
import { generateMigration, DBType } from "stabilize-orm";import { User } from "./models/User";
const migration = await generateMigration(User, "create_users", DBType.Postgres);
console.log("Up:", migration.up);console.log("Down:", migration.down);// Up: CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, ...)// Down: DROP TABLE IF EXISTS usersRun Migrations
terminal
❯bunx stabilize-cli migrate
terminal
❯bunx stabilize-cli migrate:rollback
terminal
❯bunx stabilize-cli migrate:fresh --force
migrate:fresh drops all tables and re-runs migrations without seeding.
Migration Tracking
Stabilize tracks applied migrations in the stabilize_migrations table. Check status with:
terminal
❯bunx stabilize-cli status
What Gets Generated
The migration generator reads your model config and produces SQL for:
- Table creation with correct column types per database
- Auto-increment primary key for
idcolumns - NOT NULL constraints for
requiredcolumns - UNIQUE constraints for
uniquecolumns - DEFAULT values and expressions
- Timestamp columns from
timestampsconfig - 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 they've been deployed
- Use
migrate:freshonly in development - Back up your database before running migrations in production
AutoMigrate (GORM-style)
For rapid development, use autoMigrate instead of manual migrations. It automatically creates tables and adds missing columns:
app.ts
// Single modelawait orm.autoMigrate(User);
// Multiple modelsawait orm.autoMigrate([User, Post, Comment]);terminal
❯bunx stabilize-cli migrate:auto
AutoMigrate is safe — it never deletes data. See the AutoMigrate docs for details.