05 / START SMALL

One interface. One implementation.

Register the implementation once. The generated descriptor connects both sides while the runtime takes responsibility for delivery and operations.

JVM + macOS ARM64Kotlin MultiplatformCoroutines + Flow
GreeterSystem.kt ready
interface IGreeter : IService {
  suspend fun greet(request: GreetRequest): GreetResponse
}

class Greeter : IGreeter {
  override suspend fun greet(request: GreetRequest) =
    GreetResponse("Hello, ${request.name}")
}

val host = Host.default(name = "Greeter")

host.registerService<IGreeter> { Greeter() }
    .start()

val greeter = RSocketProxyFactory
    .forHost(host)
    .create<IGreeter>()