← Toutes les plateformes

Démarrage rapide Kotlin et Java

À la fin de cette page, vous aurez un programme Kotlin qui crée un magasin de documents chiffré de bout en bout, écrit une tâche et la relit. Le même client fonctionne depuis Java, Spring, Ktor ou tout autre backend JVM.

Comment ça marche

Le client JVM pilote le vrai moteur MindooDB, qui tourne dans un petit sidecar Node.js sur la même machine. Ils communiquent via un WebSocket loopback authentifié, et chaque session utilisateur obtient son propre processus, si bien que les clés déchiffrées ne se mélangent jamais. Chiffrement, signatures, synchronisation et contrôle d’accès sont le même code que dans Node.js, les navigateurs et React Native.

1) Récupérer le client et le sidecar

Il vous faut JDK 21+ et Node.js 22.13+. Clonez les deux projets côte à côte et compilez le 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 ..

Ajoutez ensuite le client à votre build Gradle, par exemple comme build inclus dans 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) Créer Main.kt

Sidecar.start lance le moteur. createTenant génère toutes les clés cryptographiques et enregistre le premier utilisateur en une seule étape. Ensuite, nous ouvrons une session, créons un document et le relisons — chaque modification est signée et chiffrée avant d’être stockée.

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) Exécuter

./gradlew run

Sortie attendue :

Loaded todo: {"_attachments":[],"done":false,"title":"Buy milk"}
Vous disposez maintenant d’un magasin de documents local chiffré de bout en bout sur la JVM. Chaque modification est signée cryptographiquement et chiffrée avant d’être stockée.

Et ensuite ?

Le guide complet couvre les types de champs, le texte enrichi, les pièces jointes, les requêtes, les Virtual Views, le changefeed, la publication sur un serveur, la synchronisation, l’ajout d’utilisateurs et l’appel du client depuis Java.