Skip to content

v2.115.0

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Aug 10:35
· 4 commits to develop since this release
18ae43a

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 enginedb 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-coverage makes them fatal. The declarative schema directory also defaults to supabase/schemas now, matching the legacy engine; if your tree lives under the old supabase/database default, move it or set declarative_schema_path = "./database" under [experimental.pgdelta] in supabase/config.toml. If the new engine blocks you, set SUPABASE_USE_PG_DELTA_NEXT=false to 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 db now fails when no tests run — a run where pg_prove finds zero pgTAP tests exits non-zero with no 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 the supabase test db step. (#6210)
  • --password now beats SUPABASE_DB_PASSWORD on db remotedb remote changes|commit prefer an explicit --password over 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 migrationsdb reset and db push batch migration and seed statements again, cutting runs from minutes to seconds on Windows; migration list, db pull, and migration repair order migrations by version like db push, so an in-sync tree no longer shows phantom conflicts; and migration new writes the file before reporting success on Windows. (#6224, #6225, #6192)
  • Link a preview branch directlysupabase link accepts 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 errorsfunctions serve setup failures name the actual filesystem problem instead of An error occurred in Effect.tryPromise; a crashed db diff --use-migra run 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 — standalone supabase functions serve discovers supabase/functions/<slug>/.env for each function, alongside the shared supabase/functions/.env; --env-file overrides both. supabase start does not load these files. (#6182)
  • Experimental projects create flags--release-channel and --postgres-engine pick the release channel and Postgres engine for new projects. Both require --experimental and stay hidden from --help while in preview. (#6186)
  • Silence the update notice — set SUPABASE_NO_UPDATE_NOTIFIER=1 to suppress the new-version notice printed after commands. (#6143)

Improvements

  • supabase start polls 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 start works with strictly confined Docker installs (such as Docker Snap) and remote Docker contexts: container secrets stream over stdin via docker cp instead 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_path values resolve against the project root consistently. (#6160)

Plus 12 internal improvements and dependency updates.

Full changelog: v2.114.0...v2.115.0