Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "3.0.0-a1"
".": "3.0.0-a2"
}
85 changes: 85 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,90 @@
# Changelog

## [3.0.0-a2](https://github.com/supabase/supabase-py/compare/v3.0.0-a1...v3.0.0-a2) (2026-11-11)


### ⚠ BREAKING CHANGES

* **supabase:** share one lazily connecting realtime client per AsyncClient ([#2034](https://github.com/supabase/supabase-py/issues/2034))
* **realtime:** rename RealtimeClient.close() to aclose() ([#2036](https://github.com/supabase/supabase-py/issues/2036))
* **realtime:** move to protocol 2.0.0 with binary broadcast ([#2033](https://github.com/supabase/supabase-py/issues/2033))
* add a shared retry policy with Retry-After, jitter and per-client configuration ([#2030](https://github.com/supabase/supabase-py/issues/2030))
* **postgrest:** type text_search options and the response shape ([#2028](https://github.com/supabase/supabase-py/issues/2028))
* **postgrest:** require a filter or all() on update() and delete() ([#2025](https://github.com/supabase/supabase-py/issues/2025))
* **postgrest:** make the request builders immutable ([#2023](https://github.com/supabase/supabase-py/issues/2023))
* **auth:** typed auth state changes and a single-flight session refresh core ([#2021](https://github.com/supabase/supabase-py/issues/2021))
* add a root SupabaseError and wrap transport errors in every package ([#2018](https://github.com/supabase/supabase-py/issues/2018))
* **functions:** remove FunctionsError.to_dict and FunctionsApiErrorDict ([#2015](https://github.com/supabase/supabase-py/issues/2015))
* **supabase:** replace ClientOptions with keyword arguments and per-service options ([#2011](https://github.com/supabase/supabase-py/issues/2011))
* add configurable request timeouts for every service ([#2010](https://github.com/supabase/supabase-py/issues/2010))
* **realtime:** raise send failures instead of writing to a failed connection ([#2007](https://github.com/supabase/supabase-py/issues/2007))
* **realtime:** honor heartbeat intervals below 15 seconds and accept float durations ([#2006](https://github.com/supabase/supabase-py/issues/2006))
* raise the minimum python version to 3.12 ([#2002](https://github.com/supabase/supabase-py/issues/2002))
* **supabase:** freeze the option and parameter dataclasses ([#2000](https://github.com/supabase/supabase-py/issues/2000))
* **supabase:** share one client implementation between AsyncClient and Client ([#1998](https://github.com/supabase/supabase-py/issues/1998))
* **storage:** take upsert as a bool in upload and create_signed_upload_url ([#1997](https://github.com/supabase/supabase-py/issues/1997))
* **storage:** treat object keys as literal strings ([#1987](https://github.com/supabase/supabase-py/issues/1987))
* spell out abbreviations in public names ([#1981](https://github.com/supabase/supabase-py/issues/1981))
* **functions,postgrest:** stop importing httpx outside the httpx adapter ([#1977](https://github.com/supabase/supabase-py/issues/1977))

### Features

* add a root SupabaseError and wrap transport errors in every package ([#2018](https://github.com/supabase/supabase-py/issues/2018)) ([ac8950f](https://github.com/supabase/supabase-py/commit/ac8950f614ba714211bfb62c15656332c90a7e57))
* add a shared retry policy with Retry-After, jitter and per-client configuration ([#2030](https://github.com/supabase/supabase-py/issues/2030)) ([885bfc5](https://github.com/supabase/supabase-py/commit/885bfc5da6a8e809873ba1e68443178adb652547))
* add configurable request timeouts for every service ([#2010](https://github.com/supabase/supabase-py/issues/2010)) ([50354b6](https://github.com/supabase/supabase-py/commit/50354b63c65d8e395f7de3c18e61eb90779dad8d))
* **auth:** typed auth state changes and a single-flight session refresh core ([#2021](https://github.com/supabase/supabase-py/issues/2021)) ([1f56185](https://github.com/supabase/supabase-py/commit/1f56185a062d75ec2c31694eeb8633705a76f0bc))
* **postgrest:** require a filter or all() on update() and delete() ([#2025](https://github.com/supabase/supabase-py/issues/2025)) ([29843bd](https://github.com/supabase/supabase-py/commit/29843bdca5e2e97ce50be2648d716975c2cb927e))
* **postgrest:** type text_search options and the response shape ([#2028](https://github.com/supabase/supabase-py/issues/2028)) ([d3dd14b](https://github.com/supabase/supabase-py/commit/d3dd14bdae69550b5c81f25d216ae7acc4b9f199))
* **realtime:** move to protocol 2.0.0 with binary broadcast ([#2033](https://github.com/supabase/supabase-py/issues/2033)) ([92d524c](https://github.com/supabase/supabase-py/commit/92d524c1d8778d0dc0070663c28413b308722561))
* **realtime:** rename RealtimeClient.close() to aclose() ([#2036](https://github.com/supabase/supabase-py/issues/2036)) ([6eca35f](https://github.com/supabase/supabase-py/commit/6eca35f9efd3afb6049919edcaa657de135b82ec))
* **supabase:** add close() and aclose() to the top-level client ([#2035](https://github.com/supabase/supabase-py/issues/2035)) ([1ab137d](https://github.com/supabase/supabase-py/commit/1ab137d884f2ab2bc55b2065877be1a763ea97e0))
* **supabase:** add with_token() for per-request clients ([#2032](https://github.com/supabase/supabase-py/issues/2032)) ([236b2a1](https://github.com/supabase/supabase-py/commit/236b2a16e4f8bb25a4a80c18311b6200d1bafdf2))
* **supabase:** pull the realtime access token from the auth session ([#2038](https://github.com/supabase/supabase-py/issues/2038)) ([73a65b4](https://github.com/supabase/supabase-py/commit/73a65b48b96b779461954ccfaae09dbd489304d8)), closes [#1210](https://github.com/supabase/supabase-py/issues/1210)
* **supabase:** replace ClientOptions with keyword arguments and per-service options ([#2011](https://github.com/supabase/supabase-py/issues/2011)) ([797f938](https://github.com/supabase/supabase-py/commit/797f938f87a9fbbe8f9ef009f046293026ede641))


### Bug Fixes

* **auth:** make the sync test generator reproduce the committed sync tests ([#1971](https://github.com/supabase/supabase-py/issues/1971)) ([5523e0b](https://github.com/supabase/supabase-py/commit/5523e0b141bf7f3a207211c7c6e68312aa2ace8b))
* **auth:** start refresh token retry backoff at 200 milliseconds ([#1978](https://github.com/supabase/supabase-py/issues/1978)) ([394a690](https://github.com/supabase/supabase-py/commit/394a69020f8135746f78931178ba06a258cd715e))
* **deps:** raise the pyjwt floor to 2.15.1 and install pyiceberg with pyarrow ([#1993](https://github.com/supabase/supabase-py/issues/1993)) ([14e4d9a](https://github.com/supabase/supabase-py/commit/14e4d9a1501e96a95501c207b36bdb0573cd3e63))
* **functions,postgrest:** stop importing httpx outside the httpx adapter ([#1977](https://github.com/supabase/supabase-py/issues/1977)) ([5331957](https://github.com/supabase/supabase-py/commit/533195702a4e61bca4f19aae9680d7b13d85437d))
* **postgrest:** make the request builders immutable ([#2023](https://github.com/supabase/supabase-py/issues/2023)) ([eb983ef](https://github.com/supabase/supabase-py/commit/eb983ef5ec72e4027c1c19eccac3a0f02c79986d)), closes [#1208](https://github.com/supabase/supabase-py/issues/1208)
* **postgrest:** reject filters and transforms after insert() and upsert() ([#2022](https://github.com/supabase/supabase-py/issues/2022)) ([1166a75](https://github.com/supabase/supabase-py/commit/1166a759a40834284601644d6f339da8d507800d))
* **realtime:** honor heartbeat intervals below 15 seconds and accept float durations ([#2006](https://github.com/supabase/supabase-py/issues/2006)) ([c66e48e](https://github.com/supabase/supabase-py/commit/c66e48edb6c1d0ff02237472fd5468933755a760))
* **realtime:** raise send failures instead of writing to a failed connection ([#2007](https://github.com/supabase/supabase-py/issues/2007)) ([7f6add1](https://github.com/supabase/supabase-py/commit/7f6add13ebf4790fe225068986a85a4cf1fc4592))
* **realtime:** redact API keys and access tokens from debug logs ([#1992](https://github.com/supabase/supabase-py/issues/1992)) ([2b20207](https://github.com/supabase/supabase-py/commit/2b202075f15129283ae69bcfa64b42a2df0d72b7))
* **realtime:** send the access token on every join and push it on every session change ([#2037](https://github.com/supabase/supabase-py/issues/2037)) ([20d29b6](https://github.com/supabase/supabase-py/commit/20d29b64547f4fbf503f19a9a557ff575cc9f3b3))
* **storage:** take upsert as a bool in upload and create_signed_upload_url ([#1997](https://github.com/supabase/supabase-py/issues/1997)) ([0331c57](https://github.com/supabase/supabase-py/commit/0331c57eff1569cd0ea69250a3bafc752b6d50e6)), closes [#1996](https://github.com/supabase/supabase-py/issues/1996)
* **storage:** treat object keys as literal strings ([#1987](https://github.com/supabase/supabase-py/issues/1987)) ([b54cba4](https://github.com/supabase/supabase-py/commit/b54cba4ff061cdcdd0b0d7cb1e38395aac1bf5ce))
* **supabase:** freeze the option and parameter dataclasses ([#2000](https://github.com/supabase/supabase-py/issues/2000)) ([7bcf067](https://github.com/supabase/supabase-py/commit/7bcf067c8a8d7f5bd65ba141392eb3d140b7314b))
* **supabase:** keep the session token on every auth event that has one ([#1989](https://github.com/supabase/supabase-py/issues/1989)) ([0c07c58](https://github.com/supabase/supabase-py/commit/0c07c5860180dff7549154a38b899e5c0fc0e337))
* **supabase:** share one client implementation between AsyncClient and Client ([#1998](https://github.com/supabase/supabase-py/issues/1998)) ([76f31e2](https://github.com/supabase/supabase-py/commit/76f31e2431771024c09ff1b193a1fcedf4590ce9))
* **supabase:** share one lazily connecting realtime client per AsyncClient ([#2034](https://github.com/supabase/supabase-py/issues/2034)) ([60ce545](https://github.com/supabase/supabase-py/commit/60ce54577c80591fe007f83f6318e42f791f47a9))
* **supabase:** stop sending new-format api keys as bearer to edge functions ([#2005](https://github.com/supabase/supabase-py/issues/2005)) ([213ae34](https://github.com/supabase/supabase-py/commit/213ae34a1433ab4aa7f7fa7512ebf232c3bdbf90))
* **utils:** drop credential headers on cross origin redirects ([#1994](https://github.com/supabase/supabase-py/issues/1994)) ([72bf760](https://github.com/supabase/supabase-py/commit/72bf76061090ce3ec539a6ec2f812f13ed7e9643))
* **utils:** keep name, docstring and signature of handle_http_io methods ([#1976](https://github.com/supabase/supabase-py/issues/1976)) ([68cb2b8](https://github.com/supabase/supabase-py/commit/68cb2b8d423eeea2fe8b731f24de9ce1e2345364))
* **utils:** keep the request's Authorization header over injected httpx client auth ([#1990](https://github.com/supabase/supabase-py/issues/1990)) ([8b6b049](https://github.com/supabase/supabase-py/commit/8b6b0490b173c687728d89f5388ab76e294f6e25))


### Documentation

* clarify contribution policy for v3 and v2 ([#1958](https://github.com/supabase/supabase-py/issues/1958)) ([84b919e](https://github.com/supabase/supabase-py/commit/84b919e4c4e767bad1b3e682aca0b887b9dd2fa8))
* restore support policy and service compatibility from v2 ([#1964](https://github.com/supabase/supabase-py/issues/1964)) ([05fa93e](https://github.com/supabase/supabase-py/commit/05fa93e44542d77997faeeeface85db617cc3e5f))
* update the READMEs to the v3 API and type-check their snippets in CI ([#2029](https://github.com/supabase/supabase-py/issues/2029)) ([9a5870d](https://github.com/supabase/supabase-py/commit/9a5870d81049c82fa7611a7ae1d31218969ca218))
* **utils:** document request timeouts and redirects in the adapter guide ([#2017](https://github.com/supabase/supabase-py/issues/2017)) ([16b72eb](https://github.com/supabase/supabase-py/commit/16b72ebedf302536508743465bdcd80fe5a67f14))


### Miscellaneous Chores

* raise the minimum python version to 3.12 ([#2002](https://github.com/supabase/supabase-py/issues/2002)) ([1333baa](https://github.com/supabase/supabase-py/commit/1333baae19584b0d85a52a08e8b2c454b749c648))


### Code Refactoring

* **functions:** remove FunctionsError.to_dict and FunctionsApiErrorDict ([#2015](https://github.com/supabase/supabase-py/issues/2015)) ([4184f96](https://github.com/supabase/supabase-py/commit/4184f968543607b8c686f6fd3786d4d7e780f032))
* spell out abbreviations in public names ([#1981](https://github.com/supabase/supabase-py/issues/1981)) ([cdd399f](https://github.com/supabase/supabase-py/commit/cdd399fa4f8381da27e432fbbd59b8123b319a56))

## [2.31.0](https://github.com/supabase/supabase-py/compare/v2.30.1...v2.31.0) (2026-06-04)


Expand Down
4 changes: 2 additions & 2 deletions src/auth/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "supabase_auth"
version = "3.0.0-a1" # {x-release-please-version}
version = "3.0.0-a2" # {x-release-please-version}
description = "Python Client Library for Supabase Auth"
authors = [
{name = "Joel Lee", email = "joel@joellee.org" }
Expand All @@ -22,7 +22,7 @@ requires-python = ">=3.12"
dependencies = [
"pydantic >=2,<3",
"pyjwt[crypto] >=2.15.1",
"supabase_utils == 3.0.0-a1", # x-release-please-version
"supabase_utils == 3.0.0-a2", # x-release-please-version
]

[project.urls]
Expand Down
2 changes: 1 addition & 1 deletion src/auth/src/supabase_auth/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.0.0-a1" # {x-release-please-version}
__version__ = "3.0.0-a2" # {x-release-please-version}
6 changes: 3 additions & 3 deletions src/functions/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "supabase_functions"
version = "3.0.0-a1" # {x-release-please-version}
version = "3.0.0-a2" # {x-release-please-version}
description = "Library for Supabase Functions"
authors = [
{ name = "Joel Lee", email = "joel@joellee.org" },
Expand All @@ -22,7 +22,7 @@ classifiers = [
requires-python = ">=3.12"
dependencies = [
"pydantic>=2.12.2",
"supabase-utils==3.0.0-a1", # x-release-please-version
"supabase-utils==3.0.0-a2", # x-release-please-version
"yarl>=1.20.1",
]

Expand All @@ -38,7 +38,7 @@ tests = [
"pytest >=9.0.3",
"pytest-cov >=6.2.1",
"pytest-asyncio >=1.3.0",
"supabase_utils[all] == 3.0.0-a1", # x-release-please-version
"supabase_utils[all] == 3.0.0-a2", # x-release-please-version
]
lints = [
"ruff >=0.12.1",
Expand Down
2 changes: 1 addition & 1 deletion src/functions/src/supabase_functions/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.0.0-a1" # {x-release-please-version}
__version__ = "3.0.0-a2" # {x-release-please-version}
6 changes: 3 additions & 3 deletions src/postgrest/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "postgrest"
version = "3.0.0-a1" # {x-release-please-version}
version = "3.0.0-a2" # {x-release-please-version}
description = "PostgREST client for Python. This library provides an ORM interface to PostgREST."
authors = [
{ name = "Lương Quang Mạnh", email = "luongquangmanh85@gmail.com"},
Expand All @@ -26,7 +26,7 @@ requires-python = ">=3.12"
dependencies = [
"pydantic >=2,<3",
"yarl>=1.20.1",
"supabase_utils==3.0.0-a1", # x-release-please-version
"supabase_utils==3.0.0-a2", # x-release-please-version
]

[project.urls]
Expand All @@ -42,7 +42,7 @@ test = [
"pytest-depends >=1.0.1",
"pytest-asyncio >=1.3.0",
"unasync >= 0.6.0",
"supabase_utils[all] == 3.0.0-a1", # x-release-please-version
"supabase_utils[all] == 3.0.0-a2", # x-release-please-version
]
lints = [
"ruff >=0.12.1",
Expand Down
2 changes: 1 addition & 1 deletion src/postgrest/src/postgrest/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.0.0-a1" # {x-release-please-version}
__version__ = "3.0.0-a2" # {x-release-please-version}
4 changes: 2 additions & 2 deletions src/realtime/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "realtime"
version = "3.0.0-a1" # {x-release-please-version}
version = "3.0.0-a2" # {x-release-please-version}
description = "Supabase Realtime client for Python."
authors = [
{ name = "Joel Lee", email="joel@joellee.org"},
Expand All @@ -21,7 +21,7 @@ classifiers = [
]
requires-python = ">=3.12"
dependencies = [
"supabase_utils==3.0.0-a1", # x-release-please-version
"supabase_utils==3.0.0-a2", # x-release-please-version
"websockets >=14,<18",
"pydantic (>=2.11.7,<3.0.0)",
"yarl>=1.22.0",
Expand Down
2 changes: 1 addition & 1 deletion src/realtime/src/realtime/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.0.0-a1" # {x-release-please-version}
__version__ = "3.0.0-a2" # {x-release-please-version}
4 changes: 2 additions & 2 deletions src/storage/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ classifiers = [
]
license = "MIT"
readme = "README.md"
version = "3.0.0-a1" # {x-release-please-version}
version = "3.0.0-a2" # {x-release-please-version}
requires-python = ">=3.12"

dependencies = [
"pydantic >=2.11.7",
"yarl>=1.20.1",
"supabase_utils==3.0.0-a1", # x-release-please-version
"supabase_utils==3.0.0-a2", # x-release-please-version
]

[project.optional-dependencies]
Expand Down
2 changes: 1 addition & 1 deletion src/storage/src/storage3/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.0.0-a1" # {x-release-please-version}
__version__ = "3.0.0-a2" # {x-release-please-version}
18 changes: 9 additions & 9 deletions src/supabase/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "supabase"
version = "3.0.0-a1" # {x-release-please-version}
version = "3.0.0-a2" # {x-release-please-version}
description = "Supabase client for Python."
authors = [
{ name = "Joel Lee", email = "joel@joellee.org" },
Expand All @@ -26,12 +26,12 @@ classifiers = [
]
requires-python = ">=3.12"
dependencies = [
"realtime == 3.0.0-a1", # x-release-please-version
"supabase_functions == 3.0.0-a1", # x-release-please-version
"storage3 == 3.0.0-a1", # x-release-please-version
"supabase_auth == 3.0.0-a1", # x-release-please-version
"supabase_utils == 3.0.0-a1", # x-release-please-version
"postgrest == 3.0.0-a1", # x-release-please-version
"realtime == 3.0.0-a2", # x-release-please-version
"supabase_functions == 3.0.0-a2", # x-release-please-version
"storage3 == 3.0.0-a2", # x-release-please-version
"supabase_auth == 3.0.0-a2", # x-release-please-version
"supabase_utils == 3.0.0-a2", # x-release-please-version
"postgrest == 3.0.0-a2", # x-release-please-version
"yarl>=1.22.0",
]

Expand All @@ -45,7 +45,7 @@ changelog = "https://github.com/supabase/supabase-py/tree/main/CHANGELOG.md"
httpx = ["supabase_utils[httpx]"]
aiohttp = ["supabase_utils[aiohttp]"]
iceberg = [
"storage3[iceberg] == 3.0.0-a1", # x-release-please-version
"storage3[iceberg] == 3.0.0-a2", # x-release-please-version
]

[dependency-groups]
Expand All @@ -54,7 +54,7 @@ dev = [
{ include-group = "lints" },
]
tests = [
"storage3[iceberg] == 3.0.0-a1", # x-release-please-version
"storage3[iceberg] == 3.0.0-a2", # x-release-please-version
"pytest >=9.0.3",
"pytest-cov >=6.2.1",
"pytest-asyncio >=1.3.0",
Expand Down
2 changes: 1 addition & 1 deletion src/supabase/src/supabase/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.0.0-a1" # {x-release-please-version}
__version__ = "3.0.0-a2" # {x-release-please-version}
2 changes: 1 addition & 1 deletion src/utils/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "supabase_utils"
version = "3.0.0-a1" # {x-release-please-version}
version = "3.0.0-a2" # {x-release-please-version}
authors = [
{ name = "Leonardo Santiago", email="leonardo.santiago@supabase.io" }
]
Expand Down
Loading