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"} E adesso?
La guida completa tratta i tipi di campo, il rich text, gli allegati, le query, le Virtual View, il changefeed, la pubblicazione su un server, la sincronizzazione, l'aggiunta di utenti e l'uso del client da Java.