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

supabase / supabase-swift / 39341893351
93%

Build:
DEFAULT BRANCH: main
Ran 19 Oct 2026 11:43PM UTC
Jobs 1
Files 174
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

19 Oct 2026 11:29PM UTC coverage: 92.617% (+1.1%) from 91.55%
39341893351

push

github

web-flow
feat(realtime)!: collapse RealtimeClient and RealtimeChannel into actors on one executor (#1591)

* feat(realtime)!: collapse RealtimeClient and RealtimeChannel into actors on one executor

Rewrite the production Realtime layer so each client and its channels form
a single isolation domain:

- `RealtimeClientV2` becomes `public actor RealtimeClient`. It owns a
  private `RealtimeExecutor` and absorbs `ConnectionManager`.
- `RealtimeChannelV2` becomes `public actor RealtimeChannel` on the same
  executor. It absorbs `ChannelStateManager`, `CallbackManager` and `PushV2`.
- `StatusMirror` gives `statusSnapshot` (nonisolated) and `statusChanges`
  for both actors, written in the same synchronous stretch as the state.
- `PushHandle` replaces `PushV2`: `broadcast`, `track` and `untrack`
  return a handle with `isRunning`, `error`, `cancel()` and
  `callAsFunction()`.
- Subscriptions are streams only: `broadcasts(event:)`,
  `broadcastData(event:)`, `postgresChanges(...)`, `presenceChanges()`,
  `systemMessages()`. Postgres and presence streams shape the join payload.
- `connect()` throws, `disconnect()` is async, `subscribeWithError()` is
  `subscribe()`, `channel(_:options:)` is async on both the client and
  `SupabaseClient`, and `SupabaseClient.realtimeV2` is `realtime`.

Deleted: `MutableState`, `LockIsolated` fields, `StatusStorage`,
`stateObserverTask`, `sawReconnecting`, every `on*` callback API,
`RealtimeSubscription`, `ObservationToken` use in Realtime.

BREAKING CHANGE: `RealtimeClientV2`/`RealtimeChannelV2` are renamed to
`RealtimeClient`/`RealtimeChannel` and are actors. Callback APIs and
`RealtimeSubscription` are removed in favor of `AsyncStream`s. A WebSocket
`broadcast` on a channel that is not subscribed no longer falls back to the
REST endpoint; use `httpSend`. See docs/migrations/v3/Realtime.md.

* test(realtime): spell out JSONObject for broadcast literals

Swift 6.2 (Xcode 26.0) resolves `broadcast(event:message: ["x": 1])` to the
throw... (continued)

1514 of 1659 new or added lines in 13 files covered. (91.26%)

2 existing lines in 1 file now uncovered.

13009 of 14046 relevant lines covered (92.62%)

20386.13 hits per line

Uncovered Changes

Lines Coverage ∆ File
41
88.77
Sources/Realtime/RealtimeClient.swift
32
90.18
Sources/Realtime/RealtimeClient+Connection.swift
30
92.46
Sources/Realtime/RealtimeChannel.swift
25
91.47
Sources/Realtime/RealtimeChannel+Subscription.swift
8
82.07
0.56% Sources/Supabase/SupabaseClient.swift
5
92.31
Sources/Realtime/RealtimeChannel+HTTPSend.swift
2
71.43
0.0% Sources/Helpers/Task+Immediate.swift
1
74.47
0.0% Sources/Realtime/RealtimeLifecycleManager.swift
1
96.67
Sources/TestHelpers/SignalingTestClock.swift

Coverage Regressions

Lines Coverage ∆ File
2
82.07
0.56% Sources/Supabase/SupabaseClient.swift
Jobs
ID Job ID Ran Files Coverage
1 39341893351.1 19 Oct 2026 11:43PM UTC 174
92.62
GitHub Action Run
Source Files on build 39341893351
  • Tree
  • List 174
  • Changed 10
  • Source Changed 9
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #39341893351
  • f01f23b5 on github
  • Prev Build on main (#39308030754)
  • Next Build on main (#39343591327)
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