SupaForge vs. DBDiff
How SupaForge builds on DBDiff with everything else a Supabase project is made of.
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,authenticatedandservice_rolemay 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
--proveto rehearse on a throwaway copy, rows included. - Snapshots, restore and clone - for when you have one project rather than two.
| Feature | DBDiff | SupaForge |
|---|---|---|
| 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 | - | ✅ |
| Output | SQL, Flyway, Liquibase, Laravel, templates | Fixes applied to the target, or migration files |
| Apply | Migration runner | One 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.
npm install -g @akal/supaforge{
"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"
}supaforge diffsupaforge diff --check=schemaWhen 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