MigrationPilot vs SquawkMore Rules, Auto-Fix, Same CLI Workflow
Both MigrationPilot and Squawk are PostgreSQL migration linters. MigrationPilot covers every Squawk rule plus 49 more, 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 | 31 | 80 (77 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 (Pro) |
| 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 | GPL-3.0 | MIT |
| Price | Free | Free (77 rules) / $19/mo Pro |
Rule-by-Rule Coverage
Every Squawk rule has a direct MigrationPilot equivalent. Seven of them 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 | — |
49 Rules Squawk Does Not Have
MigrationPilot catches issues that Squawk misses — 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
Plus 36 more unique rules. See all 80 rules.
Key Differentiators
2.5x More Rules
MigrationPilot has 80 safety rules compared to Squawk's 31. 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.
MIT License
MigrationPilot uses the MIT license, which is more permissive than Squawk's GPL-3.0. MIT allows use in proprietary projects without 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 31 core rules it covers
- You need GPL-3.0 copyleft licensing
- You want the fastest possible binary execution time
MigrationPilot is a better fit if...
- You want the most comprehensive PostgreSQL rule set (80 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 (Pro)
- You need MIT licensing for proprietary projects
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
All of Squawk's rules. Plus 49 more. Auto-fix included.
80 safety rules. 12 auto-fixes. Lock analysis. Risk scoring. VS Code extension. GitHub Action with inline annotations. Same CLI workflow, more comprehensive coverage.