Manual parity tracker for the TypeScript CLI port. Update this file whenever a command is added or parity changes.
Reference:
- Old Go CLI help dump:
go-cli-reference.md - Current TS root command:
../src/next/cli/root.ts
ported: TS command exists and the flag/parameter surface is materially aligned with the old Go CLIpartial: TS feature exists but differs materially from the old Go CLI shape, flag surface, or invocation style. This includes feature parity delivered through framework-built global flags such as--helpinstead of matching Go subcommands exactly.missing: no TS command/subcommand exists yet
Percentages and counts below are based on final leaf commands only. Command groups like db, functions, and completion are not counted as commands.
| Metric | Count | Percent |
|---|---|---|
| Fully ported commands | 11 / 94 | 11.7% |
| Partially ported commands | 55 / 94 | 58.5% |
| Family | Final commands | ported |
partial |
missing |
Represented in TS |
|---|---|---|---|---|---|
| Quick Start | 1 | 0 (0%) | 0 (0%) | 1 (100%) | 0 (0%) |
| Project / Stack Lifecycle | 9 | 2 (22.2%) | 7 (77.8%) | 0 (0%) | 9 (100%) |
| Database | 19 | 5 (26.3%) | 0 (0%) | 14 (73.7%) | 5 (26.3%) |
| Code Generation | 3 | 0 (0%) | 0 (0%) | 3 (100%) | 0 (0%) |
| Functions | 6 | 0 (0%) | 0 (0%) | 6 (100%) | 0 (0%) |
| Storage | 4 | 0 (0%) | 0 (0%) | 4 (100%) | 0 (0%) |
| Management APIs | 47 | 0 (0%) | 47 (100%) | 0 (0%) | 47 (100%) |
| Additional Commands | 5 | 4 (80%) | 1 (20%) | 0 (0%) | 5 (100.0%) |
This tracker is command-focused, but root global flag drift is large enough to note separately.
| Surface | TS path | Missing old flags/params | Extra TS flags/params | Notes |
|---|---|---|---|---|
supabase global flags |
../src/shared/cli/global-flags.ts |
--create-ticket, --debug, --dns-resolver, --experimental, --network-id, --output, --profile, --workdir, --yes |
--output-format |
Root flag parity is still far from the Go CLI, but the framework already provides global --help, and supabase completion <shell> is restored as a Go-style subcommand. The framework's --completions global flag remains available for next/ users. |
These commands exist in the TS CLI today but have no direct top-level equivalent in the old Go CLI reference.
| TS command | TS path | Notes |
|---|---|---|
dev |
planned |
Reserved for a TS-native long-running local development workflow command that watches files and orchestrates subcommands. Track this as TS-only unless a direct Go equivalent emerges. |
logs |
../src/next/commands/logs/logs.command.ts |
Streams local stack logs. No top-level logs command exists in the old Go CLI reference. |
api |
../src/next/commands/platform/api.command.ts |
Low-level Management API client. It supersedes the old generated tree with explicit discovery via supabase api routes and execution via supabase api request <route> [--method <METHOD>]. |
stack |
../src/next/cli/root.ts |
TS-only local runtime namespace exposing stack start, stack stop, stack status, stack list, and stack update. Top-level start, stop, and status remain aliases. |
branches switch |
../src/next/commands/branches/switch/switch.command.ts |
No direct Go equivalent. Updates local active-branch state so subsequent commands target the selected branch. |
| Old command | TS status | TS command path or missing |
Missing flags/params | Extra TS flags/params | Notes |
|---|---|---|---|---|---|
bootstrap |
missing |
missing |
n/a |
n/a |
No next/ command yet. Ported to native TS in the legacy shell; the migration-push sub-step is delegated to the Go binary as a documented interim until db push is natively ported. |
| Old command | TS status | TS command path or missing |
Missing flags/params | Extra TS flags/params | Notes |
|---|---|---|---|---|---|
init |
ported |
../src/next/commands/init/init.command.ts |
- |
- |
TS init now writes the Go-style supabase/config.toml scaffold, updates supabase/.gitignore only when invoked inside a git repo, supports --force, --interactive, and --use-orioledb, and shares the same native implementation with the legacy shell command. |
link |
partial |
../src/next/commands/link/link.command.ts |
--password, --skip-pooler |
- |
TS link supports --project-ref, interactive project selection, and zero-config linking. It stores linked remote metadata in repo-local .supabase/project.json, but it does not yet manage direct database-password or pooler-specific link flows. |
unlink |
ported |
../src/next/commands/unlink/unlink.command.ts |
- |
- |
TS unlink matches the current Go surface and removes the repo-local linked project metadata for the active checkout. |
login |
ported |
../src/next/commands/login/login.command.ts |
- |
- |
Flag surface matches the old CLI: --token, --name, --no-browser. TS also supports env-var and piped-stdin token input without adding new flags. |
logout |
partial |
../src/next/commands/logout/logout.command.ts |
- |
--yes |
TS adds --yes to skip the confirmation prompt in non-interactive / scripted contexts. No equivalent flag in the Go CLI, so this remains partial rather than fully ported. |
start |
partial |
../src/next/commands/start/start.command.ts |
--ignore-health-check, --sandbox; legacy --exclude names like gotrue, storage-api, postgres-meta, edge-runtime, logflare, supavisor, and kong are not aligned |
--stack, --service-version, --detach |
TS start supports foreground and detached modes, named managed stacks, pinned stack baselines, linked/local/per-run service version overrides, and exclusions for auth, postgrest, realtime, storage, imgproxy, mailpit, pgmeta, studio, analytics, vector, and pooler. |
stop |
partial |
../src/next/commands/stop/stop.command.ts |
--all, --project-id |
--stack |
Current TS stop only covers one project-scoped managed stack at a time. It supports --no-backup, can target non-default stack names with --stack, and preserves pinned stack metadata unless --no-backup is used. |
status |
partial |
../src/next/commands/status/status.command.ts |
--override-name |
--stack |
Current TS status shows a detailed running or stopped view for one project-scoped managed stack and reports whether pinned stack versions are up to date against the cached linked/default baseline. |
| services | ported | ../src/next/commands/services/services.command.ts | --output remains a global legacy-shell concern rather than a next-only command flag | --output-format | TS restores the dedicated services command, prints the bundled local service image matrix, and best-effort compares linked remote versions without proxying to Go. |
| Old command | TS status | TS command path or missing |
Missing flags/params | Extra TS flags/params | Notes |
|---|---|---|---|---|---|
db diff |
ported |
legacy/commands/db/diff/ |
n/a |
n/a |
Native TS port. Native pg-delta / migra diff via edge-runtime against a Go-seam-provisioned live shadow (db __shadow); --use-pgadmin / --use-pg-schema delegate to the Go binary. |
db dump |
ported |
legacy/commands/db/dump/ |
n/a |
n/a |
Native TS port. Streams pg_dump/pg_dumpall via a Docker container (LegacyDockerRun); schema/data/role modes, --dry-run script print, IPv4 transaction-pooler fallback. |
db lint |
ported |
legacy/commands/db/lint/ |
n/a |
n/a |
Native TS port. Runs plpgsql_check in a rolled-back transaction via LegacyDbConnection; emits Go-parity pretty JSON. |
db pull |
ported |
legacy/commands/db/pull/ |
n/a |
n/a |
Native TS port. Native pg-delta / migra migration + --declarative pg-delta export; reconciles schema_migrations. The initial-migra pull dumps the remote schema natively (pg_dump) then appends the migra diff. Only --experimental (structured dump) still delegates to Go, pending a TS PostgreSQL DDL parser for format.WriteStructuredSchemas. |
db push |
ported |
legacy/commands/db/push/ |
n/a |
n/a |
Native TS port. Connects local/linked/--db-url; pushes pending migrations, --include-seed seeds (seed_files hash tracking), --include-roles, [db.vault] secrets; --dry-run. encrypted: vault secrets + best-effort pg-delta catalog cache not ported (no output impact). |
db reset |
ported |
legacy/commands/db/reset/ |
n/a |
n/a |
Remote path native (drop user schemas, vault upsert, MigrateAndSeed, --version/--last, --sql-paths seed override). Local path native: running check, recreate + migrate + seed via the hidden Go db __db-bootstrap seam, storage-gated bucket seeding (reuses seed buckets), git-branch Finished… line. Only the niche --experimental remote schema-files path still delegates to the Go binary (telemetry-disabled). |
db start |
ported |
legacy/commands/db/start/ |
n/a |
n/a |
Native TS port. Validates config, checks "already running" (prints Go's line), else delegates the container bootstrap (create + health + initial schema/roles/migrations/seed + _current_branch) to the hidden Go db __db-bootstrap --mode start seam. No status table / cli_stack_started (those are supabase start). --from-backup supported. |
inspect report |
ported |
legacy/commands/inspect/report/ |
n/a |
n/a |
Native TS port. Runs every inspect query via server-side COPY ... CSV, writes 14 CSVs under <output-dir>/<date>/, then renders a Go-parity Glamour rules summary (bounded csvq-subset evaluator; custom [experimental.inspect.rules] supported). |
inspect db db-stats |
ported |
legacy/commands/inspect/db/db-stats/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db replication-slots |
ported |
legacy/commands/inspect/db/replication-slots/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db locks |
ported |
legacy/commands/inspect/db/locks/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db blocking |
ported |
legacy/commands/inspect/db/blocking/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db outliers |
ported |
legacy/commands/inspect/db/outliers/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db calls |
ported |
legacy/commands/inspect/db/calls/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db index-stats |
ported |
legacy/commands/inspect/db/index-stats/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db long-running-queries |
ported |
legacy/commands/inspect/db/long-running-queries/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db bloat |
ported |
legacy/commands/inspect/db/bloat/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db role-stats |
ported |
legacy/commands/inspect/db/role-stats/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db vacuum-stats |
ported |
legacy/commands/inspect/db/vacuum-stats/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db table-stats |
ported |
legacy/commands/inspect/db/table-stats/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db traffic-profile |
ported |
legacy/commands/inspect/db/traffic-profile/ |
n/a |
n/a |
Native TS port. Queries Postgres directly via LegacyDbConnection; renders Go-parity Glamour tables. |
inspect db cache-hit |
ported |
legacy/commands/inspect/db/cache-hit/ |
n/a |
n/a |
Native TS port. Deprecated (use db-stats); routes to the active query. |
inspect db index-usage |
ported |
legacy/commands/inspect/db/index-usage/ |
n/a |
n/a |
Native TS port. Deprecated (use index-stats); routes to the active query. |
inspect db total-index-size |
ported |
legacy/commands/inspect/db/total-index-size/ |
n/a |
n/a |
Native TS port. Deprecated (use index-stats); routes to the active query. |
inspect db index-sizes |
ported |
legacy/commands/inspect/db/index-sizes/ |
n/a |
n/a |
Native TS port. Deprecated (use index-stats); routes to the active query. |
inspect db table-sizes |
ported |
legacy/commands/inspect/db/table-sizes/ |
n/a |
n/a |
Native TS port. Deprecated (use table-stats); routes to the active query. |
inspect db table-index-sizes |
ported |
legacy/commands/inspect/db/table-index-sizes/ |
n/a |
n/a |
Native TS port. Deprecated (use table-stats); routes to the active query. |
inspect db total-table-sizes |
ported |
legacy/commands/inspect/db/total-table-sizes/ |
n/a |
n/a |
Native TS port. Deprecated (use table-stats); routes to the active query. |
inspect db unused-indexes |
ported |
legacy/commands/inspect/db/unused-indexes/ |
n/a |
n/a |
Native TS port. Deprecated (use index-stats); routes to the active query. |
inspect db table-record-counts |
ported |
legacy/commands/inspect/db/table-record-counts/ |
n/a |
n/a |
Native TS port. Deprecated (use table-stats); routes to the active query. |
inspect db seq-scans |
ported |
legacy/commands/inspect/db/seq-scans/ |
n/a |
n/a |
Native TS port. Deprecated (use index-stats); routes to the active query. |
inspect db role-configs |
ported |
legacy/commands/inspect/db/role-configs/ |
n/a |
n/a |
Native TS port. Deprecated (use role-stats); routes to the active query. |
inspect db role-connections |
ported |
legacy/commands/inspect/db/role-connections/ |
n/a |
n/a |
Native TS port. Deprecated (use role-stats); routes to the active query. |
migration down |
ported |
legacy/commands/migration/down/ |
n/a |
n/a |
Native TS port. Revert prompt → drop user schemas → vault upsert → migrate&seed to the target version; defaults to --local. Skips Go's pgcache catalog write. |
migration fetch |
ported |
legacy/commands/migration/fetch/ |
n/a |
n/a |
Native TS port. Reads schema_migrations and writes supabase/migrations/<version>_<name>.sql; overwrite prompt for a non-empty dir. |
migration list |
ported |
legacy/commands/migration/list/ |
n/a |
n/a |
Native TS port. Merges remote schema_migrations with local files into a Glamour ASCII table (Local / Remote / Time-UTC columns); defaults to --linked. |
migration new |
ported |
legacy/commands/migration/new/ |
n/a |
n/a |
Native TS port. Writes supabase/migrations/<timestamp>_<name>.sql (mode 0644) from piped stdin; no DB/API. |
migration repair |
ported |
legacy/commands/migration/repair/ |
n/a |
n/a |
Native TS port. Transactional create-table + TRUNCATE/UPSERT/DELETE; applied mode reads local files; repair-all prompt; defaults to --linked. |
migration squash |
missing |
missing |
n/a |
n/a |
No native TS implementation yet. Wrapped in legacy shell. |
migration up |
ported |
legacy/commands/migration/up/ |
n/a |
n/a |
Native TS port. Computes pending migrations, upserts [db.vault], applies each transactionally; --include-all for out-of-order; defaults to --local. Does not seed (matches Go). |
seed buckets |
ported |
legacy/commands/seed/buckets/ |
n/a |
n/a |
Native TS port. Local-only (Go's seed defines no --project-ref, so the ref is always empty): seeds [storage.buckets] + [storage.vector] against the local Storage service gateway; remote/analytics paths are unreachable and omitted. --linked/--local accepted for surface parity (both seed local). Vector graceful-skip WARNINGs ported. |
test db |
ported |
legacy/commands/test/db/ |
n/a |
n/a |
Native TS port. --db-url/--local/--linked + variadic paths; runs supabase/pg_prove:3.36 via docker run; pgTAP enable/disable via @effect/sql-pg. --network-id override and [images] config override not modeled (documented divergences). |
test new |
ported |
legacy/commands/test/new/ |
n/a |
n/a |
Native TS port. Writes supabase/tests/<name>_test.sql from the embedded pgtap template; --template (pgtap). |
| Old command | TS status | TS command path or missing |
Missing flags/params | Extra TS flags/params | Notes |
|---|---|---|---|---|---|
gen bearer-jwt |
missing |
missing |
n/a |
n/a |
No native TS implementation yet. Wrapped in legacy shell. |
gen signing-key |
missing |
missing |
n/a |
n/a |
No native TS implementation yet. Wrapped in legacy shell. |
gen types |
missing |
missing |
n/a |
n/a |
No native TS implementation yet. Wrapped in legacy shell. |
The old Go functions family mixed linked-project operations (list, deploy, download, delete) with local-development workflows (new, serve).
Current TS only exposes low-level Management API routes under api. This tracker does not count those routes as parity for the old functions command family, because there is still no dedicated TS functions CLI surface and no local Functions workflow equivalent.
| Old command | TS status | New TS counterpart(s) | Notes |
|---|---|---|---|
functions delete |
missing |
missing |
Remote Management API routes exist under supabase api request ..., but there is no dedicated TS functions delete command surface. Wrapped in legacy shell. |
functions deploy |
missing |
missing |
Remote Management API routes exist under supabase api request ..., but there is no dedicated TS functions deploy command surface. Wrapped in legacy shell. |
functions download |
missing |
missing |
Remote Management API routes exist under supabase api request ..., but there is no dedicated TS functions download command surface. Wrapped in legacy shell. |
functions list |
missing |
missing |
Remote Management API routes exist under supabase api request ..., but there is no dedicated TS functions list command surface. Wrapped in legacy shell. |
functions new |
missing |
missing |
No TS local scaffold command yet. Wrapped in legacy shell. |
functions serve |
missing |
missing |
No TS local Functions serving command yet. Wrapped in legacy shell. |
The old Go storage family could target either the linked project or the local Storage API via --linked / --local.
Current TS only exposes low-level Management API routes under api. This tracker does not count those routes as parity for the old storage object-management CLI surface, especially because there is no TS equivalent for the old local Storage API workflow.
| Old command | TS status | New TS counterpart(s) | Notes |
|---|---|---|---|
storage cp |
missing |
missing |
No TS object copy command in next/. Natively ported in the legacy shell (legacy/commands/storage/cp/) — --recursive, --local, --linked, --cache-control, --content-type, --jobs (Go has no --copy-metadata). Adds TS-only --output-format json|stream-json. |
storage ls |
missing |
missing |
No TS object listing command in next/. Natively ported in the legacy shell (legacy/commands/storage/ls/) — --recursive, --local, --linked. Adds TS-only --output-format json|stream-json. |
storage mv |
missing |
missing |
No TS object move command in next/. Natively ported in the legacy shell (legacy/commands/storage/mv/) — --recursive, --local, --linked. Adds TS-only --output-format json|stream-json. |
storage rm |
missing |
missing |
No TS object remove command in next/. Natively ported in the legacy shell (legacy/commands/storage/rm/) — --recursive, --local, --linked; global --yes/SUPABASE_YES skips the confirmation. Adds TS-only --output-format json|stream-json. |
The remaining old Go Management API surface has been replaced by the route-first api command.
That means parity is no longer 1:1 at the flag level, but capability coverage is broader than the old Go surface:
- every current Management API OpenAPI route is exposed through
supabase api request <route> [--method <METHOD>] - the metadata test in
../src/next/commands/platform/platform-metadata.unit.test.tsverifies that every exported SDK/OpenAPI operation is represented exactly once - because the public UX is intentionally different, these commands are tracked as
partialrather thanported
Common input drift across all Management API mappings:
- missing old command-specific flags/parameters: the old hand-written subcommand flags are generally replaced by the generic route-first input model
- extra TS flags/parameters:
--method,--params,--json,--body,--body-file,--upload,--fields,--schema,--dry-run,--yes
Representative mappings:
projects list->supabase api request /v1/projectsprojects create->supabase api request /v1/projects --method POSTprojects get->supabase api request /v1/projects/{ref}projects config auth get->supabase api request /v1/projects/{ref}/config/authprojects config auth update->supabase api request /v1/projects/{ref}/config/auth --method PATCHbranches get->supabase api request /v1/projects/{ref}/branches/{branch_id}sso list->supabase api request /v1/projects/{ref}/config/auth/sso/providers
These route-first equivalents are intentionally lower-level than the old Go command families. Hand-written UX such as supabase branches create and supabase branches list still exists separately where the CLI benefits from a dedicated workflow.
| Old command | TS status | TS command path or missing |
Missing flags/params | Extra TS flags/params | Notes |
|---|---|---|---|---|---|
completion bash |
ported |
supabase completion bash |
- |
- |
Proxies verbatim to the Go binary so the emitted script is byte-identical to Cobra's output (CLI-1532). --no-descriptions added to match cobra's auto-registered flag (CLI-1858). |
completion fish |
ported |
supabase completion fish |
- |
- |
Proxies verbatim to the Go binary so the emitted script is byte-identical to Cobra's output (CLI-1532). --no-descriptions added to match cobra's auto-registered flag (CLI-1858). |
completion powershell |
ported |
supabase completion powershell |
- |
- |
Proxies verbatim to the Go binary so the emitted script is byte-identical to Cobra's output (CLI-1532). --no-descriptions added to match cobra's auto-registered flag (CLI-1858). |
completion zsh |
ported |
supabase completion zsh |
- |
- |
Proxies verbatim to the Go binary so the emitted script is byte-identical to Cobra's output (CLI-1532). --no-descriptions added to match cobra's auto-registered flag (CLI-1858). |
help |
partial |
supabase --help |
Go-style top-level help command shape |
- |
Feature parity exists via the framework-provided global --help flag instead of a dedicated help command. |
Phase 0 proxy wrappers in the legacy shell (src/legacy/). Each wrapped command forwards to the bundled Go binary via LegacyGoProxy.
The migration command group also accepts Go's top-level migrations alias and forwards singular migration argv to Go.
Legend:
wrapped: Phase 0 proxy wrapper exists in the legacy shellmissing: no legacy shell command yet
Flag divergences from the Go reference:
projects api-keyshas a TS-only--revealflag (no Go equivalent). It sendsreveal=trueso the Management API returns the full secret keys (sb_secret_...) in full instead of redacting them, addressing issue #4775. Default behavior (omitted flag) matches Go exactly.projects createhas a TS-only--high-availabilityflag (no Go equivalent). It setshigh_availabilityin the create request body. Default behavior (omitted flag) matches Go exactly.
Behavioral divergences from the Go reference:
serviceswarns on a malformed linked project ref (matching Go'sflags.LoadProjectRefvalidation message) but, unlike Go, does not then use that ref for the remote lookup. Go'scmd/services.gotreats the validation failure as non-fatal and still callslistRemoteImageswith the malformed value; TS skips the remote lookup instead, since the ref is embedded unescaped into the tenant gateway hostname and a malformed value could redirect the service-role key to an attacker-controlled host. Intentional TS-only hardening, not a parity bug — seeservices/SIDE_EFFECTS.md.