← Tutte le piattaforme

Avvio rapido Kotlin e Java

Alla fine di questa pagina avrai un programma Kotlin che crea un archivio di documenti cifrato end-to-end, scrive un'attività e la rilegge. Lo stesso client funziona da Java, Spring, Ktor o qualsiasi altro backend JVM.

Come funziona

Il client JVM pilota il vero motore di MindooDB, che gira in un piccolo sidecar Node.js sulla stessa macchina. Comunicano tramite un WebSocket di loopback autenticato e ogni sessione utente ha un proprio processo, così le chiavi decifrate non si mescolano mai. Cifratura, firme, sincronizzazione e controllo degli accessi sono lo stesso codice che gira in Node.js, nei browser e in React Native.

1) Scarica il client e il sidecar

Ti servono JDK 21+ e Node.js 22.13+. Clona entrambi i progetti uno accanto all'altro e compila il sidecar:

git clone https://github.com/klehmann/mindoodb-jvm-bridge.git
git clone https://github.com/klehmann/mindoodb-kmp-client.git

cd mindoodb-jvm-bridge && npm install && npm run build && cd ..

Poi aggiungi il client alla tua build Gradle, ad esempio come build inclusa in settings.gradle.kts:

// settings.gradle.kts
includeBuild("../mindoodb-kmp-client")

// build.gradle.kts
dependencies {
    implementation("com.mindoo.db:mindoodb-kmp-client:0.0.1")
}

2) Crea Main.kt

Sidecar.start avvia il motore. createTenant genera tutte le chiavi crittografiche e registra il primo utente in un solo passaggio. Poi apriamo una sessione, creiamo un documento e lo rileggiamo — ogni modifica viene firmata e cifrata prima di essere salvata.

import com.mindoo.db.bridge.*
import java.nio.file.Paths
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    // Starts the Node.js sidecar that runs the MindooDB engine
    val sidecar = Sidecar.start(
        Paths.get("../mindoodb-jvm-bridge/dist/index.js"),
        Paths.get("./mindoodb-data"),
    )

    // One call creates admin + user keys, KeyBag, and directory
    MindooDBBridge.createTenant(
        sidecar.endpoint,
        tenantId = "my-first-tenant",
        adminName = "cn=admin/o=demo", adminPassword = "admin-password",
        userId = "cn=alice/o=demo", password = "user-password",
        databases = listOf("todos"),
    )
    val session = MindooDBBridge.openSession(
        sidecar.endpoint, "my-first-tenant", "cn=alice/o=demo",
        "user-password", listOf("todos"),
    )

    // Create a todo document and read it back
    val todos = session.database("todos")
    val todo = todos.documents.create(mapOf("title" to "Buy milk", "done" to false))
    println("Loaded todo: " + todos.documents.get(todo.id).data)

    session.close()
    sidecar.stop()
}

3) Esegui

./gradlew run

Output atteso:

Loaded todo: {"_attachments":[],"done":false,"title":"Buy milk"}
Ora hai un archivio di documenti locale, cifrato end-to-end, sulla JVM. Ogni modifica viene firmata crittograficamente e cifrata prima di essere salvata.