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"} 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.