@Andrew All MVI/Redux architectures are very similar. They differ only in implementation details and usually it is a matter of personal taste. People used to Android MVVM like more visually similar libraries. People used to React/Redux can like other solutions more. If you don’t care about additional things, like logging, time travel, state management you can just do Redux/MVI in a couple of lines of code just with (or even without) any reactive framework (Coroutines, RxJava, Reaktive, etc). But when your project grows and if you are targeting mobile (especially Android, where state management can be more challenging) you may implement all required stuff yourself or just go with one of a ready made solutions. I personally recommend try to do it by yourself first and when you know what do you need choose the library, if necessary. For example #mvikotlin has pretty steep learning curve, but offers a lot of features like logging and time travel. If you don’t need any of that you probably don’t need that level of complexity.
The same with navigation. Personally I think that the UI should be secondary and the navigation shouldn’t be part of it. In large mobile apps often it is necessary to be able to save and restore navigation state. Redux/MVI pattern is very handy here. If you divide navigation state from actual navigation in the UI things become very simple. And libraries like #decompose can help to use that approach without boilerplate code. But if you just have a couple of screens any navigation library like Voyager will just work and you can take the simplest one.