The linter is free. The proof costs money.
Every rule, every fix and every integration is free forever, with no account and no quota. There is one paid plan, and it exists for a different question than “does this migration have a problem”.
Free
$0
The whole engine, for everyone.
- All 112 rules, including the 15 catalogue-aware ones that read table sizes, write traffic and replication state from a database
- Auto-fix for 20 rules, and a printed plan for the 10 that need choreography
- CLI, GitHub Action with pull request comments, SARIF, MCP server, VS Code extension
- Unlimited runs, offline, with no account and no telemetry
- MIT licensed, so every rule is readable and forkable
Org
$499 / year
Per organization, not per seat.
The $499/year Org plan turns the free linter into an enforceable control: one policy across repositories that developers cannot quietly disable, a JSONL audit trail of every check, and direct support from the maintainer.
Every clause of that sentence is something the tool does today, and the three artifacts below are what each one produces. There is no waiting list and no beta.
What it actually produces
Three artifacts, all generated by running the tool. Nothing here is a mockup.
The policy the CLI enforces
A block in the repository config. Required rules cannot be disabled by config or by an inline disable comment, the severity floor stops a critical being quietly downgraded to a warning, and blocked patterns fail the run outright.
# .migrationpilotrc.yml
pgVersion: 17
failOn: critical
policy:
requiredRules: [MP001, MP004, MP030]
severityFloor: warning
blockedPatterns:
- "DROP TABLE"
- "TRUNCATE"
auditLog:
enabled: true
path: ./migrationpilot-audit.jsonlThe merge that does not happen
The same run in CI, in the compact format. Two critical findings, so the process exits 2 and the required check fails. The Action posts the full report on the pull request as well.
/builds/acme/api/migrations/003_orders_amount_check.sql:1: [MP004] CRITICAL: DDL statement acquires ACCESS EXCLUSIVE lock without a preceding SET lock_timeout. Without a timeout, this statement could block the lock queue indefinitely if it can't acquire the lock, causing cascading query failures. /builds/acme/api/migrations/003_orders_amount_check.sql:1: [MP030] CRITICAL: CHECK constraint "orders_amount_positive" on "orders" without NOT VALID scans the entire table under ACCESS EXCLUSIVE lock, blocking all reads and writes.
The record an auditor reads
One JSON object appended per run, with the file, the verdict, the count and the exit code. It is a plain file: ship it to your log pipeline, keep it in the repo, or both.
{"event":"analysis_complete","command":"analyze","file":"/builds/acme/api/migrations/003_orders_amount_check.sql","riskLevel":"RED","riskScore":80,"violationCount":2,"exitCode":2,"metadata":{"reversibility":"GREEN"},"timestamp":"2026-08-12T11:07:31.147Z","user":"deploy","ci":true}Procurement, air-gapped networks, and the rest
There is no third tier, because the answers do not depend on one. MigrationPilot is an MIT-licensed npm package and a Docker image that runs offline with --offline: no outbound calls, no license server in the request path, nothing to allow through a firewall. It holds no data of yours, so a data processing agreement has nothing to cover. If your review needs something in writing, email hello@migrationpilot.dev and you will get a straight answer, including when the answer is no.
Questions people actually ask
- Which rules are behind the paywall?
- None. All 112 are free. 97 of them work from the migration file alone; the other 15 read table sizes, write traffic, replication state and index definitions, so they need --database-url and stay silent without it. There is no rule count held back and no analysis quota. If MigrationPilot can find a problem, the free version finds it.
- Then what does $499 buy?
- Enforcement and evidence, not detection. A policy block in the repository config that the CLI applies and a developer cannot switch off, a severity floor that stops rules being downgraded quietly, patterns that are refused outright, and an append-only record of every run. If nobody has ever asked you to prove your migrations are governed, you do not need this.
- Is it per seat?
- No. $499 a year covers the organization. Pricing changes are announced in the changelog before they take effect.
- Do you see my SQL?
- No. Analysis happens in your process, on your machine or your runner. The browser playground compiles the same PostgreSQL parser to WebAssembly and analyses in the tab, so even there nothing is uploaded. The only request MigrationPilot makes is an optional license key check, which sends the key and nothing else.