• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In
Recached

supabase / supabase-flutter
85%

Build:
DEFAULT BRANCH: main
Repo Added 19 Jan 2025 06:54AM UTC
Token z3GUkNtD1PDnCOWpuPvCMvjUB924F4R9N regen
Build 769 Last
Files 80
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH main
branch: SELECT
CHANGE BRANCH
x
Sync Branches
  • No branch selected
  • chore-review-actions
  • chore/add-agents-md-file
  • chore/avoid-passing-async-when-sync-expected
  • chore/await-futures-lint
  • chore/bump-actions-ref
  • chore/bump-app_links
  • chore/bump-min-sdk-3.4
  • chore/cleanup-dead-code-simplifications
  • chore/cleanup-readmes-headers-foreach
  • chore/code-reference
  • chore/coverage
  • chore/coverage-realtime
  • chore/coverage-source
  • chore/enable-avoid-default-tostring
  • chore/enable-avoid-self-compare
  • chore/enable-avoid-shadowing
  • chore/enable-correct-json-casts
  • chore/enable-dcm-dispose-class-fields
  • chore/enable-dcm-easy-batch
  • chore/enable-dcm-lints-tier1-2
  • chore/enable-fatal-infos
  • chore/enable-misused-test-matchers
  • chore/enable-nullable-rules
  • chore/enable-single-violation-rules
  • chore/enable-small-safe-batch
  • chore/functions-coverage
  • chore/gotrue-coverage
  • chore/issue-form-platform-all
  • chore/issue-form-templates
  • chore/publish
  • chore/realtime-test-first-instead-of-index
  • chore/release
  • chore/remove-useless-tests
  • chore/rename-cond-platform-getters
  • chore/setup-release-please
  • chore/supabase-coverage
  • chore/test-coverage
  • chore/test-proper-matchers
  • chore/update-examples
  • chore/upgrade-app-links
  • ci/drop-publish-dry-run
  • ci/extract-app-builds
  • ci/imgproxy
  • ci/melos-publish-no-dry-run
  • ci/melos-publish-oidc-token
  • ci/melos-publish-yes
  • ci/release-tag-app-token
  • ci/storage
  • claude/agitated-dewdney-0268b3
  • claude/frosty-snyder-1b2f48
  • claude/mystifying-cerf-7d866b
  • claude/naughty-wright-f4fec3
  • claude/recursing-williamson-f3d62d
  • cleanup/remove-parens-fromJson
  • copilot/sub-pr-1327
  • dcm-baseline
  • dcm-pipeline
  • docs/error-codes
  • docs/fix-infra-typo-license-20250902-024002
  • docs/google-signin
  • docs/on-auth-state-change-error-handler
  • docs/pub-dev-logo
  • docs/update-signinwithidtoken-providers-1259
  • etienne/sec-666-pin-all-github-actions-to-full-commit-sha
  • examples-passkeys
  • feat-admin-oauth-update-list-19ca1
  • feat/add-examples-project
  • feat/add-force-function-region-query-param
  • feat/broadcast-replay-support
  • feat/cupertino
  • feat/custom-metadata
  • feat/facebook-sdk-example
  • feat/gotrue-get-claims
  • feat/gotrue-passkeys
  • feat/gotrue-sign-out-reason
  • feat/issue-1158-debug-instrumentation
  • feat/oauth-admin-endpoints
  • feat/passkey-ceremony-helpers
  • feat/phone-2fa
  • feat/phone-mfa
  • feat/private-stream
  • feat/realtime-explicit-rest-call
  • feat/semantic-release-automation
  • feat/signed-out-reason
  • feat/storage-download-query-params
  • feat/workflow-improvements
  • feat/workflow-phase4-developer-experience
  • feat/workflow-phase5-additional-improvements
  • fix-getclaims-token-decoding
  • fix-private-only-stream-channel-10188984025532099214
  • fix-to-string
  • fix/app-links-method-removal
  • fix/ci-wasm-test-timeout
  • fix/dartio-usage
  • fix/deprecate
  • fix/empty-response
  • fix/flutter-3x-windows-cache
  • fix/functions-exception
  • fix/gotrue-getclaims-asymmetric-jwt
  • fix/gotrue-token-refresh-races
  • fix/gotrue-web
  • fix/immutable-default-headers
  • fix/postgrest-select-prefer-and-this-cleanup
  • fix/proactive-token-refresh-on-resume
  • fix/realtime
  • fix/realtime-cancel-conn-subscription
  • fix/realtime-channel-suppress-invalid-jwt-on-rejoin
  • fix/realtime-connect-race-condition
  • fix/realtime-ios-disconnect-detection
  • fix/realtime-ios-dropped-connection-detection
  • fix/realtime-lifecycle-queue
  • fix/realtime-postgres-changes-system-error
  • fix/recover-session-duplicate-auth-error
  • fix/recover-session-stale-refresh-token
  • fix/release-tag-workflow
  • fix/review-bugs
  • fix/sdk-compliance-workflow
  • fix/session-expires-at-doc-clarification
  • fix/setup-presence-flag
  • fix/storage-exception-status-code
  • fix/toJson-print
  • fix/uppercase-http-method
  • fix/verify-otp-secure-email-change
  • fix/web-hot-restart
  • fix/web-oauth-code-cleanup
  • grdsdev-patch-1
  • grdsdev/align-dart-sdk-min-3-3-0
  • grdsdev/auth-token-refresh
  • grdsdev/automate-melos-release
  • grdsdev/check-swift-pr-958
  • grdsdev/docs-refreshtoken-completer
  • grdsdev/fix-postgrest-http-method-case
  • grdsdev/fix-release-workflow-failures
  • grdsdev/flutter-auth-refresh-bug
  • grdsdev/hartford-v1
  • grdsdev/log-auth-state-errors
  • grdsdev/postgrest-retry-flutter
  • grdsdev/resilient-decoding
  • grdsdev/retrigger-release-tagging
  • grdsdev/sdk-816-realtime-class-docs
  • grdsdev/share-yajson-isolate
  • grdsdev/storage-setheader
  • guilherme/ci
  • guilherme/clibs-108-supabase-flutter-change-default-heartbeat-interval-to-25s
  • guilherme/clibs-120-supabase-flutter-send-standard-client-headers-on-all
  • guilherme/clibs-171-supabase-flutter-validate-uuid-on-admin-methods
  • guilherme/clibs-282-supabase-flutter-implement-linkidentity-with-oidc
  • guilherme/clibs-287-supabase-flutter-storageretrycontroller-causes-cant-finalize
  • guilherme/clibs-294-supabase-flutter-remove-providers-check-for-the
  • guilherme/clibs-379-supabase-flutter-implement-maxaffected-method
  • guilherme/clibs-99-supabase-flutter-remove-jwt-check-and-send-x-client-info
  • guilherme/feat-test
  • guilherme/generate-app-token
  • guilherme/remove-trailing-commas-rule
  • guilherme/sdk-230-supabase-flutter-use-dedicated-storage-host-for-storage-lib
  • guilherme/sdk-514-refreshsession-shouldnt-fail-because-currentsession-doesnt
  • guilherme/sdk-524-duplicate-sdk-522-for-flutter
  • guilherme/sdk-531-flutter-verify-optional-refs-handling-in-message
  • guilherme/sdk-614-fix-verifyotp-parameter-validation-for-otptyperecovery
  • guilherme/sdk-624-apply-reusable-ci-workflows-to-supabase-flutter
  • guilherme/sdk-627-flutter-sdk-getclaims-crashes-on-first-use-with-asymmetric
  • guilherme/sdk-640-fixrealtime-flutter-web-hot-restart-throws-typeerror-on
  • guilherme/sdk-698-paritypostgrest-add-url-length-validation-and-timeout
  • guilherme/sdk-784-featauth-add-setsession-support-for-both-access_token-and
  • guilherme/sdk-789-fixstorage-_transformstorageurl-unconditionally-breaks
  • guilherme/sdk-794-oauth-provider-custom-string
  • iat/add-x-provider
  • idempotent_initialization
  • lukasklingsbo/sdk-1018-httpsend-per-event-url
  • lukasklingsbo/sdk-1020-parityauth-verifyotp-for-email_change-returns-null
  • lukasklingsbo/sdk-1023-parityauth-resend-with-pkce-flow-should-include
  • lukasklingsbo/sdk-1054-consolidate-ci-into-a-single-workflow-and-stop-re-running
  • lukasklingsbo/sdk-583-realtime-protocol-200
  • lukasklingsbo/sdk-583-realtime-v3-renames
  • main
  • null-check-operator-on-realtime-conn
  • refactor/bucket-oauth-dedupe
  • refactor/gotrue-pkce-helper
  • refactor/realtime-broadcast-http
  • refactor/refresh-flow
  • refactor/storage-dedupe
  • refs/pull/1110/merge
  • release-23586209249
  • release-26828784805
  • release-27010981394
  • release-27216676269
  • release-27629220657
  • release-please/bootstrap/default
  • remove-wasm-ci
  • revert-commit
  • shared_prefs_async
  • storage
  • test/supabase-cli-integration-tests
  • test/web
  • unnecessary_current_user
  • upgrade-github-actions-node24
  • upgrade-github-actions-node24-general
  • worktree-899
  • worktree-ci-release-tags
  • worktree-ci-simplify
  • worktree-ci-uppercase
  • worktree-email-fix
  • worktree-facebook-login-issue
  • worktree-fix-coverage
  • worktree-fix-tests
  • worktree-flutter_lints
  • worktree-passkeys-interface-types
  • worktree-realtime-tests

