Snelstart voor Kotlin en Java
Aan het eind van deze pagina heb je een Kotlin-programma dat een end-to-end versleutelde documentopslag aanmaakt, een taak schrijft en die weer inleest. Dezelfde client werkt vanuit Java, Spring, Ktor of elke andere JVM-backend.
Zo werkt het
De JVM-client stuurt de echte MindooDB-engine aan, die in een kleine Node.js-sidecar op dezelfde machine draait. Ze praten via een geauthenticeerde loopback-WebSocket, en elke gebruikerssessie krijgt een eigen proces, zodat ontsleutelde sleutels nooit door elkaar raken. Versleuteling, handtekeningen, synchronisatie en toegangscontrole zijn dezelfde code als in Node.js, browsers en React Native.
1) Haal de client en de sidecar op
Je hebt JDK 21+ en Node.js 22.13+ nodig. Kloon beide projecten naast elkaar en bouw de 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 .. Voeg de client daarna toe aan je Gradle-build, bijvoorbeeld als included 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) Maak Main.kt aan
Sidecar.start start de engine. createTenant genereert alle cryptografische sleutels en registreert de eerste gebruiker in één stap. Daarna openen we een sessie, maken we een document aan en lezen we het weer in — elke wijziging wordt ondertekend en versleuteld voordat ze wordt opgeslagen.
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) Uitvoeren
./gradlew run Verwachte uitvoer:
Loaded todo: {"_attachments":[],"done":false,"title":"Buy milk"} Hoe verder?
De volledige handleiding behandelt veldtypen, rich text, bijlagen, query's, Virtual Views, de changefeed, publiceren naar een server, synchronisatie, gebruikers toevoegen en de client aanroepen vanuit Java.