·
4 commits
to develop
since this release
Supabase CLI v2.115.0 — 2026-08-18
This release changes two defaults you should know about before upgrading CI: schema diffing now uses the bundled pg-delta engine, and supabase test db fails when it finds zero tests. It also makes migrations faster and more consistent, and fixes supabase start on confined Docker installs.
⚠️ Breaking changes
- Schema diffing defaults to the bundled pg-delta engine —
db diff,db pull, and declarative schema generate/sync now use the in-process pg-delta engine instead of the legacy implementation. Generated SQL and transaction-aware file splits can differ from previous output, and there is no automatic fallback — coverage gaps warn, and--strict-coveragemakes them fatal. The declarative schema directory also defaults tosupabase/schemasnow, matching the legacy engine; if your tree lives under the oldsupabase/databasedefault, move it or setdeclarative_schema_path = "./database"under[experimental.pgdelta]insupabase/config.toml. If the new engine blocks you, setSUPABASE_USE_PG_DELTA_NEXT=falseto unblock yourself and open a GitHub issue describing what broke — the opt-out is temporary and will be removed in about a month. (#6102) supabase test dbnow fails when no tests run — a run where pg_prove finds zero pgTAP tests exits non-zero withno pgTAP tests found in <paths>instead of reporting success. Previously a typo'd path, an empty tests directory, or a bind-mount mismatch could leave CI green while testing nothing. If a pipeline legitimately runs zero tests, drop thesupabase test dbstep. (#6210)--passwordnow beatsSUPABASE_DB_PASSWORDondb remote—db remote changes|commitprefer an explicit--passwordover the environment variable; previously the env var silently won due to a flag-binding bug. If your automation sets both, the flag value is now the one used. (#6162)
Highlights
- Faster, more consistent migrations —
db resetanddb pushbatch migration and seed statements again, cutting runs from minutes to seconds on Windows;migration list,db pull, andmigration repairorder migrations by version likedb push, so an in-sync tree no longer shows phantom conflicts; andmigration newwrites the file before reporting success on Windows. (#6224, #6225, #6192) - Link a preview branch directly —
supabase linkaccepts a project ref, or the name or UUID of a branch of the currently linked project, both as the positional argument and via--project-ref. (#6168) - Clearer errors —
functions servesetup failures name the actual filesystem problem instead ofAn error occurred in Effect.tryPromise; a crasheddb diff --use-migrarun fails loudly instead of printing "No schema changes found"; and an unreachable database during batched migrations reports as a connection error. (#6191, #6240, #6234)
New features
- Per-function env files in
functions serve— standalonesupabase functions servediscoverssupabase/functions/<slug>/.envfor each function, alongside the sharedsupabase/functions/.env;--env-fileoverrides both.supabase startdoes not load these files. (#6182) - Experimental
projects createflags —--release-channeland--postgres-enginepick the release channel and Postgres engine for new projects. Both require--experimentaland stay hidden from--helpwhile in preview. (#6186) - Silence the update notice — set
SUPABASE_NO_UPDATE_NOTIFIER=1to suppress the new-version notice printed after commands. (#6143)
Improvements
supabase startpolls booting services one at a time again, matching the Go CLI — concurrent health checks could burst Docker subprocesses and exhaust retries on constrained machines. (#6149)- Piped text output respects backpressure instead of buffering in memory, so
supabase db dump | <slow consumer>no longer risks running out of memory on large databases. (#6212) - The bundled Go binary only includes the commands still proxied to it, shrinking the installed size. (#6162)
Bug fixes
supabase startworks with strictly confined Docker installs (such as Docker Snap) and remote Docker contexts: container secrets stream over stdin viadocker cpinstead of being staged as plaintext files in/tmp. (#6201)supabase functions serve <name>accepts its optional function-name argument again; the command still serves all discovered functions, matching the Go CLI. (#6173)- Auth email template and notification
content_pathvalues resolve against the project root consistently. (#6160)
Plus 12 internal improvements and dependency updates.
Full changelog: v2.114.0...v2.115.0