Dev-tool landing recipe | Spacefast

The dish

What it makes.

cli.view.fast

Database migrations that never drift.

Drift diffs your schema against your live database, then writes the migration for you — type-safe, reviewable SQL you can read before it runs. No more hand-edited up/down files, no more “works on my machine” drift between environments.

$ npm i -D drift-cli

Up and running in four commands

Point Drift at your database and let it write the first migration:

# install
npm i -D drift-cli

# scaffold drift.config.ts + connect your database
npx drift init

# diff your schema against the database and generate SQL
npx drift generate add_orders_table

# preview, then apply — every migration is plain reviewable SQL
npx drift status
npx drift push

You write the schema you want…

// schema.ts — describe the shape, not the diff
import { table, text, uuid, timestamp, int } from 'drift-cli';

export const orders = table('orders', {
  id:        uuid('id').primaryKey().default('gen_random_uuid()'),
  email:     text('email').notNull(),
  total:     int('total_cents').notNull(),
  status:    text('status').notNull().default('pending'),
  createdAt: timestamp('created_at').notNull().default('now()'),
});

…Drift writes the migration.

-- migrations/0007_add_orders_table.sql  (generated by drift)
-- ↑ 1 table added · 0 columns dropped · safe to run

CREATE TABLE "orders" (
  "id"         uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  "email"      text NOT NULL,
  "total_cents" integer NOT NULL,
  "status"     text NOT NULL DEFAULT 'pending',
  "created_at" timestamptz NOT NULL DEFAULT now()
);

CREATE INDEX "orders_email_idx" ON "orders" ("email");

Why Drift

A migration tool that gets out of your way

Drift owns one job — keeping your schema and your database in sync — and does it fast, safely, and in plain SQL you can read.

A Rust diff engine reads your schema and introspects the database in one pass. Generating a migration on a 200-table schema takes under 40ms — fast enough to run on every save.

Your schema is TypeScript, so column names, types and relations are checked at compile time. Rename a column and every query that referenced it lights up red in your editor.

Run drift init and it detects your database from DATABASE_URL, picks the right dialect, and writes a one-file config. No adapters to wire up, no plugins to install.

Drift only owns your migrations — keep using Prisma, Drizzle, Kysely or raw SQL for queries. Postgres, MySQL, SQLite, and serverless drivers all speak the same commands.

Every migration is a plain .sql file you commit to git. Read it, edit it, comment on it in a PR. Nothing is hidden behind a binary format or an opaque migration table.

Each migration ships with a generated down step and a destructive-change guard. drift push --dry-run prints the exact plan; drift rollback reverts the last batch cleanly.

How it works

Three commands, every time

The whole workflow is connect, generate, apply. It looks the same on day one and on your thousandth migration — and identical on every machine that runs it.

  1. 01 $ drift init

Connect

Drift reads DATABASE_URL, detects your dialect, and writes drift.config.ts plus an empty migrations folder. One command, no questions.

  1. 02 $ drift generate

Diff & generate

Change your schema, then run generate. Drift compares the desired shape to the live database and emits a numbered, reviewable SQL migration with up and down steps.

  1. 03 $ drift push

Apply anywhere

Run push in CI, on a teammate’s laptop, or against prod. Drift applies only the migrations that haven’t run yet and records them — every environment ends up identical.

Benchmarks

Built for the inner loop

Time to generate and apply a migration on a 50-table Postgres schema. Lower is better — measured on an M2 Air, median of 20 runs.

Tool Time
Drift 38 ms
Hand-written + manual diff ~6 min
ORM migrate (Node) 210 ms
ORM migrate (Python) 640 ms

We deleted 1,400 lines of hand-rolled migration scripts the week we adopted Drift. Generated SQL we can actually read in review, and prod and staging finally stopped drifting apart.

Priya Raman Staff Engineer, Northwind

Your ingredients

Your agent will ask.

Answer these once. The recipe uses your details instead of placeholder copy.

  1. What's the project name and the one-line description of what it does?
  2. What's the install command and which ecosystem/language is it for (npm, pip, brew, cargo)?
  3. What are the 3-4 key selling points (speed, type-safety, zero-config)?
  4. What's the GitHub repo URL and do you have a Discord/community link?

The method

The whole prompt.

Paste this into Claude, ChatGPT, Codex, Cursor, or another coding agent. It builds the site and publishes it to Spacefast.