Local-only migration inventory · v0.1

Know what has to move before you move it.

Scan a Supabase project in seconds. Get the managed dependencies, portable SQL checks, replacement routes, and honest effort flags you need for one planning session.

Handmade ceramic database, key, file, and signal forms branching from an ice monolith along a dark route
One managed block becomes a route you can inspect, sequence, and own.

01 / Survey

A map, not a migration button.

The CLI reads only local files: config, migrations, seed SQL, and Edge Function source. It never asks for a project token and never touches production data.

  1. Locate the managed edges

    Auth claims, object storage, realtime publications, functions, cron, Vault, network calls, extensions, policies, and triggers.

  2. Separate compatibility from service

    Each finding says what open-source code can move and which backups, scaling, delivery, or operational guarantees cannot.

  3. Sequence the exit

    Replacement choices, effort, file-and-line evidence, and a restore/cutover checklist become a Markdown, JSON, or terminal report.

02 / Run locally

Ten minutes to a useful inventory.

Build the single Rust binary from source today. Release archives follow the same no-telemetry, no-network scanner. Works from a project root or its supabase/ directory.

Install from source

Requires Rust 1.78 or newer. The package is MIT licensed.

cargo install --git \
  https://github.com/B-Divyesh/sf-supabase-exit-map

Scan and export

The JSON schema is versioned for scripts; Markdown is ready for an issue tracker.

supabase-exit-map . \
  --format markdown \
  --output exit-plan.md

03 / Example output

The hard parts, with evidence.

This representative map comes from a project with social login, object uploads, database policies, realtime notes, and one mail function. Filter it like you would read a real report.

01

Authentication

High effort · replace

Evidence config.toml:18 GitHub provider; profiles.sql:7 references auth.users.

  • Inventory providers, sessions, hooks, MFA, redirects, SMTP
  • Route: self-host GoTrue, Keycloak, or application auth
  • Rehearse supported user and session transfer
02

Object storage

High effort · replace

Evidence files.sql:4 creates bucket; three policies use storage.objects.

  • Count and hash objects with read-only access
  • Route: S3, R2, or MinIO plus policy adapter
  • Test signed URLs, cache, transforms, and restore
03

Realtime

Medium effort · replace

Evidence notes.sql:39 adds a publication; client subscribes to update events.

  • Measure fan-out, connection count, presence, and broadcast
  • Route: Supabase Realtime or an application websocket
  • Monitor slots and replication lag
04

Edge Function

Medium effort · adapt

Evidence send-mail/index.ts:1 uses a Supabase client, Deno secret, and outbound fetch.

  • Record secret names only; rotate values at cutover
  • Route: Deno, Hono/Node, or a small container
  • Add runtime, retry, timeout, and observability tests
05

Row-level security

Medium effort · adapt

Evidence Four policies call auth.uid() and expect authenticated.

  • Native Postgres RLS is portable SQL
  • Replace Supabase claim shape and roles
  • Run allow-and-deny regression cases
06

Functions & triggers

Low effort · portable

Evidence Two PL/pgSQL functions and one trigger; one is SECURITY DEFINER.

  • Restore native Postgres SQL in dependency order
  • Audit owners and fixed search paths
  • Run behavior tests under target roles

Optional / One time

Turn the map into a cutover room.

$19 one-time

The open-source CLI and every export stay free. Planning Room adds a private browser workspace for assigning owners, choosing replacement routes, tracking decisions, and printing a cutover sheet.

  • Import any Exit Map JSON report
  • Choose a replacement, owner, and status per finding
  • Save locally on this device and print a clean plan
  • Future Planning Room updates included

Restore a purchase

Paste the token from your receipt. It stays on this device.

No license saved.

Sociobot/Dodo is the merchant of record. Refunds are handled there and revoke the license automatically. Read our privacy notice and terms.

04 / Boundaries

Before you point it at a repo.

Exit Map is deliberately narrow: decision support before a migration, not a tool that quietly moves production data.

Does it connect to Supabase?

No. The scanner has no network code and accepts no credentials. It only reads files beneath the path you give it.

Can it promise a complete inventory?

It inventories what is represented locally and flags missing config, SQL, and functions. Dashboard-only settings, live data volume, sessions, and dynamic SQL still need the manual read-only checks included in every report.

Does it perform the migration?

No. Automatic live migration, hosting, and auth-data extraction are explicit non-goals. The output helps you estimate, choose replacements, and rehearse a controlled move.

Is it affiliated with Supabase?

No. Supabase is a trademark of Supabase, Inc. This independent project is not endorsed by or affiliated with Supabase.