Supabase CLI v2.122.0 — 2026-10-23
This release is mostly fixes. The headline changes are supabase/supabase.lock for pinning stack service versions, PGSSL* and TLS settings now reaching db push --linked and pg_dump, and clearer config parse errors. Several fixes cover start/stop on Podman and stack reliability.
Highlights
- Pin stack service versions in a lock file — stack mode can run any published service version, match your hosted project after
supabase link, and reproduce the whole local stack from a committedsupabase/supabase.lock. (#7195) - Postgres TLS settings now apply to
db push --linkedandpg_dump—PGSSLMODE,PGSSLROOTCERT, andPGSSLCERT/PGSSLKEYare read from your shell on direct connections, and remotedb dumpand the firstdb pullpass the resolved TLS settings through. Before,verify-fullwas ignored and client-cert servers rejected the dump. (#7261, #7266)
New features
supabase --helpshows token permissions — every command's help now has a PERMISSIONS section listing the personal access token permissions it needs, so you can scope tokens for CI without guessing. (#7268)supabase stackcan run any published service version — the lock file (see Highlights) also lets you try a hotfix or match production versions. (#7195)
Improvements
- Config errors say what's wrong and where —
start,status,stop, andfunctions serveused to print a bareCliConfigParseError. They now point to the bad line.infandnannumbers are rejected at load time instead of slipping through. (#7267) - Heads-up: the default target is changing — the CLI now warns before the upcoming switch to a local default target. Check your scripts if you rely on the current default. (#7186)
db pullandpg_dumphonor TLS config — see Highlights. (#7266)
Bug fixes
supabase startandstopno longer fail every few runs on Podman — when there's nodockeron PATH (macOS withpodman machine), you no longer hitfailed to inspect docker imageorssh: handshake failed: EOF. (#7270)supabase stop --no-backupno longer exits 1 with older Docker CLIs — it works with Docker CLI older than 23.0 talking to a newer daemon. (#7177)- Piping CLI output into
heador another reader that exits early exits cleanly — the CLI used to crash withUnknown: Stdio.stdout(exit 1), and with--output jsonit could hang forever. It now exits 0. (#7175) db diff --from linked --to linkedno longer fails without a database password — it used to fail withpassword authentication failed for user "cli_login_postgres"when no password was set via--password,SUPABASE_DB_PASSWORD, orsupabase/.env. (#7139)functions deploy --use-apiuploads multiline dynamic imports — functions withimport(split across lines, or with import attributes, no longer throwModule not foundafter deploy. (#7282)supabase inittest OTP example works — the[auth.sms.test_otp]example now includes the country code, so+14152127777gets the test code instead of sending a real SMS. (#7279)- Stack: concurrent native stacks no longer share a backend port — two stacks started at once could bind Logflare to the same private port. (#7184)
- Stack: idle gateway connections stay open for 75 s — a short pause between API calls no longer ends in
TypeError: fetch failed. (#7193) - Stack: local Studio logs work again — analytics is pinned to Logflare 1.50.15, so logs pages no longer show "Backend error". (#7182)
- Stack:
reststarts when adb_pre_requesthook rejects requests without an app header — it used to hang on readiness. (#7216) - Stack: native launches are more reliable — the launcher waits for a cache lock instead of failing, and Realtime waits for its own bind line before it's marked ready. (#7145)
Internal
Plus 6 internal improvements and dependency updates.
Full changelog: v2.121.0...v2.122.0