← Todas las plataformas

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"}
Ya tienes un almacén de documentos local y cifrado de extremo a extremo en la JVM. Cada cambio se firma criptográficamente y se cifra antes de guardarse.