MigrationPilot vs Squawk
MigrationPilot covers every Squawk rule plus 49 more — including RLS safety, JSONB indexing, logical replication, and 12 auto-fixes. Same CLI workflow, more coverage.
Feature Comparison
| Feature | Squawk | MigrationPilot |
|---|---|---|
| Total rules | 31 | 80 |
| Auto-fix | No | 12 rules |
| GitHub Action | Yes | Yes + inline annotations + Job Summary |
| Lock type analysis | No | Yes (per-statement) |
| Risk scoring | No | RED/YELLOW/GREEN |
| Execution plan | No | Yes (visual timeline) |
| SARIF output | No | Yes (GitHub Code Scanning) |
| MCP Server (AI) | No | Yes (4 tools) |
| Schema drift detection | No | Yes |
| Historical trends | No | Yes |
| Config presets | No | 5 built-in (recommended, strict, ci, startup, enterprise) |
| Framework detection | No | 14 frameworks |
| PL/pgSQL function linting | No (issue #411) | Planned |
| RLS safety | No | Yes (MP057) |
| JSONB index analysis | No | Yes (MP056) |
| Replication safety | No | Yes (MP055, MP060) |
| Language | Rust | TypeScript (Node.js) |
| License | GPL-3.0 | MIT |
Rule-by-Rule Coverage
Every Squawk rule has a direct MigrationPilot equivalent.
| 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-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 Doesn't Have
MigrationPilot catches issues that Squawk misses entirely — from RLS lockouts to logical replication breaks.
Dropping PK breaks logical replication (Supabase, Neon, RDS)
Plain GIN index on JSONB is useless for ->> queries
ENABLE RLS without policy silently blocks all access
Multiple ALTER TABLE on same table = unnecessary lock cycles
Explicit ID inserts without setval = duplicate key errors
RENAME VALUE breaks logical replication silently
DROP/ALTER COLUMN may break views, functions, triggers
BEGIN without COMMIT leaves open transaction
New enum value not visible until COMMIT
VACUUM FULL locks entire table — use regular VACUUM
Multiple DDL in one transaction compounds lock duration
Large UPDATE without batching locks the entire table
Type changes that silently truncate data
DETACH PARTITION without CONCURRENTLY locks parent
pgvector: HNSW has better recall without retraining
PostGIS columns need GIST/SP-GIST index
Plus 33 more unique rules. See all 80 rules.
Migrate in 60 Seconds
Replace the CLI
# Remove Squawk # npm uninstall squawk-cli (or cargo uninstall squawk) # Use MigrationPilot npx migrationpilot analyze migrations/
Update CI
# Replace squawk GitHub Action:
- uses: mickelsamuel/migrationpilot@v1
with:
path: migrations/Optional: Enable auto-fix
# Auto-fix 12 common issues npx migrationpilot analyze migrations/ --fix --dry-run
Twice the rules. Auto-fix. Same CLI workflow.
80 safety rules. 12 auto-fixes. Lock analysis. Risk scoring. GitHub Action with inline annotations. MIT licensed.