25 Jun 2026 06:04PM UTC coverage: 85.464% (+0.1%) from 85.368%
28190414303

push

github

web-flow
fix(realtime): surface async postgres_changes system error as channelError (#1470)

## Summary

Fixes #1466.

A `postgres_changes` channel can report
`RealtimeSubscribeStatus.subscribed` and stay joined while delivering
**zero** events, indefinitely, when the server-side replication
subscription fails *after* the phoenix join succeeds. The failure is
delivered as an asynchronous `system` event with `status: error`, but
the SDK only exposes that via `onSystemEvents(...)` (documented "for
debugging purposes") and never forwards it to the `.subscribe()` status
callback — a silent "zombie" channel: green/connected to the app, but
dead.

This is especially painful on reconnect/resume flows where the access
token may be stale (e.g. the refresh timer was throttled while the app
was idle/backgrounded). The channel re-subscribes, the join succeeds,
the app marks it healthy, and it silently delivers nothing until the
next reconnect. It bit us as a user-facing incident: live data silently
stopped updating after a reconnect.

## Root cause

`postgres_changes` is an extension whose replication subscription is set
up asynchronously by the server, *after* the channel join.
`.subscribe()`'s status is driven by the phoenix join
(`joined/errored/closed/timeout`), and there is no
`RealtimeSubscribeStatus` value for "joined, but the extension
subscription failed." The join reply optimistically echoes the requested
`postgres_changes` config (with server-assigned binding ids), so binding
reconciliation succeeds and `subscribed` fires *before* the replication
is confirmed live. The real verdict arrives on a later `system
status=error` event, which the high-level API drops on the floor.

Wire sequence with a **stale/expired** token (`auth.uid()` no longer
satisfies the policy):

```
<- phx_reply   status=ok    response={postgres_changes:[{id, event:INSERT, schema, table, filter}]}
   // subscribe() callback fires RealtimeSubscribeStatus.subscribed here
<- system      status=... (continued)

4 of 4 new or added lines in 1 file covered. (100.0%)

4098 of 4795 relevant lines covered (85.46%)

3.64 hits per line

Relevant lines Covered
Build:
Build:
4795 RELEVANT LINES 4098 COVERED LINES
3.64 HITS PER LINE
Source Files on main
  • Tree
  • List 80
  • Changed 7
  • Source Changed 7
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
28190414303 main fix(realtime): surface async postgres_changes system error as channelError (#1470) ## Summary Fixes #1466. A `postgres_changes` channel can report `RealtimeSubscribeStatus.subscribed` and stay joined while delivering **zero** events, indefinite... push 25 Jun 2026 06:06PM UTC web-flow github
85.46
28183511985 fix/realtime-postgres-changes-system-error Merge 9cf0df723 into 33402e80f Pull #1470 25 Jun 2026 05:09PM UTC web-flow github
85.46
28180404069 fix/realtime Merge 1d25932f1 into 33402e80f Pull #1471 25 Jun 2026 03:15PM UTC web-flow github
86.73
28179684443 fix/realtime Merge 0462b418b into 33402e80f Pull #1471 25 Jun 2026 03:04PM UTC web-flow github
85.33
28177869575 main fix(gotrue): include code challenge in resend with PKCE flow (#1469) ## What When `resend()` is called with an `email` while the client uses the PKCE flow (the default), the `POST /resend` request now includes `code_challenge` and `code_challeng... push 25 Jun 2026 02:36PM UTC web-flow github
85.37
28173559566 fix/realtime-postgres-changes-system-error Merge b324ebd27 into ba67347d6 Pull #1470 25 Jun 2026 02:30PM UTC web-flow github
85.46
28163284198 lukasklingsbo/sdk-1023-parityauth-resend-with-pkce-flow-should-include Merge fcfd10a5e into ba67347d6 Pull #1469 25 Jun 2026 10:20AM UTC web-flow github
85.37
28161141238 lukasklingsbo/sdk-1018-httpsend-per-event-url Merge f451d046c into ba67347d6 Pull #1467 25 Jun 2026 09:41AM UTC web-flow github
85.39
28160997993 lukasklingsbo/sdk-1020-parityauth-verifyotp-for-email_change-returns-null Merge 57e99f248 into ba67347d6 Pull #1468 25 Jun 2026 09:37AM UTC web-flow github
85.37
28160934733 lukasklingsbo/sdk-1018-httpsend-per-event-url Merge 87119d88d into ba67347d6 Pull #1467 25 Jun 2026 09:36AM UTC web-flow github
85.0
See All Builds (768)

Badge your Repo: supabase-flutter

We detected this repo isn’t badged! Grab the embed code to the right, add it to your repo to show off your code coverage, and when the badge is live hit the refresh button to remove this message.

Could not find badge in README.

Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

Refresh
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc