Skip to content

Add Kotlin Multiplatform SDK support #4821

@clockwork-labs-bot

Description

@clockwork-labs-bot

This issue tracks reimplementing the work from stale PR #4471, which has been closed because it is too far out of date to merge directly.

Original pull request

What the original PR was trying to do

What Kotlin Multiplatform client SDK for SpacetimeDB, targeting JVM and iOS (arm64, simulator-arm64, x64). This brings first-class Kotlin/Java/Swift (via KMP interop) support to the SpacetimeDB ecosystem. Why There's currently no way to build native Android/JVM or iOS clients without going through the Cor Rust SDKs. The Kotlin SDK fills this gap and opens up the entire JVM and Apple platform ecosystem — Android apps, backend services, iOS apps, and any Kotlin target. Architecture - Wire protocol: Full v2.bsatn.spacetimedb support with BSATN binary serialization - Transport: Ktor 3.0.3 WebSocket client (OkHttp engine on JVM, Darwin engine on iOS) - Concurrency: kotlinx-coroutines with Mutex-serialized message handling, atomicfu for transport flags - Compression: Configurable (None/Gzip/Brotli) via withCompression(). Gzip on both platforms via expect/actual, Brotli on JV...

Closure context

  • @AndroidPoet This is a very helpful PR! We're planning to add Swift, Go, and Kotlin support in the near future, both on the server and on the client. The wrinkle is that we're currently maintaining a bunch of different SDK codebases separately. Before expanding our language support, we'd like to create a central Rust client "core" which we link with all the different languages. Given that work on that is on going, I'm going to close this PR and create an issue to track it. I don't think this PR will merge as is, but it will be a great reference for our future PR!

Reimplementation notes

  • Reimplement this work on top of current master in a new PR.
  • Keep the original PR linked as historical context and as a source of useful implementation ideas where still relevant.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions