Supabase CLI v3.1.0 — 2026-11-09
This release adds inspect db diagnostics, a config.jsonc option, and an API retry cap for CI. Most of the rest is fixes for start, link, and db connections, plus a few local-stack behaviors that now match the hosted platform. One gotcha: local CORS on /functions/v1 changed (see Improvements).
Highlights
- Pinned Supabase CA on every linked database connection —
db push/pull/dump/diff/reset/lint/advisors/query,migration *, andinspect *now verify the hosted server certificate. Previously onlygen typesdid. (#7518) - TypeScript types for linked projects come from your local
config.toml—gen types --lang typescriptrespects[api].extra_search_pathand falls back to the Management API when needed. Remote output now matches local output. (#7520) config.jsoncsupport — comments and trailing commas work, and the CLI keeps them when it writes the file. (#7488)inspect dbgets three new commands —xid-age,toast-sizes, andcollation-drift, which reports indexes whose collation version has drifted and prints the fix steps. (#6527, #6528, #7460)
New features
SUPABASE_API_MAX_RETRIEScaps Management API retries — set0in CI to send each request once. It applies to every API client, includingloginandservices, andfunctions deployrespects it while still honouring rate limits. (#7394)inspect db xid-age— lists user tables by transaction ID age, oldest first. Useful for spotting wraparound risk. (#6527)inspect db toast-sizes— lists tables by TOAST storage, largest first. (#6528)inspect db collation-drift— read-only check for btree indexes affected by OS collation changes. Run it, then follow the printedamcheck→REINDEX INDEX CONCURRENTLY→REFRESH VERSIONsteps. (#7460)- Logs commands unified —
supabase logsis a single entry point for local and hosted logs, with an interactive explorer and structured output for scripts. (#7437) config.jsoncand commented JSON configs — the loader readsconfig.json,config.jsonc, andconfig.tomlfromsupabase/. Edits from the CLI preserve your comments. (#7488)- Config schema version is declared and checked — add
$schematoconfig.json/config.jsonc, or#:schemaat the top ofconfig.toml. No declaration means v1. (#7514) initwrites a schema directive — newconfig.tomlfiles start with#:schema https://supabase.com/schemas/config/v1.json, so Taplo, Tombi, and VS Code get autocomplete and validation. (#7464)[auth.email] require_current_password— set it inconfig.tomlto require the current password for password changes.config push/pull/diffsupport it too. (#7458)- Local stack serves auth email templates from
content_path— templates are read on every fetch, so edits show up without a restart. (#7527) - Config-load telemetry records the failing key —
config_keyis added tocli_command_executedevents. (#7468)
Improvements
- Stack CORS now matches the hosted platform — preflights return
200instead of204, with a wider method list. A live parity test keeps them aligned. (#7485) - Gotcha: CORS on
/functions/v1is now handled by your function — the gateway no longer addsAccess-Control-Allow-Origin: *, so a function that sends no CORS headers will be blocked by browsers. Add the headers in the function, or check your function's CORS handling if you call it from a browser. (#7472) - Linked
sso listandsso showfail faster — each attempt is capped at 10s instead of 60s. When an SSO call fails, the CLI also warns if the project isn'tACTIVE_HEALTHY. (#7491) supabase startskips Docker's first health-check wait — when services are already up, startup no longer waits about 10s on that check. (#7430)supabase stopno longer shows an error forfunctions serve— stopping the stack whilefunctions serveruns is treated as a normal stop, not a crash. (#7463)- Clearer migration errors for
LOCK TABLE— a migration that fails withSQLSTATE 25P01now explains the fix. Wrap the lock inBEGIN/COMMIT. (#7487) - Clearer Docker-down detection — newer Docker daemon-down messages, including the Windows form, are recognised. (#7505)
Bug fixes
supabase startno longer hangs after the output pipe closes — piping into a reader that exits early, likeprojects list | true, now ends the command. (#7469)db pushworks against a remote Postgres without TLS — an unset orsslmode=preferURL falls back to plaintext, likepsql. (#7509)db start --from-backupworks on Windows — the drive letter is kept in the backup bind path. (#7498)linkno longer carries the old project's service versions — relinking to a new project no longer runs the old Auth, PostgREST, or Storage versions. (#7476)gen typesincludes views fromdb-extra-search-pathschemas — embeds that work at runtime are no longer rejected by the generated types. (#7515)- Studio's Logs pages are hidden when Logflare is off — with
[analytics] enabled = false, Studio no longer shows Logs pages that fail with a 500. (#7530) - Functions get
[edge_runtime.secrets]as written — secret names keep their case, andsupabase/functions/<slug>/.envis read. (#7481, #7499) - Stack image transforms match the legacy backend — imgproxy gets the same tuning, so browsers that accept WebP get WebP. (#7483)
- Studio can create vector buckets on the stack — the local S3 keys are passed through. (#7486)
- Binary request bodies type-check correctly in the Management API client —
Uint8Array,ArrayBuffer, andBlobuploads to theupdate-functionbody are accepted again. (#7443) - Linked project health is surfaced on SSO failures — the warning above appears when a project isn't healthy. (#7491)
- Docker start no longer leaves containers with a ~1B open-file limit —
supabase startcaps Erlang port tables for realtime, analytics, and the pooler. (#7512) - Missing
supabase_privileged_rolegets its own error — the login-role mint failure now says what's missing instead of a generic status error. (#7461) - Functions deploy errors are classified by cause — a malformed
deno.jsonor import map counts as invalid config, not an internal bug. (#7510) - Stack gateway and registry fixes — the port registry opens in WAL mode so concurrent reads don't fail on Windows, and a directory restriction no longer strips a traverse bit. (#7342, #7276)
- Timeout and readiness errors name the stalled step — engine and helper timeouts report which command or container stalled. (#7407, #7319)
- Edge runtime exit 15 is treated as a stop — see the Improvements note above. (#7463)
Plus 5 internal improvements and dependency updates.
Full changelog: v3.0.0...v3.1.0