Repository navigation
Releases: supabase/supabase-kt
Release list
3.9.0-beta-1
Changes
Misc
- Update CONTRIBUTING.md with information on how to run tests by @cmelchior in #1392
Auth
- fix(auth): [Security] Avoid writing session credentials to the platform log & mask sensitive values by @hieuwu in #1391
Realtime
- fix(realtime): include join_ref on leave and access_token messages by @grdsdev in #1402
- Add more articles and sample by @hieuwu in #1401
- fix(realtime): prevent heartbeat tick from racing disconnect() by @alperen-kaplan in #1395
Storage
- Change: feat(storage): add new storage exception and expose
codeparameter by @jan-tennert in #1376. All Storage methods no longer throw a generic exception, but aStorageRestException - fix(storage): keep the file size a Long when sizing an upload chunk by @AndroidPoet in #1404
- fix(storage): fix reading resumable uploads back from the cache by @AndroidPoet in #1405
- fix(storage): keep the error and message when an error body has no code by @AndroidPoet in #1407
Docs
- docs: how to read the library logs on iOS by @veropduro in #1408
- docs: notes for writing a custom SessionManager by @veropduro in #1409
New Contributors
- @alperen-kaplan made their first contribution in #1395
- @AndroidPoet made their first contribution in #1404
- @veropduro made their first contribution in #1408
Full Changelog: 3.8.0...3.9.0-beta-1
3.8.0
Changes
Core
- fix(sample): move "Forgot password?" button out of overlapping Box in… by @MohammedThalha2002 in #1367
- docs: fix broken star history chart by @OctoBored in #1381
Postgrest
- feat(postgrest): add dryRun(), maybeSingle() modifiers, notIn filter by @jan-tennert in #1365
Auth
- feat(auth): add support for OAuth consent flow by @jan-tennert in #1235
- Add tests for RestException and plugin-specific subtypes by @MohammedThalha2002 in #1368
- fix(auth): include the status code description as the fallback by @jan-tennert in #1379
- fix(auth): catch all throwables instead of exceptions for refresh and loading by @jan-tennert in #1383
Realtime
- feat(realtime): add system flow,
replicationReadyoption by @jan-tennert in #1366
val channel = supabase.realtime.channel("test") {
broadcast {
replicationReady = true
}
}
channel.systemFlow().collect {
println(it.status)
}- feat(realtime): add realtime filter builder by @jan-tennert in #1380
channel.postgresChangeFlow<PostgresAction>("public") {
table = "myTable"
filter {
lt("id", 20)
eq("name", "Tom")
}
}
// supported by all realtime postgres methods including:
supabase.from("myTable").selectAsFlow(...) {
eq("id", 2)
lt("age", 58)
}- fix(realtime): catch exceptions when resolving access token by @jan-tennert in #1386
Storage
- feat(storage): add purge methods for buckets and single objects by @jan-tennert in #1375
supabase.storage.purgeBucketCache("myBucket")
supabase.storage["myBucket"].purgeCache("myFile.png")New Contributors
- @MohammedThalha2002 made their first contribution in #1368
- @OctoBored made their first contribution in #1381
3.7.0
Changes
Core
- Fix append tag by @jan-tennert in #1284
- Add Star History section to README by @hieuwu in #1290
- Fix chat-demo-mpp example not compiling by @cmelchior in #1296
- fix(integration-test): grant table privileges on test_items to PostgREST roles by @PierreVieira in #1333
- implement structured X-Client-Info header by @jan-tennert in #1300
- add sdk compliance by @jan-tennert in #1354
- feat(core): check api key format when creating supabase client by @jan-tennert in #1362
Auth
- Add support for custom OAuth provider by @jan-tennert in #1236
- feat(auth): expose public getter for AuthConfig.httpCallbackConfig on Desktop by @PierreVieira in #1322
- fix(auth): don't throw an error when there is no stored session by @PierreVieira in #1320
- Add API support for Passkeys by @jan-tennert in #1327 under
supabase.auth.passkeys- Note, there is currently no sign-in method. We are still deciding how to move on with Native APIs. Compose Auth support may come as a temporary solution. - Add PKCE support for resend by @jan-tennert in #1337
- fix(auth): clear session on any rest exception by @jan-tennert in #1359
- fix(auth): return refreshed token from resolveAccessToken + tolerate non-object error bodies by @Merkost in #1352
- add
custom_claims_allowlistto custom providers admin api by @jan-tennert in #1349
Realtime
-
Add support for binary broadcasts, httpSend and VSN 2.0.0 by @jan-tennert in #1325
Either use the
ByteArraytype in broadcastFlow:channel.broadcastFlow<ByteArray>("test").collect { println(it.decodeToString()) }
Or use
broadcastFlowwithout a type to receive both types:channel.broadcastFlow("test").collect { when(it.payload) { is BroadcastPayload.Binary -> println(it.payload.data.decodeToString()) is BroadcastPayload.Json -> println(it.payload.value) } }
New method to broadcast messages (the old ones are using this in the implementation if not connected)':
channel.httpSend("myEvent", BroadcastPayload.Binary(byteArrayOf(1,2,3)))
-
Implement deferred disconnect after removing last channel by @jan-tennert in #1276
-
docs(realtime): clarify that maxAttempts governs channel rejoin attempts by @PierreVieira in #1331
-
fix(realtime): log transient websocket reconnects at WARN instead of ERROR by @PierreVieira in #1329
Postgrest
Storage
- test(storage): add download-as-flow tests by @Ehsanul-Hoque in #1317
Functions
- fix(functions): forbid using new api key as fallback by @jan-tennert in #1360
New Contributors
- @cmelchior made their first contribution in #1296
- @Ehsanul-Hoque made their first contribution in #1317
- @PierreVieira made their first contribution in #1331
- @Merkost made their first contribution in #1352
3.7.0-beta-1
A small note
Sorry that the library has been moving slow lately, we currently have some internal stuff to figure out, once that is sorted there will be coming a lot of new features and quality of life changes to the library.
Changes
Core
- Fix append tag by @jan-tennert in #1284
- Add Star History section to README by @hieuwu in #1290
- Fix chat-demo-mpp example not compiling by @cmelchior in #1296
- fix(integration-test): grant table privileges on test_items to PostgREST roles by @PierreVieira in #1333
- implement structured X-Client-Info header by @jan-tennert in #1300
Auth
- Add support for custom OAuth provider by @jan-tennert in #1236
- feat(auth): expose public getter for AuthConfig.httpCallbackConfig on Desktop by @PierreVieira in #1322
- fix(auth): don't throw an error when there is no stored session by @PierreVieira in #1320
- Add API support for Passkeys by @jan-tennert in #1327 under
supabase.auth.passkeys- Note, there is currently no sign-in method. We are still deciding how to move on with Native APIs. Compose Auth support may come as a temporary solution. - Add PKCE support for resend by @jan-tennert in #1337
Realtime
-
Add support for binary broadcasts, httpSend and VSN 2.0.0 by @jan-tennert in #1325
Either use the
ByteArraytype in broadcastFlow:channel.broadcastFlow<ByteArray>("test").collect { println(it.decodeToString()) }
Or use
broadcastFlowwithout a type to receive both types:channel.broadcastFlow("test").collect { when(it.payload) { is BroadcastPayload.Binary -> println(it.payload.data.decodeToString()) is BroadcastPayload.Json -> println(it.payload.value) } }
New method to broadcast messages (the old ones are using this in the implementation if not connected)':
channel.httpSend("myEvent", BroadcastPayload.Binary(byteArrayOf(1,2,3)))
-
Implement deferred disconnect after removing last channel by @jan-tennert in #1276
-
docs(realtime): clarify that maxAttempts governs channel rejoin attempts by @PierreVieira in #1331
-
fix(realtime): log transient websocket reconnects at WARN instead of ERROR by @PierreVieira in #1329
Postgrest
Storage
- test(storage): add download-as-flow tests by @Ehsanul-Hoque in #1317
New Contributors
- @cmelchior made their first contribution in #1296
- @Ehsanul-Hoque made their first contribution in #1317
- @PierreVieira made their first contribution in #1331
3.6.0
Changes
Core
- Fix JS test by @jan-tennert in #1255
- Use inject-based logging approach for configurability and mocking by @jan-tennert in #1254 - You can now provide a custom
SupabaseLoggingProcessorviaSupabaseClientBuilder#defaultLoggingFactory, and also override per plugin. This processor is used to actually log the messages
Realtime
Storage
- fix(storage): preserve full nested path in FileUploadResponse by @Sirelon in #1239
- Fix flaky testUnauthenticatedUploadDenied in CI by @thagikura in #1240
Auth
- fix(auth): Use configured httpPort instead of random port for OAuth callback server by @CristianMG in #1237
- feat: Add support for OAuth 2.1 client admin API by @thagikura in #1222
- Deprecate data property on IDToken.Config by @thagikura in #1249
- fix(auth): don't emit spurious NotAuthenticated on Android lifecycle onStart by @alexeysfh in #1267
Postgrest
- feat: Add automatic retries for transient Postgrest errors by @thagikura in #1246
- fix: expand Cloudflare error codes in retryable status codes by @jan-tennert in #1262
- Refactor PostgrestRequests and add
stripNulls()by @jan-tennert in #1264
Storage
- Add url options to
download,publicUrl,createSignedUrl... by @jan-tennert in #1263 - Note that the transform builder for some methods has been moved e.g.:
supabase.storage.from("bucket").createSignedUrl(..) {
transform { }
}New Contributors
- @Sirelon made their first contribution in #1239
- @CristianMG made their first contribution in #1237
- @alexeysfh made their first contribution in #1267
3.5.0
Changes
Core
- Fix indentation on error lines by @sproctor in #1184
- Separate sub-APIs from parent APIs by @jan-tennert in #1216
- Add integration testing infrastructure with local Supabase by @thagikura in #1217
- Use new unix serializer for timestamps by @jan-tennert in #1215
- Documentation improvements by @jan-tennert in supabase/supabase#44141
Storage
- [Fix] Use options parameter in createOrContinueUpload by @vojta-horanek in #1188
- Add experimental support for vector, analytic buckets & storage, auth improvements by @jan-tennert in #1196
- do not rewrite signed URL to render endpoint for empty transform object by @jan-tennert in #1212
Postgrest
- Add
urlLengthLimitandtimeoutoption to postgrest by @jan-tennert in #1190 - Rename regex match method and add match method by @jan-tennert in #1213
Auth
- Add
currentPasswordtoUserUpdateBuilderby @jan-tennert in #1211 - Fix flaky JS browser test timeout in testLoadingSessionFromStorage by @thagikura in #1233
Functions
- Add streaming support for Edge Function responses by @thagikura in #1228
Realtime
- Add presenceState() query API to RealtimeChannel by @thagikura in #1221
Compose Auth
Because I forgot to put it in the previous changelog:
- The credentials when successfully signing in via native auth are now exposed, so you can access data like name, phone number, etc. This is currently only supported for Native Google Auth on Android and Native Apple Auth on iOS:
is NativeSignInResult.Success -> {
val credential = result.data.google.credential
credential.displayName
credential.phoneNumber
// ...
}New Contributors
- @vojta-horanek made their first contribution in #1188
- @thagikura made their first contribution in #1217
3.4.1
3.4.0
Changes
Core
- Allow nullable types in SupabaseSerializer and Postgrest decoding by @ferhatwi in #1175
- Switch log level for network issue related logs to DEBUG by @jan-tennert in #1159
- Temporary fix for the log level by @jan-tennert in #1169
Auth
- Add redirectUrl to resendEmail by @hieuwu in #1138
- Add X provider by @jan-tennert in #1140
- Add missing properties to
UserInfoandUserMFAFactorby @jan-tennert in #1139 - Add further debug information to requests with an expired token by @jan-tennert in #1149
- Add channel parameter to OTP provider for WhatsApp support by @JOsacky in #1158
- Add
Auth#getClaims()API and migrate to KotlinX IO by @jan-tennert in #1141
Functions
- Fix invalid default rest exception in
Functions#parseErrorResponse()by @jan-tennert in #1142
Storage
- Add
setHeader()to BucketApi by @jan-tennert in #1177
Realtime
- Teardown channels after disconnecting from realtime by @jan-tennert in #1178
3.3.0
Changes
Core
- Update Kotlin to version
3.3.0 - fix: Make OS version optional in headers by @rafsanjani in #1088
- Implement Native Google OAuth iOS in sample by @hieuwu in #1093
- Mask sensitive information in
RestExceptionby @jan-tennert in #1113 - Migrate to new Multiplatform Android Plugin by @jan-tennert in #1013
- Change
body()calls tosafeBody()by @jan-tennert in #1131
Auth
- Refactor platform specific auth initialization by @jan-tennert in #1100
- Add session failsafe and option to require a session for requests by @jan-tennert in #1071
- When trying to make a request with an expired access token, the client will try to force-refresh the session
- There is a new option for all plugins to require the user to be authenticated to make requests with that plugin (instead of falling back to the api key as the access token). Note that some methods ignore this option.
- Add
onErrorparameter tohandleDeeplinkmethods by @jan-tennert in #1136
This is meant to handle exceptions happening when verifying the PKCE code contained in the deeplink - Handle secure email changes in
Auth#verifyby @jan-tennert in #1130
Auth#verifyEmailOtp()will now return anOtpVerifyResult, depending on if the response contains a session. - Expose
Auth#defaultRedirectUrl()by @jan-tennert in #1134 - Fix infinite recursion for expired sessions by @jan-tennert in #1133
- Fix a bug causing the sessionStatus to be set earlier than loading from storage by @jan-tennert in #1128
- Fix
redirect_tourl parameter forresetPasswordForEmail()andgetOAuthUrl()values not being encoded by @jan-tennert in #1125
Realtime
- Classify events with error status code as error events by @jan-tennert in #1123
Compose Auth
- Implement Native Google OAuth for Apple targets by @hieuwu in supabase-community/supabase-kt-plugins#45 also big thanks to @dosier!
Checkout the README for more information
Postgrest
Storage
- Add support for bucket pagination and sorting by @jan-tennert in #1087
New Contributors
- @rafsanjani made their first contribution in #1088
3.3.0-rc-1
Changes
Core
- Update Kotlin to version
3.3.0 - fix: Make OS version optional in headers by @rafsanjani in #1088
- Implement Native Google OAuth iOS in sample by @hieuwu in #1093
- Mask sensitive information in
RestExceptionby @jan-tennert in #1113
Auth
- Refactor platform specific auth initialization by @jan-tennert in #1100
- Add session failsafe and option to require a session for requests by @jan-tennert in #1071
Compose Auth
- Implement Native Google OAuth for Apple targets by @hieuwu in supabase-community/supabase-kt-plugins#45 also big thanks to @dosier!
Checkout the README for more information
Postgrest
Storage
- Add support for bucket pagination and sorting by @jan-tennert in #1087
New Contributors
- @rafsanjani made their first contribution in #1088