A Kotlin Multiplatform SQLite library. Annotate tables and databases; a compiler plugin generates adapters and a typed query DSL.
Targets: Android, JVM, iOS, macOS.
@Database(version = 1, tables = [User::class])
abstract class AppDatabase : DBFlowDatabase<AppDatabase>() {
abstract val userAdapter: ModelAdapter<User>
}
@Table
data class User(
@PrimaryKey(autoincrement = true) val id: Int = 0,
val name: String,
)import com.dbflow5.database.createDB
val db = createDB<AppDatabase>(context) { copy(name = "App") }
db.writableTransaction {
userAdapter.save(User(name = "Ada"))
val users = (userAdapter.select() where (User.name eq "Ada")).list()
}| Module | Role |
|---|---|
lib |
Runtime, query DSL, transactions, Flow observers |
core |
Annotations and converters (pulled in by lib) |
compiler + plugin com.dbflow5 |
Table companions (adapters + column properties), *_Adapter helpers, *_Database |
sqlcipher |
Encrypted Android databases |
livedata / paging / reactive-streams |
Android extras |
Coroutines are built into lib. There is no separate coroutines artifact.
Usage lives under usage2/. The table of contents is in SUMMARY.md.
Published HTML: dbflow.gitbook.io/dbflow
See Including in a project for version catalogs, the compiler plugin, and generated sources.
Quick start with a version catalog:
[plugins]
dbflow = { id = "com.dbflow5", version = "5.0.0-alpha2" }plugins {
kotlin("multiplatform")
alias(libs.plugins.dbflow)
}That is the whole setup. The plugin adds the com.dbflow5:lib dependency, the
compiler plugin, the generated-sources directory on commonMain, -lsqlite3
linker opts for native binaries, and a dbflowGenerate task that keeps
generated code in sync with your models.
Until the plugin is on Maven Central, use a composite build of this repo.
- Match existing Kotlin style.
- Keep the change scoped to the issue.
- Open PRs against
master.
Started at Raizlabs / Rightpoint. Maintained by agrosner.