
MigrationPilot vs SquawkMore Rules, Auto-Fix, Same CLI Workflow
Both MigrationPilot and Squawk are PostgreSQL migration linters. MigrationPilot ships 83 safety rules; Squawk has 40 as of v2.62.0 (Aug 2026). MigrationPilot also adds lock analysis, risk scoring, 12 auto-fixes, and a VS Code extension. Same workflow, more coverage.
Feature Comparison
| Capability | Squawk | MigrationPilot |
|---|---|---|
| Total safety rules | 40 (v2.62.0, Aug 2026) | 83 (all free) |
| Auto-fix | No | 12 rules (--fix) |
| Lock type analysis | No | Per-statement (SHARE through ACCESS EXCLUSIVE) |
| Risk scoring | No | RED / YELLOW / GREEN (0-100) |
| GitHub Action | Yes | Yes + inline annotations + Job Summary |
| VS Code extension | No | Yes (diagnostics, hover, quick-fix) |
| Execution plan | No | Yes (visual timeline with lock types) |
| SARIF output | No | Yes (GitHub Code Scanning) |
| MCP Server | No | Yes (4 tools for AI integration) |
| Schema drift detection | No | Yes |
| Historical trends | No | Yes (JSONL + trends command) |
| Config presets | No | 5 built-in (recommended, strict, ci, startup, enterprise) |
| Framework detection | No | 14 frameworks auto-detected |
| Watch mode | No | Yes (file watcher + pre-commit hooks) |
| Production context | No | Table sizes, query frequency |
| Rollback DDL generation | No | Yes |
| RLS safety rules | No | Yes (MP057, MP079) |
| JSONB index analysis | No | Yes (MP056) |
| Replication safety | No | Yes (MP055, MP060, MP064) |
| Partition rules | No | Yes (MP046, MP049, MP072) |
| pgvector index advice | No | Yes (MP050) |
| Language | Rust | TypeScript (Node.js) |
| Parser | pg-query-rs | libpg-query (WASM) |
| License | Apache-2.0 / MIT | MIT |
| Price | Free | Free (all 83 rules) |
Rule-by-Rule Coverage
These 25 Squawk rules map directly onto a MigrationPilot rule. Seven of the equivalents are auto-fixable.
| Squawk Rule | MigrationPilot | Auto-Fix |
|---|---|---|
| require-concurrent-index-creation | MP001 require-concurrent-index | Yes |
| require-concurrent-index-deletion | MP009 require-drop-index-concurrently | Yes |
| adding-not-nullable-field | MP002 require-check-not-null | — |
| adding-field-with-default | MP003 volatile-default-rewrite | — |
| adding-foreign-key-constraint | MP005 require-not-valid-fk | — |
| ban-drop-column | MP017 no-drop-column | — |
| ban-drop-table | MP026 ban-drop-table | — |
| ban-drop-database | MP034 ban-drop-database | — |
| ban-drop-not-null | MP029 ban-drop-not-null | — |
| changing-column-type | MP007 no-column-type-change | — |
| renaming-column | MP010 no-rename-column | — |
| renaming-table | MP028 no-rename-table | — |
| disallowed-unique-constraint | MP027 disallowed-unique-constraint | — |
| prefer-text-field | MP037 prefer-text-over-varchar | Yes |
| prefer-bigint-over-int | MP038 prefer-bigint-over-int | — |
| prefer-bigint-over-smallint | MP038 prefer-bigint-over-int | — |
| prefer-identity | MP039 prefer-identity-over-serial | — |
| prefer-timestamptz | MP040 prefer-timestamptz | Yes |
| ban-char-field | MP041 ban-char-field | Yes |
| adding-serial-primary-key-field | MP015 no-add-column-serial | — |
| setting-not-nullable-field | MP018 no-force-set-not-null | — |
| constraint-missing-not-valid | MP030 require-not-valid-check | Yes |
| ban-truncate-cascade | MP036 ban-truncate-cascade | — |
| require-timeout | MP004 require-lock-timeout | Yes |
| ban-concurrent-index-creation-in-transaction | MP025 ban-concurrent-in-transaction | — |
Rules With No Squawk Counterpart
MigrationPilot catches issues that Squawk does not check — from RLS lockouts to logical replication breaks to pgvector index advice. Here are some highlights:
VACUUM FULL locks the entire table exclusively
Multiple DDL in one transaction compounds lock duration
Large UPDATE without WHERE clause locks the table
Long-running DDL needs a statement timeout
DETACH PARTITION without CONCURRENTLY locks the parent
Dropping PK breaks logical replication (Supabase, Neon, RDS)
Plain GIN index on JSONB is useless for ->> queries
ENABLE RLS without a policy silently blocks all access
DISABLE TRIGGER breaks replication and audit logs
FK creation locks both parent and child tables
FK without DEFERRABLE can cause lock contention
LZ4 is faster than PGLZ for TOAST compression
Data changes mixed into schema migration files
Key Differentiators
Twice the Rules
MigrationPilot has 83 safety rules; Squawk has 40 as of v2.62.0 (Aug 2026). Coverage includes RLS, JSONB, logical replication, partitioning, pgvector, TOAST compression, and more.
Auto-Fix
12 rules can be automatically fixed with --fix. Missing CONCURRENTLY, lock_timeout, statement_timeout, NOT VALID, IF NOT EXISTS, VARCHAR-to-TEXT, TIMESTAMP-to-TIMESTAMPTZ, and more. Squawk only reports; MigrationPilot can fix.
Lock Type Analysis
Every DDL statement output includes the PostgreSQL lock it acquires (SHARE, SHARE UPDATE EXCLUSIVE, ACCESS EXCLUSIVE) and whether it blocks reads, writes, or both. Squawk does not analyze locks.
Risk Scoring
RED / YELLOW / GREEN risk scores (0-100) based on lock severity, statement type, and table impact. Pro adds production context with actual table sizes and query frequency.
VS Code Extension
Real-time diagnostics, hover tooltips with lock info, and quick-fix actions directly in your editor. Squawk does not have an editor extension.
MCP Server
MigrationPilot ships an MCP server (4 tools), so Claude, Cursor, and other AI assistants can analyze a migration before they hand it to you. Squawk has no MCP integration. Both tools are permissively licensed — MigrationPilot is MIT, Squawk is Apache-2.0 / MIT — so neither carries copyleft obligations.
When to Use Each Tool
Squawk may be a better fit if...
- You prefer a Rust binary with zero runtime dependencies
- You only need the 40 rules it covers
- It is already wired into your CI and covers what you check for
- You want the fastest possible binary execution time
MigrationPilot is a better fit if...
- You want the most comprehensive PostgreSQL rule set (83 rules)
- You need auto-fix to automatically remediate issues
- You want lock analysis and risk scoring per statement
- You need a VS Code extension for real-time feedback
- You need RLS, JSONB, replication, or partitioning rules
- You want production context analysis with actual table sizes
- You want an MCP server so AI assistants can check migrations too
Switch in 60 Seconds
Replace the CLI
# Remove Squawk # npm uninstall squawk-cli (or cargo uninstall squawk) # Use MigrationPilot npx migrationpilot analyze migrations/
Update your CI
# Replace your Squawk GitHub Action:
- uses: mickelsamuel/migrationpilot@v1
with:
path: migrations/
fail-on: criticalEnable auto-fix
# Preview fixes without modifying files npx migrationpilot analyze migrations/ --fix --dry-run # Apply fixes in-place npx migrationpilot analyze migrations/ --fix
83 rules to Squawk's 40. Auto-fix included.
83 safety rules. 12 auto-fixes. Lock analysis. Risk scoring. VS Code extension. GitHub Action with inline annotations. Same CLI workflow, more comprehensive coverage.