Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
27cf97c
feat(supabase_flutter)!: use a system web auth session for OAuth, SSO…
spydon Jun 12, 2026
22d4123
fix(gotrue): handle already-consented OAuth authorization responses (…
Pieter-JanRobrechtCronos Jul 7, 2026
2cba5b6
fix: skip packages without lib/src in update-version script (#1540)
spydon Jul 7, 2026
fe5cc66
chore(release): publish packages (#1541)
spydon Jul 7, 2026
1f296e7
chore: clean up package metadata, READMEs, and examples (#1542)
spydon Jul 8, 2026
7097b2c
fix(storage): make storage_client WASM-compatible (#1543)
spydon Jul 8, 2026
95820cd
ci: run pana on release PRs to catch pub score regressions (#1544)
spydon Jul 8, 2026
ade57a4
ci: bump melos to ^8.2.0 (#1549)
spydon Jul 8, 2026
2d3a720
feat(functions): expose FunctionsFetchException/FunctionsRelayExcepti…
spydon Jul 8, 2026
3f3e6f6
fix(storage): guard against empty transform routing through render en…
spydon Jul 9, 2026
b04c641
feat(gotrue): add currentPassword to UserAttributes (#1554)
spydon Jul 9, 2026
ebb7564
refactor(auth): use OAuthProvider.name and cover custom OIDC provider…
spydon Jul 9, 2026
b1157ef
refactor(gotrue): drop jwt_decode dependency in favor of dart_jsonweb…
spydon Jul 9, 2026
e5de0c0
fix(realtime): patch channel join payloads with access token before f…
spydon Jul 9, 2026
3bde140
feat(gotrue): add channel parameter to mfa.challenge() (#1547)
spydon Jul 9, 2026
ad9d3a6
chore(functions): mark invoke() timeout parity as not_applicable (#1546)
spydon Jul 9, 2026
1a1c95b
docs(auth): document getOAuthSignInUrl for URL-without-launch, mark o…
spydon Jul 9, 2026
ed50706
refactor(gotrue): derive OAuth client enum values from the snakeCase …
spydon Jul 9, 2026
3f70d5e
refactor(gotrue): drop rxdart dependency (#1566)
spydon Jul 9, 2026
3958aee
chore(database): mark request_timeout parity as not_applicable (#1552)
spydon Jul 9, 2026
3c638f8
chore(auth): mark webauthn MFA enrollment not applicable in Dart (#1556)
spydon Jul 9, 2026
02d809e
chore: bump dependencies to latest compatible with Dart 3.9.0 (#1567)
spydon Jul 9, 2026
c8b02ed
feat(client): add session-URL-detection predicate and persistSession …
spydon Jul 9, 2026
896bc1f
feat(database): add dryRun and stripNulls query modifiers (#1559)
spydon Jul 9, 2026
51dcf0f
refactor(supabase): drop rxdart dependency (#1569)
spydon Jul 9, 2026
6dadaef
refactor(storage): drop direct http_parser dependency (#1570)
spydon Jul 9, 2026
b81d212
refactor: drop retry dependency in favor of an in-house helper (#1571)
spydon Jul 9, 2026
46601bb
refactor: extract shared code into supabase_common package (#1573)
spydon Jul 9, 2026
0b1d9b6
feat(auth): add async getSession() with on-demand refresh (#1563)
spydon Jul 9, 2026
67fed23
feat(auth): add OAuth server listGrants and revokeGrant methods (#1561)
spydon Jul 10, 2026
b72739e
feat(storage): support filter/sort/pagination options on listBuckets(…
spydon Jul 10, 2026
85780e6
feat(client): add opt-in trace context propagation headers (#1564)
spydon Jul 10, 2026
b74fdfe
refactor: modernize dart syntax across client packages (#1574)
spydon Jul 10, 2026
58c2dad
refactor(supabase): convert private stream-builder holders to records…
spydon Jul 10, 2026
bc06a31
fix(realtime_client): faster channel rejoin on web (#1471)
Vinzent03 Jul 10, 2026
c267e4f
feat(postgrest): abort requests (#1368)
Vinzent03 Jul 10, 2026
88ede03
chore: enable strict-raw-types in supabase_lints and fix all violatio…
spydon Jul 10, 2026
a9ff808
feat(storage): add cacheNonce parameter for cache invalidation (#1578)
spydon Jul 10, 2026
c3e3602
test: remove abbreviations and code smells across package tests (#1584)
spydon Jul 10, 2026
a6428c6
feat(storage): add listPaginated for cursor-based file listing (#1579)
spydon Jul 11, 2026
8b839a1
feat(storage): add downloadStream for streaming file downloads (#1580)
spydon Jul 11, 2026
31f4107
ci: run melos on the Flutter SDK, bump melos to 8.2.1, and cache Flut…
spydon Jul 13, 2026
10018d7
test(yet_another_json_isolate): add full coverage test suite (#1583)
spydon Jul 13, 2026
285384e
ci: run WASM tests in a separate workflow (#1586)
spydon Jul 13, 2026
697fed1
ci: don't fail CI on external Coveralls errors (#1592)
spydon Jul 13, 2026
59d4b3a
feat(postgrest): configurable auto-retry and request timeout (#1560)
spydon Jul 13, 2026
0055d1d
feat(realtime): defer socket disconnect when channels become empty (#…
spydon Jul 14, 2026
97a6fa6
fix(supabase_common): align platform stats casing with other SDKs (#1…
spydon Jul 14, 2026
4f7fcc6
feat(storage): add vector buckets support (#1585)
spydon Jul 14, 2026
20a82be
feat(auth): add signInWithWeb3 for Web3 wallet authentication (#1590)
spydon Jul 14, 2026
ae0a064
chore(supabase_common): drop inferrable type arguments on platform na…
spydon Jul 15, 2026
97f89ff
chore(compliance): reconcile auth and realtime entries as implemented…
spydon Jul 15, 2026
73acbc9
test: expand unit coverage for supabase_common and storage_client typ…
spydon Jul 15, 2026
558b034
feat(auth): support friendlyName and user.name fallback for WebAuthn …
spydon Jul 15, 2026
59d349e
feat(auth): send PKCE code_challenge in updateUser when changing emai…
spydon Jul 15, 2026
b994dab
feat(functions): add request cancellation to invoke via abortSignal (…
spydon Jul 15, 2026
e3eeb9e
feat(storage): add analytics (Iceberg) bucket CRUD (#1588)
spydon Jul 15, 2026
6e11db6
chore(release): publish packages (#1605)
libsreleasetagger[bot] Jul 15, 2026
2c961c0
ci: grant pull-requests write to SDK compliance caller (#1611)
spydon Jul 17, 2026
42068e4
fix(realtime_client): stop throwing internally when converting null c…
Iaashish13 Jul 17, 2026
4acd0a0
feat(storage): add purgeCache to invalidate CDN cache for a single ob…
spydon Jul 17, 2026
06ab3e2
docs(compliance): register getSSOSignInUrl symbol for sign_in_with_ss…
spydon Jul 17, 2026
d46c514
docs(compliance): register backing symbols for all implemented capabi…
spydon Jul 17, 2026
1e5a379
fix(functions): never send new-format API key as Bearer; warn on unre…
spydon Jul 17, 2026
7b7953e
docs(examples): add database CRUD with PostgREST example (#1616)
spydon Jul 20, 2026
5db6922
test(examples): add end-to-end test for the passkeys example (#1623)
spydon Jul 20, 2026
0931f0a
test(examples): add end-to-end test for the database CRUD example (#1…
spydon Jul 20, 2026
2ec8aa6
ci: weekly SDK compliance sync via supabase/sdk reusable workflow (#1…
spydon Jul 21, 2026
3592fda
feat(realtime): block adding postgres_changes listener after subscrib…
spydon Jul 21, 2026
86afeb2
fix(realtime): UTF-8 encode broadcast header fields in serializer (#1…
spydon Jul 21, 2026
3fbdb02
docs(examples): add Storage uploads and image transformations example…
spydon Jul 21, 2026
56f156b
test(examples): add end-to-end test for the Storage transformations e…
spydon Jul 21, 2026
9108143
ci: pin SDK compliance reusable workflow to a main SHA (#1630)
spydon Jul 22, 2026
2fbb7bf
ci: stop CodeRabbit marking PRs failed on review rate limit (#1631)
spydon Jul 22, 2026
64298be
fix(realtime): forward all caller opts from track() to send() (#1620)
spydon Jul 22, 2026
0b44b5a
docs(examples): add Edge Functions example (#1632)
spydon Jul 22, 2026
a02e988
Merge remote-tracking branch 'origin/main' into feat/oauth-web-auth-s…
spydon Jul 22, 2026
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
4 changes: 4 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
reviews:
commit_status: true
fail_commit_status: false
12 changes: 5 additions & 7 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ jobs:
with:
fetch-depth: 0

- name: Setup Dart
uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # v1.7.1
- name: Setup Flutter
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
sdk: stable
channel: 'stable'
cache: true

- name: Detect affected packages
id: detect
Expand Down Expand Up @@ -99,10 +100,7 @@ jobs:
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
channel: 'stable'
# Caching the latest stable is flaky: the cached SDK contains
# runner-image-specific binaries that break silently when the runner
# image is updated.
cache: false
cache: true

- name: Show Flutter version
run: flutter --version
Expand Down
78 changes: 78 additions & 0 deletions .github/workflows/release-pana.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Release Pana

on:
pull_request:
types:
- opened
- synchronize
- reopened
- edited

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
pana:
name: Pana (${{ matrix.package }})
if: startsWith(github.event.pull_request.title, 'chore(release):')
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
package:
- functions_client
- gotrue
- postgrest
- realtime_client
- storage_client
- supabase
- supabase_common
- supabase_flutter
- yet_another_json_isolate
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Flutter
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
cache: true

- name: Setup Melos
uses: bluefireteam/melos-action@2982f8e4fc92440a219490009d6d05195cb1a6a5 # v3.8.0

- name: Activate pana
run: dart pub global activate pana

- name: Run pana
working-directory: packages/${{ matrix.package }}
env:
PACKAGE: ${{ matrix.package }}
run: |
set -euo pipefail

pana --no-dartdoc --json . > pana.json

echo "### Pana — $PACKAGE" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Section | Points | Status |" >> "$GITHUB_STEP_SUMMARY"
echo "| --- | --- | --- |" >> "$GITHUB_STEP_SUMMARY"
jq -r '.report.sections[] | "| \(.id) | \(.grantedPoints)/\(.maxPoints) | \(.status) |"' pana.json >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "Tags: $(jq -r '[.tags[]] | join(", ")' pana.json)" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"

web=$(jq -r 'any(.tags[]?; . == "platform:web")' pana.json)
wasm=$(jq -r 'any(.tags[]?; . == "is:wasm-ready")' pana.json)

if [ "$web" = "true" ] && [ "$wasm" != "true" ]; then
echo "::error::$PACKAGE supports web (platform:web) but is not WASM-ready. A published package that supports web must compile to WASM. See https://dart.dev/web/wasm"
exit 1
fi

echo "$PACKAGE passed the pana web/WASM check (web=$web, wasm-ready=$wasm)."
16 changes: 16 additions & 0 deletions .github/workflows/sync-compliance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Sync SDK Compliance Matrix

on:
schedule:
- cron: '0 6 * * 1'
workflow_dispatch:

jobs:
sync:
permissions:
contents: write
pull-requests: write
uses: supabase/sdk/.github/workflows/sync-sdk-compliance.yml@d9f43f5be4056adc33c65fe54f1c9ed1714d67e0
secrets:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.PRIVATE_KEY }}
29 changes: 13 additions & 16 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ jobs:
with:
fetch-depth: 0

- name: Setup Dart
uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # v1.7.1
- name: Setup Flutter
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
sdk: stable
channel: 'stable'
cache: true

- name: Detect affected packages
id: detect
Expand Down Expand Up @@ -63,7 +64,7 @@ jobs:
echo "Affected packages:"
echo "$CHANGED"

DART_PACKAGES="functions_client gotrue postgrest realtime_client storage_client supabase yet_another_json_isolate"
DART_PACKAGES="functions_client gotrue postgrest realtime_client storage_client supabase supabase_common yet_another_json_isolate"

entries=()
for package in $DART_PACKAGES; do
Expand Down Expand Up @@ -120,7 +121,7 @@ jobs:
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
channel: ${{ matrix.channel }}
cache: false
cache: true

- name: Show Flutter version
run: flutter --version
Expand All @@ -144,7 +145,7 @@ jobs:
if: ${{ matrix.package.backend }}
uses: supabase/setup-cli@3c2f5e2ae34c34e428e8e206e2c4d21fa2d20fbf # v2.1.1
with:
version: 2.106.0
version: 2.109.1

- name: Print Supabase CLI version
if: ${{ matrix.package.backend }}
Expand Down Expand Up @@ -204,6 +205,7 @@ jobs:
- name: Upload coverage to Coveralls
if: ${{ matrix.channel == 'stable' }}
uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7
continue-on-error: true
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel: true
Expand Down Expand Up @@ -251,10 +253,7 @@ jobs:
with:
flutter-version: ${{ matrix.flutter-version != 'latest' && matrix.flutter-version || '' }}
channel: 'stable'
# Caching the latest stable is flaky: the cached SDK contains
# runner-image-specific binaries that break silently when the runner
# image is updated. Pinned versions like 3.35.x are stable to cache.
cache: ${{ matrix.flutter-version != 'latest' }}
cache: true

- name: Show Flutter version
run: flutter --version
Expand Down Expand Up @@ -285,6 +284,7 @@ jobs:
- name: Upload coverage to Coveralls
if: ${{ matrix.os == 'ubuntu-latest' && matrix.flutter-version == 'latest' }}
uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7
continue-on-error: true
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel: true
Expand All @@ -296,11 +296,6 @@ jobs:
if: ${{ matrix.os == 'ubuntu-latest' && matrix.flutter-version == 'latest'}}
run: flutter test --platform chrome

- name: Build example for web (WASM)
if: ${{ matrix.os == 'ubuntu-latest' && matrix.flutter-version == 'latest'}}
working-directory: packages/supabase_flutter/example
run: flutter build web --wasm

dcm:
name: DCM
needs: changes
Expand Down Expand Up @@ -338,10 +333,12 @@ jobs:
steps:
- name: Close parallel coverage build
uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7
continue-on-error: true
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true
carryforward: 'functions_client,gotrue,postgrest,realtime_client,storage_client,supabase,yet_another_json_isolate,supabase_flutter'
carryforward: 'functions_client,gotrue,postgrest,realtime_client,storage_client,supabase,supabase_common,yet_another_json_isolate,supabase_flutter'
fail-on-error: false

test-result:
name: Test result
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/validate-capabilities.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ on:

permissions:
contents: read
pull-requests: write

jobs:
validate:
permissions:
contents: read
pull-requests: write
uses: supabase/sdk/.github/workflows/validate-sdk-compliance-dart.yml@main
125 changes: 125 additions & 0 deletions .github/workflows/wasm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: WASM

on:
push:
branches:
- main
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
changes:
name: Detect affected packages
runs-on: ubuntu-latest
outputs:
flutter: ${{ steps.detect.outputs.flutter }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0

- name: Setup Flutter
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
channel: 'stable'
cache: true

- name: Detect affected packages
id: detect
run: |
set -euo pipefail

dart pub global activate melos

if [ "${{ github.event_name }}" = "pull_request" ]; then
BASE="${{ github.event.pull_request.base.sha }}"
else
BASE="${{ github.event.before }}"
fi

FORCE_ALL=false
if [ -z "$BASE" ] || [ "$BASE" = "0000000000000000000000000000000000000000" ]; then
FORCE_ALL=true
elif git diff --name-only "$BASE...HEAD" \
| grep -qE '^(\.github/workflows/wasm\.yml|pubspec\.yaml|pubspec\.lock|supabase/)'; then
FORCE_ALL=true
fi

if [ "$FORCE_ALL" = "true" ]; then
echo "Running all packages."
CHANGED=$(melos list --json | jq -r '.[].name')
else
CHANGED=$(melos list --json --diff="$BASE...HEAD" --include-dependents | jq -r '.[].name')
fi

echo "Affected packages:"
echo "$CHANGED"

if echo "$CHANGED" | grep -qx "supabase_flutter"; then
echo "flutter=true" >> "$GITHUB_OUTPUT"
else
echo "flutter=false" >> "$GITHUB_OUTPUT"
fi

test-wasm:
name: Test and build WASM
needs: changes
if: ${{ needs.changes.outputs.flutter == 'true' }}
timeout-minutes: 30
runs-on: ubuntu-latest

defaults:
run:
working-directory: packages/supabase_flutter

steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Flutter
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
channel: 'stable'
# Caching the latest stable is flaky: the cached SDK contains
# runner-image-specific binaries that break silently when the runner
# image is updated.
cache: false

- name: Show Flutter version
run: flutter --version

- name: Bootstrap workspace
run: |
cd ../../
dart pub global activate melos
melos bootstrap

- name: Test web (WASM)
# Serial compilation avoids the memory pressure from parallel dart2wasm
# runs that previously caused suite loading timeouts in CI.
run: flutter test --platform chrome --wasm --concurrency=1

- name: Build example for web (WASM)
working-directory: packages/supabase_flutter/example
run: flutter build web --wasm

wasm-result:
name: WASM result
needs: [changes, test-wasm]
if: ${{ always() }}
runs-on: ubuntu-latest
steps:
- name: Verify all jobs succeeded
run: |
if ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}; then
echo "One or more jobs failed or were cancelled."
exit 1
fi
echo "All required jobs passed or were skipped."
10 changes: 10 additions & 0 deletions .sdk-parse-ignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,13 @@
# Prefer annotating such declarations with `@internal` (from package:meta): the
# extractor honours it and excludes them from the scan. Use this file only for
# paths that cannot carry that annotation, e.g. generated sources.

# supabase_common is an internal, cross-package helper library. Its public
# symbols are imported by the other packages, so they cannot be marked
# @internal (that would trigger invalid_use_of_internal_member in the
# consumers). Exclude the whole package from the public-API scan instead.
packages/supabase_common/

# The examples are standalone demo apps, not part of the published SDK, so their
# public classes are not capability-matrix symbols.
examples/
Loading
Loading