COMPARISON

SupaForge vs. Manual SQL Diffing

Why an automated diff beats replaying changes by hand.

The SupaForge CLI is open source and on npm: npm install -g @akal/supaforge. A hosted dashboard is on the way - to hear when it opens.

The Problem with Manual SQL Scripts

Most Supabase teams start by replaying changes by hand. Someone adds a column in staging, tweaks a policy or enables a provider, then writes the SQL - or clicks through the dashboard - to do the same in production.

It fails in familiar ways:

  • Human error - a forgotten default, a policy left out, statements in the wrong order.
  • Invisible drift - dashboard changes nobody remembered to replay, piling up over weeks.
  • Only the schema - grants, auth settings, storage, cron jobs and Edge Functions rarely make it into hand-written scripts.
  • No way back - a hand-written change rarely comes with its reverse.

What SupaForge Does Differently

SupaForge compares two live environments and reports every difference, across the whole project - including the ones nobody knew about. Then it writes and applies the fixes: in dependency order, in one transaction, with anything destructive held back until you ask for it.

FeatureManual SQLSupaForge
Schema changesWritten by hand, per changeFound and written automatically
RLS policiesEasy to forgetDedicated check, plus RLS coverage
GrantsRarely replicatedCompared role by role
Auth, storage, cronClicked through againCompared and synced
Edge FunctionsDeployed separatelyMissing and outdated ones reported
OrderingUp to youDependency order, one transaction
Checking the resultChecked by hand--prove rehearses first; a re-run shows clean
CICustom scriptingdiff --ci

Quick Start

Install SupaForge
npm install -g @akal/supaforge
supaforge.config.json
{
  "environments": {
    "staging": {
      "dbUrl": "$STAGING_DATABASE_URL",
      "projectRef": "STAGING_REF",
      "accessToken": "$SUPABASE_ACCESS_TOKEN"
    },
    "production": {
      "dbUrl": "$PRODUCTION_DATABASE_URL",
      "projectRef": "PROD_REF",
      "accessToken": "$SUPABASE_ACCESS_TOKEN"
    }
  },
  "source": "staging",
  "target": "production"
}
What differs?
supaforge diff
The fixes, in order
supaforge diff --apply --dry-run
Rehearse, then apply
supaforge diff --apply --prove

When Manual SQL Still Makes Sense

Backfilling a column from an external API, or reshaping data across tables, is still a job for a hand-written migration. SupaForge catches the drift you didn't write a script for; it doesn't replace the migrations you mean to write.

Summary

Replaying changes by hand is error-prone, rarely goes beyond the schema and gets harder as the team grows. SupaForge finds every difference across the project and applies the fixes safely - locally, in CI or on a schedule.

Ready to try SupaForge?

Install the CLI and run your first diff in a minute. Nothing is changed until you add --apply.

npm install -g @akal/supaforge
View on GitHub →