Documentation Index
Fetch the complete documentation index at: https://tfh-murph-idkit-intro.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
The Kotlin SDK is currently under active development. Expect minor API evolution while the SDK hardens.
Install
The package is published as com.worldcoin:idkit to GitHub Packages.
dependencyResolutionManagement {
repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/worldcoin/idkit")
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN") // requires read:packages
}
}
}
}
dependencies {
implementation("com.worldcoin:idkit:<version>")
}
Request flow
import com.worldcoin.idkit.IDKit
import com.worldcoin.idkit.IDKitPollOptions
import com.worldcoin.idkit.IDKitCompletionResult
import com.worldcoin.idkit.orbLegacy
import uniffi.idkit_core.Environment
import uniffi.idkit_core.RpContext
val rpContext = RpContext(
rpId = "rp_xxxxx",
nonce = backend.nonce,
createdAt = backend.createdAt.toULong(),
expiresAt = backend.expiresAt.toULong(),
signature = backend.sig,
)
val config = IDKitRequestConfig(
appId = "app_xxxxx",
action = "my-action",
rpContext = rpContext,
allowLegacyProofs = true,
returnTo = "myapp://verify-done", // Optional: mobile deep-link callback URL
environment = Environment.PRODUCTION,
)
val request = IDKit.request(config).preset(orbLegacy(signal = "user-123"))
val connectorURI = request.connectorURI
val completion = request.pollUntilCompletion(
options = IDKitPollOptions(pollIntervalMs = 2_000u, timeoutMs = 120_000u)
)
if (completion is IDKitCompletionResult.Success) {
val result = completion.result
}
Presets
import com.worldcoin.idkit.IDKit
import com.worldcoin.idkit.orbLegacy
val request = IDKit.request(config).preset(orbLegacy(signal = "user-123"))
Polling patterns
pollStatusOnce() for manual loops
pollUntilCompletion(options) for blocking until terminal state
statusFlow(pollInterval) extension for coroutine-driven updates
import com.worldcoin.idkit.IDKitStatus
import com.worldcoin.idkit.statusFlow
import kotlinx.coroutines.flow.collectLatest
import kotlin.time.Duration.Companion.seconds
request.statusFlow(2.seconds).collectLatest { status ->
when (status) {
IDKitStatus.WaitingForConnection -> Unit
IDKitStatus.AwaitingConfirmation -> Unit
is IDKitStatus.Confirmed -> println(status.result)
is IDKitStatus.Failed -> println(status.error)
}
}