# What changed in supabase

> 42 changes in supabase 2 from its official release notes, upgrade guides and advisories: 4 breaking, 1 security, 2 new APIs and options. Each one cited. Sources checked 2026-10-31. HTML: https://unstale.sh/pypi/supabase/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## supabase 2

### Breaking changes

- x-relay-error responses now raise FunctionsRelayError. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Relay errors are saved as text instead of being parsed as JSON. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- UserDoesntExist no longer includes the raw JWT. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Raises AuthInvalidJwtError when the JWT has no exp claim. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)

### Security

- invoke copies headers to prevent them from leaking across calls. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)

### New APIs and options

- Function invocation no longer leaks options and supports specifying the HTTP method and sending a bytes body. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Support for new realtime features was added. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)

### Behavior and default changes

- delete now returns a select builder, allowing callers to chain a selection. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- insert now returns a select builder, allowing callers to chain a selection. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- update now returns a select builder, allowing callers to chain a selection. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- upsert now returns a select builder, allowing callers to chain a selection. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- X-Client-Info now uses structured semicolon-delimited metadata. (2.31.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.31.0)

### Fixes and other changes

- channel() returns the existing channel for a topic when one already exists. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- A caller-provided content-type is no longer overwritten. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- verify is passed as a keyword argument in create_client. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Headers are handled case-insensitively with httpx.Headers. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Quoted values in in filters are escaped. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- The session is kept after refreshing it during initialization. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- neq, gt, gte, lt and lte filter values are serialized like eq. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- OAuth query params are no longer mutated. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- set_auth updates channel join payloads. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Listeners can now unsubscribe during notification. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Vector index creation time is preserved. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Vector object metadata is JSON. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Connection params are included in the WebSocket URL. (2.33.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.33.0)
- Sort parameters are sent in camelCase. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Non-string values in array filters are coerced. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Raises AuthWeakPasswordError for responses that do not include an error code. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Every client-sent channel event now includes join_ref. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Array-literal elements are escaped for these filters. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Filter values are serialized in eq(). (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Non-standard and non-JSON error responses are handled without raising AttributeError. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Transient failures are retried for HEAD requests. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Boolean values are normalized to lowercase literals. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- The key parameter is now optional for the storage list_v2 method. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- PostgREST RPC maybe_single behavior is aligned with select. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Negation is preserved for or filters. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Every key in a presence diff's leaves is processed. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Boolean client options set to False are now honored when replacing options. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Storage cache-control header handling and retry safety were fixed. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- Negation is preserved for text search filters. (2.32.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.32.0)
- pyiceberg is now an optional dependency. (2.31.0) — [release notes](https://github.com/supabase/supabase-py/releases/tag/v2.31.0)
