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

supabase / supabase-flutter / 39969092550
93%

Build:
DEFAULT BRANCH: main
Ran 23 Oct 2026 02:24PM UTC
Jobs 12
Files 185
Run time 1min
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

23 Oct 2026 02:22PM UTC coverage: 92.418% (+0.08%) from 92.337%
39969092550

push

github

web-flow
fix(realtime)!: rejoin after disconnect and keep one channel per name (#2030)

Fixes
[SDK-2338](https://linear.app/supabase/issue/SDK-2338/fixrealtime-channel-lifecycle-bugs-around-disconnect-duplicate-names).

Fixes the six channel lifecycle findings from the v3 review. Each one
has a regression test on the fake transport (`MockRealtimeTransport`
from `supabase_test`, or mocktail stubs where the fake cannot model a
socket that never closes). The tests are in
`test/channel_lifecycle_test.dart`.

## Changes

1. **Rejoin after `disconnect()` then connect.** `disconnect()` marks
every subscribed channel as errored, without reporting an error, whether
or not a connection is open. It also cancels the pending join reply and
the rejoin backoff. The next connection rejoins those channels through
the existing errored-channel rejoin. Internal reconnects use a private
`_disconnect()` that leaves the channels alone, so a dropped connection
still reports `channelError` and times out the way it did before.
supabase_flutter no longer needs its `forceRejoin` loop on resume, so it
is removed. `forceRejoin` is merged into `rejoin`. The class dartdoc no
longer claims that `disconnect` removes the channels.
2. **Same channel name.** `channel()` now returns the channel already
registered for that name, as realtime-js does, and ignores the options
passed with the repeated call. A channel that is leaving is skipped, so
a name can be reused right after `unsubscribe()`. `subscribe()` on a
channel that has not closed now returns the channel instead of throwing,
as in realtime-js, so code that subscribes a shared name again keeps
working. Subscribing a closed channel still throws. `leaveOpenTopic` was
only reachable through duplicate registrations, so it is removed.
`unsubscribe()` no longer buffers a `phx_leave` while the socket is
disconnected, because the server has already dropped the channel and a
late leave could reach it after a newer join on the same topic.
3. **Reply b... (continued)

61 of 62 new or added lines in 5 files covered. (98.39%)

11629 of 12583 relevant lines covered (92.42%)

6.15 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
96.71
1.89% packages/supabase_realtime/lib/src/realtime_channel.dart
Jobs
ID Job ID Ran Files Coverage
3 supabase_typegen - 39969092550.3 23 Oct 2026 02:26PM UTC 6
94.46
GitHub Action Run
4 supabase_test - 39969092550.4 23 Oct 2026 02:24PM UTC 9
92.31
GitHub Action Run
5 supabase_flutter - 39969092550.5 23 Oct 2026 02:24PM UTC 16
80.58
GitHub Action Run
6 supabase_realtime - 39969092550.6 23 Oct 2026 02:26PM UTC 14
91.69
GitHub Action Run
7 supabase_functions - 39969092550.7 23 Oct 2026 02:24PM UTC 4
93.44
GitHub Action Run
8 supabase - 39969092550.8 23 Oct 2026 02:27PM UTC 20
93.84
GitHub Action Run
9 iceberg - 39969092550.9 23 Oct 2026 02:24PM UTC 6
77.18
GitHub Action Run
10 supabase_storage - 39969092550.10 23 Oct 2026 02:26PM UTC 10
96.51
GitHub Action Run
11 supabase_auth - 39969092550.11 23 Oct 2026 02:27PM UTC 34
94.05
GitHub Action Run
12 postgrest - 39969092550.12 23 Oct 2026 02:27PM UTC 29
92.41
GitHub Action Run
10 supabase_common - 39964796217.10 23 Oct 2026 01:53PM UTC 36
94.12
GitHub Action Run
3 yet_another_json_isolate - 39964796217.3 23 Oct 2026 01:53PM UTC 1
98.68
GitHub Action Run
Source Files on build 39969092550
  • Tree
  • List 185
  • Changed 6
  • Source Changed 6
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #39969092550
  • 9a5e18ff on github
  • Prev Build on main (#39966257653)
  • Next Build on main (#39972307761)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc