Inicio rápido con Kotlin y Java
Al final de esta página tendrás un programa en Kotlin que crea un almacén de documentos cifrado de extremo a extremo, escribe una tarea y la vuelve a leer. El mismo cliente funciona desde Java, Spring, Ktor o cualquier otro backend de la JVM.
Cómo funciona
El cliente de la JVM controla el motor real de MindooDB, que se ejecuta en un pequeño proceso auxiliar (sidecar) de Node.js en la misma máquina. Se comunican por un WebSocket de loopback autenticado, y cada sesión de usuario tiene su propio proceso, de modo que las claves descifradas nunca se mezclan. El cifrado, las firmas, la sincronización y el control de acceso son el mismo código que se ejecuta en Node.js, en navegadores y en React Native.
1) Obtén el cliente y el sidecar
Necesitas JDK 21+ y Node.js 22.13+. Clona ambos proyectos uno junto al otro y compila el 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 .. Después añade el cliente a tu build de Gradle, por ejemplo como build incluido en 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 inicia el motor. createTenant genera todas las claves criptográficas y registra al primer usuario en un solo paso. Después abrimos una sesión, creamos un documento y lo volvemos a leer — cada cambio se firma y se cifra antes de guardarse.
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) Ejecuta
./gradlew run Salida esperada:
Loaded todo: {"_attachments":[],"done":false,"title":"Buy milk"} ¿Y ahora qué?
La guía completa cubre tipos de campo, texto enriquecido, adjuntos, consultas, Virtual Views, el changefeed, la publicación en un servidor, la sincronización, la incorporación de usuarios y el uso del cliente desde Java.