Preflight safety checks for TypeORM migrations: catch data loss and locking before you merge.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
git clone https://github.com/sikandar100/orm-preflightTools overview
# orm-preflight
[](https://www.npmjs.com/package/orm-preflight)
[](https://github.com/sikandar100/orm-preflight/actions/workflows/ci.yml)
[](https://scorecard.dev/viewer/?uri=github.com/sikandar100/orm-preflight)
[](https://github.com/sikandar100/orm-preflight/blob/main/LICENSE)
Preflight safety checks for TypeORM migrations: catch data loss and locking before you merge.
Documentation: https://sikandar100.github.io/orm-preflight/
Changing a column's length in TypeORM can delete all of its data. When a column's type or length
changes, TypeORM's migration generator drops the column and adds it again
([typeorm/typeorm#3357](https://github.com/typeorm/typeorm/issues/3357)). The migration looks
harmless in review and passes every test on an empty database. orm-preflight catches that, and
other migrations that lose data, lock busy tables, or break a rolling deploy, before you merge.
```
src/migrations/1727100000000-WidenUserName.ts
7:30 error no-drop-and-recreate-column
"users"."name" is dropped and re-added in the same migration. Every existing value in this column will be lost.
Why: TypeORM drops and re-adds a column when its type or length changes, instead of changing it in place. The new column starts empty.
Safe: Change the type in place: ALTER TABLE "users" ALTER COLUMN "name" TYPE varchar(255). Widening a varchar, or changing varchar to text, does not rewrite the table. ...
Docs: https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-drop-and-recreate-column.md
8:30 error no-add-not-null-without-default
"users"."name" is added as NOT NULL without a default. The migration fails as soon as "users" has any rows.
...
2 errors, 0 warnings in 1 migration
```
## Install and run
```sh
npm install --save-dev orm-preflight
npx orm-preflight "src/migrations/*.ts"
```
Node.js 20 or newer. Without arguments, orm-preflight checks the `migrations` globs from its
config, or every `migrations` folder in the project.
To start on an existing project without fixing its history, run `npx orm-preflight init` first
(see [Adopting on an existing project](#adopting-on-an-existing-project)).
## What it catches
| Rule | Reports |
| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| **Data loss** | |
| [`no-drop-and-recreate-column`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-drop-and-recreate-column.md) | A column dropped and added again in one migration |
| [`possible-rename-data-loss`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/possible-rename-data-loss.md) | One column dropped and another added, with no data copied (warning) |
| [`no-drop-column`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-drop-column.md) | A dropped column |
| [`no-drop-table`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-drop-table.md) | A dropped table |
| [`no-truncate`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-truncate.md) | `TRUNCATE` or `clearTable()` |
| [`typeorm/no-changecolumn-recreate`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/typeorm/no-changecolumn-recreate.md) | `changeColumn()` that drops and re-adds the column |
| **Deploy safety** | |
| [`no-rename-column`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-rename-column.md) | A renamed column |
| [`no-rename-table`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-rename-table.md) | A renamed table |
| **Locking (PostgreSQL)** | |
| [`require-concurrent-index`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/require-concurrent-index.md) | `CREATE INDEX` without `CONCURRENTLY` |
| [`concurrent-index-transaction`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/concurrent-index-transaction.md) | `CONCURRENTLY` where it runs inside a transaction |
| [`no-add-not-null-without-default`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-add-not-null-without-default.md) | A `NOT NULL` column added without a default |
| [`no-volatile-default`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-volatile-default.md) | A column added with a volatile default, or as serial, identity, or generated |
| [`no-unsafe-column-type-change`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-unsafe-column-type-change.md) | A column type change that rewrites the table |
| [`require-not-valid-foreign-key`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/require-not-valid-foreign-key.md) | A foreign key added without `NOT VALID` |
| [`no-set-not-null`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-set-not-null.md) | `SET NOT NULL` on an existing column |
| [`require-not-valid-check`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/require-not-valid-check.md) | A CHECK constraint added without `NOT VALID` |
| [`require-concurrent-unique`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/require-concurrent-unique.md) | A unique constraint or primary key added in place |
| [`require-concurrent-index-drop`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/require-concurrent-index-drop.md) | `DROP INDEX` without `CONCURRENTLY` (warning) |
| [`no-blocking-maintenance`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/no-blocking-maintenance.md) | `VACUUM FULL`, `CLUSTER`, or `REINDEX` without `CONCURRENTLY` |
| [`enum-value-used-in-same-transaction`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/enum-value-used-in-same-transaction.md) | A new enum value used before the transaction that adds it commits |
| [`require-lock-timeout`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/require-lock-timeout.md) | A change to an existing table without `lock_timeout` (off, opt-in) |
| [`typeorm/no-enum-recreate`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/typeorm/no-enum-recreate.md) | TypeORM 0.3's enum change by recreating the type (warning) |
| **Correctness** | |
| [`typeorm/transaction-override-forbidden`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/typeorm/transaction-override-forbidden.md) | `transaction` set on a migration in transaction mode `"all"` |
| [`typeorm/invalid-migration-name`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/typeorm/invalid-migration-name.md) | A migration name without a 13-digit timestamp |
| [`unanalyzable-statement`](https://github.com/sikandar100/orm-preflight/blob/main/docs/rules/unanalyzable-statement.md) | A statementWhat people ask about orm-preflight
What is sikandar100/orm-preflight?
+
sikandar100/orm-preflight is tools for the Claude AI ecosystem. Preflight safety checks for TypeORM migrations: catch data loss and locking before you merge. It has 0 GitHub stars and its last recorded update is dated 2026-09-30.
How do I install orm-preflight?
+
You can install orm-preflight by cloning the repository (https://github.com/sikandar100/orm-preflight) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is sikandar100/orm-preflight safe to use?
+
Our security agent has analyzed sikandar100/orm-preflight and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains sikandar100/orm-preflight?
+
sikandar100/orm-preflight is maintained by sikandar100. The last recorded GitHub activity is dated 2026-09-30, with 2 open issues.
Are there alternatives to orm-preflight?
+
Yes. On ClaudeWave you can browse similar tools at /categories/tools, sorted by popularity or recent activity.
Deploy orm-preflight to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/sikandar100-orm-preflight)<a href="https://claudewave.com/repo/sikandar100-orm-preflight"><img src="https://claudewave.com/api/badge/sikandar100-orm-preflight" alt="Featured on ClaudeWave: sikandar100/orm-preflight" width="320" height="64" /></a>More Tools
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
An AI skill that provides design intelligence for building professional UI/UX across multiple platforms.
🪨 why use many token when few token do trick. Viral skill + proxy for coding agents that cuts 65% of tokens by talking like a caveman.
CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies
The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]
Use Claude Code, Codex, VSCode, Pi, and OpenCode (and 6 other harnesses) for free (1.3B+ free tokens) from your terminal, app, IDE, or phone, and now from the browser with native browser sessions (multi-harness + multi-model) like OpenClaw (voice supported + ToS friendly)