1.0.0 (2026-11-02)
- feat(cli)!: remove db remote commit and the low-use inspect db aliases (#7109) (948107b), closes #7108
- feat(cli)!: remove deprecated commands and the supabase-go binary (#6609) (6b3541d)
- feat(cli)!: remove deprecated config keys, env vars and per-function import maps (CLI-2597) (#7176) (2f60e0b), closes #7154
- feat(cli)!: resolve config values as flags > env > config.toml > defaults (#7074) (eaa5c4f)
- fix(config)!: honor sms
enable_confirmationson config push (CLI-2624) (#7221) (fdb5914) - refactor(cli)!: remove Go CLI naming and framing from code and docs (#7064) (b903db0)
Features
- config: add [auth.email] and [auth.sms] enabled, deprecating enable_signup (#7398) (3045479), closes #7055 #7055
- config: add db.migrations.checks severities and exclusions (CLI-2782, CLI-2783) (#7312) (fdb0e1f)
BREAKING CHANGES
[auth.sms] enable_confirmations = false, theinit
default, now turns phone confirmation off on the nextconfig push, set
it totrueto keep the phone code and runconfig diffbefore pushing[inbucket]and[remotes.<name>.inbucket]are
removed; use[local_smtp]. A non-empty[experimental] orioledb_versionis removed; use[db] orioledb_version.
SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSIONis removed; use
SUPABASE_DB_ORIOLEDB_VERSION. Thelinkedinandslackauth
providers are removed; uselinkedin_oidcandslack_oidc.
INBUCKET_URLis removed fromstatusandstack statusoutput and
--override-name inbucket.urlis rejected; useMAILPIT_URLand
mailpit.url. Animport_map.jsoninside a function directory is no
longer picked up byfunctions deploy,functions serveorstart;
rename it todeno.jsonor setfunctions.<slug>.import_map.supabase db remote commitis removed; usesupabase db pull.supabase inspect db total-index-sizeis removed; use
supabase inspect db index-stats.supabase inspect db total-table-sizesandsupabase inspect db table-index-sizesare
removed; usesupabase inspect db table-stats. Each removed command
exits 1 and prints its replacement.- Flags and
SUPABASE_*environment variables now
override config, including a matched[remotes.<name>]block. Every
value resolves in one order: flag > shell environment > project env
files >config.json/config.toml(a matched remote block over the
base) > default. Project env files are.env.<SUPABASE_ENV>.local,
.env.local,.env.<SUPABASE_ENV>and.env, insupabase/and then
the project root;SUPABASE_ENVdefaults todevelopment.
- If you deploy to a project with a
[remotes.*]block, any
SUPABASE_*variable in the job or in those files now beats the block.
The CLI warns for each value it overrides. Checkenv | grep ^SUPABASE_
in CI andgrep -h ^SUPABASE_ supabase/.env* .env*in the repo, and set
SUPABASE_ENVin CI so.env.developmentdoesn't apply. supabase config pushnow pushes those overrides; for example, a
SUPABASE_AUTH_SITE_URLin.env.localreplaces the value in
[remotes.production]. Push labels each env-sourced value, and
supabase config diffshows the same values.- Seeding a project that matches a
[remotes.*]block now asks first,
unless the block itself setsdb.seed.enabled = true.db push --include-seedanddb reset --linkedexit 1 in CI unless you pass
--yes.--include-seedandSUPABASE_DB_SEED_ENABLED=truenow
overrideenabled = falsein the base[db.seed]too.db pushstill
seeds only with--include-seed. --passwordwith--localor--db-urlnow exits 1 ondb push,
db pull,db dump,db schema declarative generate,migration list
andmigration repair.migration squashtargets the local database by
default, somigration squash -pneeds--linked. Put the password in
the URL, or set[db].passwordfor the local database.- In a directory linked to project A,
SUPABASE_DB_PASSWORDis no
longer sent to another project (--project-ref B). Pass--password,
or provide an access token so the CLI can create a temporary login role. - An invalid value in config or in a
SUPABASE_*variable now fails
every command that loads project config, includingdb push,stopand
services(for exampleSUPABASE_STUDIO_PORT=abc). The error names the
variable or file and reportsCliConfigValueError. SUPABASE_EXPERIMENTAL_PGDELTA_ENABLEDoverrides
[experimental.pgdelta].enabled, sofalseselects migra for the run.
Boolean variables, includingSUPABASE_EXPERIMENTAL_STACK, accept1,
t,T,true,True,TRUEor0,f,F,false,False,
FALSEand fail on anything else.supabase db diff --use-pg-delta=falsenow turns pg-delta off even
when config or env turns it on.supabase gen types --localuses[db].password, not
SUPABASE_DB_PASSWORD.SUPABASE_PROJECT_IDnow names local containers even when a remote
block matches. Without aproject_idin config.toml, local containers
and volumes are named after the project folder, not the project ref. Run
supabase stopbefore upgrading, or setproject_id.- Ports with a leading zero (
054322) are rejected. servicesand thefunctionscommands readconfig.jsonbefore
config.toml.- Without
--workdir, the CLI uses the nearest directory with
supabase/config.tomlorsupabase/config.json, so a nested
config.jsonproject now wins over an outerconfig.tomlone. inspect reportneeds[[experimental.inspect.rules]]with string
fields; a single[experimental.inspect.rules]table now fails.supabase link --passwordis deprecated and ignored.- Error codes:
MigrationPasswordFlagsErroris now
DbPasswordFlagsError; invalid values reportCliConfigValueError;
seeding without consent reportsSeedConsentRequiredError.
COBRA_COMPLETION_DESCRIPTIONSis no longer read; set
SUPABASE_COMPLETION_DESCRIPTIONSto control shell completion
descriptions. Error messages that quoted Go library errors are reworded:
invalid boolean flag values (e.g.sso add --skip-url-validation) now
sayexpected a booleaninstead ofstrconv.ParseBool: …; invalid
unsigned values forstorage cp --jobsanddb reset --lastnow say
expected an unsigned integer(orvalue out of range) instead of
strconv.ParseUint: …; oversized migration/seed statements report
scanner: token too longinstead ofbufio.Scanner: token too long;
gen bearer-jwtclaim and JWK parse errors now readinvalid claims: expected a JSON object, got <kind>,invalid claims: number <n> is out of range,failed to parse JWK: expected a JSON object, got <kind>,
andinvalid JWK field <field>: expected <type>, got <kind>instead of
json: cannot unmarshal … into Go value/struct field …. Config type
errors name values by shape:SUPABASE_PROFILEfiles reportexpected a YAML mapping at the top levelandarray/objecttype names,[db]
glob entries report TOML type names (local date,offset date-time,
array,table, …) instead of Go type names, and malformeddb lint/db advisorspayloads reportinvalid <field>: expected <shape>
instead of naming Go types.SUPABASE_PROFILEerrors are reworded
(unknown keys: …,<key> is required,<key> must be an http(s) URL,
unsupported config file type …,no profile config file specified)
and multi-line profile errors no longer pad lines with trailing spaces.
Config decode errors drop thedecoding failed due to the following error(s):header and render entries as<key>: expected a string, got <type>,<key>: unknown keys: …,<key>: must be one of ….failed to unmarshal …messages (postgres-config, bootstrap templates, functions
download) now readfailed to parse …,db lint'sfailed to marshal json:readsfailed to parse lint result:, and TOML output errors drop
thetoml:prefix.- Removed the deprecated commands and flags that still
ran through the bundled Go binary, and thesupabase-gobinary itself.
If your scripts or CI use any of these, switch to the replacement. Each
removed command or flag now exits with code 1 and prints its
replacement.
supabase db remote changes→supabase db diff --linkedsupabase gen keys→supabase projects api-keys --project-ref <ref>supabase db diff --use-pg-schema→ omit the flag to use the default
engine, or pass--use-pg-deltasupabase functions download --legacy-bundle→supabase functions download --use-api. If that also fails and the Function was deployed
with a CLI older than 1.120.0, redeploy it with the current CLI first.supabase db branch create,delete,listandswitch→ removed
with no local replacement. Hosted preview branches are managed with
supabase branches.--create-ticket(global flag) → removed. Report CLI problems with
supabase issue bug.supabase-go→ no longer installed. Callsupabaseinstead.