
Typed, reactive documents on top of MMKV — a Kotlin Multiplatform storage library for Android & iOS.
A document-oriented Kotlin Multiplatform storage library backed by
MMKV. Define a data class, treat it as a document, and get
typed reads, copy-style updates, and Flow reactivity.
@Serializable
data class Note(val title: String = "", val body: String = "", val done: Boolean = false)
val note = Documents.document<Note>("note-1") // one call, you have a document
note.set(Note(title = "Pick up milk", body = "2%, not whole"))
note.update(Note::done, true) // one field, no read
note.flow().collect { editor.render(it) } // the editor reacts to every writeThat's the whole story. No schema, no DAO, no MMKV.initialize, no serialization plumbing.
Installation, quick start, guides, use cases, concepts, benchmarks, and the full API reference all live there.
| Platform | Status | Storage engine |
|---|---|---|
| Android | ✅ | MMKV |
iOS — arm64 + simulatorArm64
|
✅ | MMKV (via CocoaPods) |
One public API across the board — it all lives in commonMain. MMKV is bound on Apple targets
through the Kotlin CocoaPods plugin, and the library owns MMKV initialization on both platforms,
so consumers never lift a finger.
A runnable Compose Multiplatform sample lives in sample/ — one shared UI in
sample/shared/ running natively on both Android
(sample/androidApp/) and iOS (sample/iosApp/), with a
screen for each documented use case:
settings, session/auth (with real field-level encryption), caches & drafts, a reactive progress
bar, and a shared-persistence offline queue. Clone, run, tap — on both platforms.
See LICENSE.
If you find Documents useful, consider giving the repo a ⭐ — it helps others discover it.
A document-oriented Kotlin Multiplatform storage library backed by
MMKV. Define a data class, treat it as a document, and get
typed reads, copy-style updates, and Flow reactivity.
@Serializable
data class Note(val title: String = "", val body: String = "", val done: Boolean = false)
val note = Documents.document<Note>("note-1") // one call, you have a document
note.set(Note(title = "Pick up milk", body = "2%, not whole"))
note.update(Note::done, true) // one field, no read
note.flow().collect { editor.render(it) } // the editor reacts to every writeThat's the whole story. No schema, no DAO, no MMKV.initialize, no serialization plumbing.
Installation, quick start, guides, use cases, concepts, benchmarks, and the full API reference all live there.
| Platform | Status | Storage engine |
|---|---|---|
| Android | ✅ | MMKV |
iOS — arm64 + simulatorArm64
|
✅ | MMKV (via CocoaPods) |
One public API across the board — it all lives in commonMain. MMKV is bound on Apple targets
through the Kotlin CocoaPods plugin, and the library owns MMKV initialization on both platforms,
so consumers never lift a finger.
A runnable Compose Multiplatform sample lives in sample/ — one shared UI in
sample/shared/ running natively on both Android
(sample/androidApp/) and iOS (sample/iosApp/), with a
screen for each documented use case:
settings, session/auth (with real field-level encryption), caches & drafts, a reactive progress
bar, and a shared-persistence offline queue. Clone, run, tap — on both platforms.
See LICENSE.
If you find Documents useful, consider giving the repo a ⭐ — it helps others discover it.