Skip to main content
ClaudeWave

Preflight safety checks for TypeORM migrations: catch data loss and locking before you merge.

ToolsOfficial Registry0 stars0 forks● TypeScriptMITUpdated today
ClaudeWave Trust Score
95/100
✓ Verified
Passed
  • ✓Open-source license (MIT)
  • ✓Actively maintained (<30d)
  • ✓Clear description
  • ✓Topics declared
  • ✓Documented (README)
Last scanned: 10/1/2026
Get started
Method: Clone
Terminal
git clone https://github.com/sikandar100/orm-preflight
1. Clone the repository.
2. Follow the README for installation and usage instructions.
Use cases

Tools overview

# orm-preflight

[![npm](https://img.shields.io/npm/v/orm-preflight)](https://www.npmjs.com/package/orm-preflight)
[![CI](https://github.com/sikandar100/orm-preflight/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/sikandar100/orm-preflight/actions/workflows/ci.yml)
[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/sikandar100/orm-preflight/badge)](https://scorecard.dev/viewer/?uri=github.com/sikandar100/orm-preflight)
[![License: MIT](https://img.shields.io/npm/l/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 statement
databaselintlintermigrationmigrationsmysqlnestjspostgrespostgresqlschematypeormzero-downtime

What 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.

Featured on ClaudeWave: sikandar100/orm-preflight
[![Featured on ClaudeWave](https://claudewave.com/api/badge/sikandar100-orm-preflight)](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>