Highlights
Storage: vector buckets (alpha)
New storage.vectors API surface, mirroring supabase-js's supabase.storage.vectors. The underlying feature is an upstream alpha, so the client surface is gated behind @_spi(Experimental):
- Bucket CRUD —
createBucket,getBucket,listBuckets,deleteBucket(#1153) - Index management —
storage.vectors.from(_:)→createIndex,getIndex,listIndexes,deleteIndex(#1181) - Vector data operations —
.index(_:)→putVectors,getVectors,listVectors,queryVectors,deleteVectors(#1181)
Memory leak fixes: Auth, Realtime, Supabase
Several core clients could never deallocate once created, because of retain cycles that only broke when the app went through a foreground/background transition. This mattered most for tests, CLI tools, and server-side Swift, where that transition never happens:
AuthClientnever removed itself from a process-global dependency registry, and its auto-refresh task and app-lifecycle subscriptions kept it alive indefinitely (#1176, #1193)RealtimeClientV2leaked its WebSocket connection, dedicatedURLSession, and receive loop when dropped without an explicitdisconnect()(#1192)SupabaseClientnever deallocated becauselistenForAuthEvents()capturedselfstrongly in a task that never completes (#1191, closes #1187)
Realtime reliability
- Auto-reconnect now retries with exponential backoff instead of giving up after a single failed attempt, so the client no longer gets stuck disconnected through a real outage (#1198)
- Channels rejoin concurrently on reconnect instead of one at a time, so a single slow channel no longer blocks the rest (#1110)
PostgREST correctness
PostgrestError.detailnow decodes correctly (the wire field isdetails, plural; the Swift property isdetail, singular — nothing bridged the two before) (#1159)- Array filter values are now escaped, fixing silent corruption of values containing
,,{,},",\, or empty/whitespace-only entries (#1126) maybeSingle()now throws on a multi-row result when throw-on-error is enabled, instead of silently returning one row and hiding an unscoped query (#1180)
2.55.0 (2026-08-12)
Features
- storage: add vector bucket CRUD (alpha) (#1153) (a4ad8af)
- storage: add vector index and vector data operations (alpha) (#1181) (3882e79)
Bug Fixes
- auth: keep adminClient alive across awaited signOut in integration test (#1178) (c5d0671)
- auth: remove AuthClient from Dependencies registry on deinit (#1176) (0826b28)
- auth: stop auto-refresh task on AuthClient deinit (#1193) (c6a5d99)
- flaky CI in AuthTests and RealtimeTests (#1164) (3585688)
- functions: invalidate URLSession in streamed response (#1122) (68a78ab)
- helpers: extend Swift version detection ladder, drop unsupported floors (#1160) (186daf0)
- postgrest: decode PostgrestError details field (#1159) (b9296f6)
- postgrest: escape reserved characters in array filter values (#1126) (e0ef7b3)
- postgrest: throw on multi-row result from maybeSingle when throw-on-error is enabled (#1180) (3b2730e)
- realtime: close WebSocket connection on RealtimeClientV2 deinit (#1192) (c7d17c7)
- realtime: rejoin channels concurrently on reconnect (#1110) (3a47076)
- realtime: retry auto-reconnect with backoff instead of giving up after one attempt (#1198) (0ee6089)
- storage: derive content type for signed URL uploads (#1158) (1b6071c)
- supabase: stop listenForAuthEvents task from leaking SupabaseClient (#1191) (99cb526), closes #1187