Kotlin - Supabase

Introducció

You can use supabase-kt to interact with your Postgres database, listen to database changes, invoke Deno Edge Functions, build login and user management functionality, and manage large files.

To see supported Kotlin targets, check the corresponding module README on [GitHub](https://github.com/supabase-community/supabase-kt.

Note

The Kotlin client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues.

Project

Supabase Modules

Add one or more modules to your project depending on your needs.

The available modules are:

  • auth-kt
  • realtime-kt
  • storage-kt
  • functions-kt
  • postgrest-kt
  • Other plugins also available here

Check out the different READMEs for information about supported Kotlin targets.

Note

Add Ktor Client Engine to each of your Kotlin targets.

Supabase Client

Independently of which Supabase module you are using, you will need to initialize the main client first and install the module.

To create a new client, you can use the createSupabaseClient function.

When installing a module, you can pass a block to configure it.

import io.github.cdimascio.dotenv.dotenv
import io.github.jan.supabase.auth.Auth
import io.github.jan.supabase.createSupabaseClient
import io.github.jan.supabase.postgrest.Postgrest
fun main() {
val dotenv = dotenv()
val supabase = createSupabaseClient(
supabaseUrl = dotenv["URL"],
supabaseKey = dotenv["KEY"]
) {
install(Auth)
install(Postgrest)
//install(Storage)
}
}

Got to the Supabase dashboard and copy your project’s URL and key.

Test that the supabase client is working by running the code.

Database

Create a new table with the SQL Editor:

create table if not exists dog (
id serial primary key,
name text not null
)

You can find more information at Managing tables views and data.

Create the Dog and DogInsert classes:

@Serializable
data class Dog(
val id: Long,
val name: String
)
@Serializable
data class DogInsert(
val name: String
)

You need the DogInsert class because the id attribute is a surrogate key.

Now you can insert the first dog:

fun main() {
// ...
runBlocking {
val pg = supabase.postgrest
pg.from("dog").insert(DogInsert("Trufa"))
}
}

Run the code and verify in the “Table Editor” that the new record has been inserted:

If you want to return the inserted data, you can use the select() method inside the request:

fun main() {
// ...
runBlocking {
val pg = supabase.postgrest
pg.from("dog").insert(DogInsert("Ketsu")) {
select()
}.decodeSingle<Dog>().also { println(it) }
// Dog(id=2, name=Ketsu)
}
}

You can also insert multiple dogs at once:

fun main() {
// ...
runBlocking {
val pg = supabase.postgrest
pg.from("dog").insert(
listOf(DogInsert("Lassie"), DogInsert("Maverick"))
) {
select()
}.decodeList<Dog>().onEach { println(it) }
// Dog(id=3, name=Lassie)
// Dog(id=4, name=Maverick)
}
}

Pending