COMPARISON

SupaForge vs. DBDiff

How SupaForge builds on DBDiff with everything else a Supabase project is made of.

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.

What Is DBDiff?

DBDiff is an open source tool that compares two MySQL, PostgreSQL or SQLite databases and writes the migration between them: schema and data, up and down, as plain SQL or for Flyway, Liquibase, Laravel or a custom template. On PostgreSQL it covers tables, partitions, views, functions, triggers, types, sequences, RLS policies, comments and extensions, and it has its own migration runner.

DBDiff works with any database, Supabase included. It's the engine SupaForge's schema and data checks run on.

What SupaForge Adds

A Supabase project is more than its database. SupaForge adds a check for each of the other parts, and the tooling to apply the result safely:

  • RLS - policies compared by meaning, tables with RLS switched off, and coverage of the target on its own.
  • Roles and grants - custom roles, and what anon, authenticated and service_role may do.
  • Auth configuration - through the Management API, or GoTrue on self-hosted.
  • Storage - buckets, their settings and their policies.
  • Edge Functions - which functions are deployed, at which version.
  • Cron, webhooks, Realtime and Vault - jobs, webhook triggers, publications and secret names.
  • Queues and partition sets - Supabase Queues and pg_partman, through each extension's own functions.
  • Migration history - local migration files against what the target has applied.
  • Safe apply - one transaction, destructive fixes held back, what each fix locks, and --prove to rehearse on a throwaway copy, rows included.
  • Snapshots, restore and clone - for when you have one project rather than two.
FeatureDBDiffSupaForge
Schema diff✅ MySQL, PostgreSQL, SQLite✅ PostgreSQL, via DBDiff
Data diff✅ Any table✅ The reference tables you list
RLS policies✅ As part of the schema✅ Dedicated check, plus RLS coverage
Roles & grants-✅ Supabase roles and custom roles
Auth settings-✅ Management API or GoTrue
Storage-✅ Buckets, settings, policies
Edge Functions-✅ Deployed functions and versions
Cron, webhooks, Realtime, Vault-✅
Queues, partition sets-✅
OutputSQL, Flyway, Liquibase, Laravel, templatesFixes applied to the target, or migration files
ApplyMigration runnerOne transaction, with --prove
Drift score & CI mode-✅

SupaForge Uses DBDiff Under the Hood

These aren't competing tools. SupaForge installs DBDiff automatically as a native binary - no PHP needed - and runs it for the schema and data checks. Everything else is SupaForge's own.

Install SupaForge (DBDiff included)
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"
}
Every check
supaforge diff
Schema only (DBDiff)
supaforge diff --check=schema

When to Use DBDiff Directly

For MySQL, SQLite or PostgreSQL outside Supabase, or when you want migration files for Flyway, Liquibase or Laravel, use DBDiff.

For Supabase, SupaForge gives you DBDiff's schema and data diffing plus the rest of the project.

Summary

DBDiff is the schema and data engine. SupaForge builds on it with Supabase's grants, storage, auth, cron, webhooks, Realtime, Vault and Edge Functions - and applies the result safely.

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 →