MIT LICENCED · v0.9.4 · 3.1k STARS
Tessera diffs your schema against production and writes the migration itself — then refuses to run anything it cannot reverse. No shadow database, no ORM lock-in, no 400-line generated file you have to read at 4pm on a Friday.
$ tessera plan --against prod
+ CREATE INDEX CONCURRENTLY idx_orders_placed_at ON orders (placed_at)
~ ALTER TABLE orders ALTER COLUMN status TYPE text [reversible]
! DROP COLUMN orders.legacy_ref [BLOCKED]
refusing: no reverse migration for a destructive change. pass --i-mean-it
Every generated migration ships with its inverse. If Tessera cannot write the down, it will not write the up.
No decorators, no metaclass magic, no framework. Point it at a connection string and it works with anything speaking Postgres.
Tessera estimates the lock each statement takes and blocks anything that would hold ACCESS EXCLUSIVE for more than 200 ms.
BENCHMARK · 1.2M ROW TABLE · POSTGRES 16
“We migrated 340 tables across eleven services with it and did not take a single maintenance window. The refusal to guess is the feature.”
Arun Pillai
Platform lead, Kettle