install
source · Clone the upstream repo
git clone https://github.com/Intense-Visions/harness-engineering
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Intense-Visions/harness-engineering "$T" && mkdir -p ~/.claude/skills && cp -r "$T/agents/skills/claude-code/drizzle-migrations" ~/.claude/skills/intense-visions-harness-engineering-drizzle-migrations-9bf60c && rm -rf "$T"
manifest:
agents/skills/claude-code/drizzle-migrations/SKILL.mdsource content
Drizzle Migrations
Manage Drizzle schema evolution with drizzle-kit generate/push/migrate and introspect
When to Use
- Generating SQL migration files from schema changes
- Applying migrations to development or production databases
- Prototyping schema changes rapidly with
push - Introspecting an existing database to generate a Drizzle schema
Instructions
- Configure drizzle-kit in
:drizzle.config.ts
import { defineConfig } from 'drizzle-kit'; export default defineConfig({ schema: './src/db/schema.ts', out: './drizzle', dialect: 'postgresql', dbCredentials: { url: process.env.DATABASE_URL!, }, });
- Generate a migration after editing the schema:
npx drizzle-kit generate
This creates a SQL migration file in the
out directory (e.g., drizzle/0001_add_posts_table.sql).
- Apply migrations programmatically at startup:
import { migrate } from 'drizzle-orm/node-postgres/migrator'; import { db } from './db'; await migrate(db, { migrationsFolder: './drizzle' });
- Push for rapid prototyping — applies schema changes directly without generating migration files:
npx drizzle-kit push
Use
push only in development. It does not create reversible migration history.
- Introspect an existing database to generate a Drizzle schema:
npx drizzle-kit introspect
This creates a TypeScript schema file matching the current database structure.
-
Review generated SQL before applying. Open the migration file and verify:
- Column types match your intent
- Destructive operations (DROP, ALTER TYPE) are safe
- Data migration steps are included where needed
-
Custom migration SQL — edit generated files to add data migrations:
-- Generated: add status column ALTER TABLE "posts" ADD COLUMN "status" text DEFAULT 'draft' NOT NULL; -- Custom: backfill existing records UPDATE "posts" SET "status" = 'published' WHERE "published" = true;
- Check for migration issues before generating:
npx drizzle-kit check
- Drop migrations that have not been applied (development only):
npx drizzle-kit drop
Details
Drizzle Kit is the CLI companion to Drizzle ORM. It reads your TypeScript schema and generates SQL migration files by diffing the schema against the migration history.
Migration tracking: Drizzle creates a
__drizzle_migrations table in the database to track which migrations have been applied. Each migration is identified by its filename hash.
vs generate
: push
generate creates versioned, reversible migration files for production workflows. push applies changes directly — fast for prototyping but leaves no history. Never use push in environments shared with other developers or in CI/CD.
Migration file structure:
drizzle/ 0000_initial.sql 0001_add_posts.sql 0002_add_comments.sql meta/ 0000_snapshot.json 0001_snapshot.json _journal.json
The
meta/ directory contains schema snapshots that drizzle-kit uses to compute diffs. Do not edit these files.
Programmatic migration: Unlike Prisma's
migrate deploy CLI command, Drizzle recommends running migrations in application code at startup. This works well for serverless environments where you cannot run CLI commands.
Trade-offs:
- No shadow database needed — Drizzle diffs against snapshots, not a separate database
- Migration files are plain SQL — easy to review but no built-in rollback mechanism
is fast but dangerous — it can drop columns without warning in developmentpush- No built-in
command — drop the database manually and re-run migrations for a clean slatereset
Source
https://orm.drizzle.team/docs/migrations
Process
- Read the instructions and examples in this document.
- Apply the patterns to your implementation, adapting to your specific context.
- Verify your implementation against the details and edge cases listed above.
Harness Integration
- Type: knowledge — this skill is a reference document, not a procedural workflow.
- No tools or state — consumed as context by other skills and agents.
Success Criteria
- The patterns described in this document are applied correctly in the implementation.
- Edge cases and anti-patterns listed in this document are avoided.