← Alle Plattformen

Kotlin- & Java-Schnellstart

Am Ende dieser Seite läuft ein Kotlin-Programm, das einen Ende-zu-Ende-verschlüsselten Dokumentenspeicher anlegt, ein Todo schreibt und es wieder ausliest. Derselbe Client funktioniert aus Java, Spring, Ktor oder jedem anderen JVM-Backend.

So funktioniert es

Der JVM-Client steuert die echte MindooDB-Engine, die in einem kleinen Node.js-Sidecar auf demselben Rechner läuft. Beide sprechen über einen authentifizierten Loopback-WebSocket miteinander, und jede Benutzersitzung bekommt einen eigenen Prozess, sodass sich entschlüsselte Schlüssel nie vermischen. Verschlüsselung, Signaturen, Sync und Zugriffskontrolle sind derselbe Code wie in Node.js, im Browser und in React Native.

1) Client und Sidecar holen

Du brauchst JDK 21+ und Node.js 22.13+. Klone beide Projekte nebeneinander und baue den 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 ..

Füge den Client dann deinem Gradle-Build hinzu, zum Beispiel als eingebundenen Build 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) Main.kt anlegen

Sidecar.start startet die Engine. createTenant erzeugt alle kryptografischen Schlüssel und registriert in einem Schritt den ersten Benutzer. Danach öffnen wir eine Sitzung, legen ein Dokument an und lesen es wieder aus — jede Änderung wird signiert und verschlüsselt, bevor sie gespeichert wird.

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) Ausführen

./gradlew run

Erwartete Ausgabe:

Loaded todo: {"_attachments":[],"done":false,"title":"Buy milk"}
Damit läuft ein lokaler, Ende-zu-Ende-verschlüsselter Dokumentenspeicher auf der JVM. Jede Änderung wird kryptografisch signiert und verschlüsselt, bevor sie gespeichert wird.