This repository is not maintained. Arkadii Ivanov continued to work on the fork arkivanov/MVIKotlin.
This project is inspired by Badoo MVICore library.
Should you have any questions or ideas please welcome to the Slack channel: #mvikotlin
MVI stands for Model-View-Intent. It is an architectural pattern that utilizes unidirectional data flow. The data circulates between Model
and View
only in one direction - from Model
to View
and from View
to Model
.
MVIKotlin is a Kotlin Multiplatform framework that provides a way of (not only) writing shared code using MVI pattern. It also includes powerful debug tools like logging and time travel. The main functionality of the framework does not depend on any reactive nor coroutines library. Extensions for Reaktive and for Coroutines libraries are provided as separate modules.
MVIKotlin does not bring or enforce any particular architecture. Its responsibility can be described as follows:
State
(the scope is not defined, it can be a whole app, a screen, a feature, or a part of a feature);Everything else is out of scope of the library, there are no definitions for "screens", "features", "modules", etc. Also, no particular reactive framework is enforced/exposed. This gives a lot of flexibility:
You can find one of the architecture options in the samples. Again, this is just an example of one possible solution.
Recommended minimum Gradle version is 5.3. Please read first the documentation about metadata publishing mode.
There are a number of modules published to Maven Central:
mvikotlin
- core interfaces and functionality (multiplatform)mvikotlin-main
- the main module with the default Store
implementation (mutiplatform)mvikotlin-logging
- logging functionality (mutiplatform)mvikotlin-timetravel
- time travel feature (mutiplatform)mvikotlin-extensions-reaktive
- extensions set for Reaktive library (multiplatform)mvikotlin-extensions-coroutines
- extensions set for coroutines (multiplatform)keepers
- provides StateKeeper
and InstanceKeeper
API for state preservation and objects retainingrx
- a tiny module with abstractions over rx and coroutines (multiplatform)Add required modules to your module`s build.gradle file:
implementation "com.arkivanov.mvikotlin:<module-name>:<version>"
To speed up the creation of new Stores, you can use the following IDEA Live Templates.
https://arkivanov.github.io/MVIKotlin
The sample project is a todo list with details view.
Twitter: @arkann1985
If you like this project you can always ;-)