Kotlin SDK

The Kotlin SDK for Onyx Database provides an object-oriented persistence API with embedded, in-memory, and remote database options. Follow the README-driven workflow to configure Gradle, choose a persistence manager, and start working with entities.

Overview

Onyx Database is an open-source, Kotlin-first database. The Kotlin API centers on thePersistenceManager and PersistenceManagerFactory abstractions, so you can switch between embedded or remote deployments without rewriting entity code.

Configure Gradle

Add the GitHub Packages repository (requires a GitHub PAT with read:packages):

repositories {
    mavenCentral()
    maven {
        url = uri("https://maven.pkg.github.com/OnyxDevTools/onyx-database-parent")
        credentials {
            username = "YOUR_GITHUB_USERNAME"
            password = "YOUR_GITHUB_PERSONAL_ACCESS_TOKEN"
        }
    }
}

Choose a persistence manager

Initialize the correct factory for your deployment type. Embedded databases use local storage, while remote databases connect to a server endpoint.

// Embedded database
val factory = EmbeddedPersistenceManagerFactory("/path/to/your/database")
factory.setCredentials("username", "password")
factory.initialize()

val manager = factory.persistenceManager
// Remote database
val factory = RemotePersistenceManagerFactory("onx://your_database_host:port")
factory.setCredentials("username", "password")
factory.initialize()

val manager = factory.persistenceManager

Define entities

Model your data with annotated Kotlin classes that implement IManagedEntity:

@Entity
class User : ManagedEntity() {
    @Identifier
    @Attribute
    override var primaryKey: Long = 0

    @Attribute
    var name: String? = null

    @Index
    @Attribute
    var email: String? = null
}

Save & query

Persist and query entities with the persistence manager:

val user = User()
user.name = "John Doe"
user.email = "john@example.com"

val savedUser = manager.saveEntity(user)

val users = manager.executeQuery<User>(
    Query(User::class.java).where("name" eq "John Doe")
)

Resources

Need Help?

If you have any questions or need assistance: