Skip to main content

Redux FAQ: Multiplatform

Table of Contents

Multiplatform

What is "Multiplatform" Kotlin?

Multiplatform Kotlin is the ability to compile Kotlin code to different targets. Available targets are JVM, Native (iOS, WIN, Linux), Javascript, & Webassembly. This allows writing business logic, networking, Redux code, & persistence in a shared module. The UI is then implemented leveraging the platforms language and UI SDKs.

Further information

Can I use existing JS Redux code?

It is not be possible to share the Javascript code with other platforms. It would need to be re-written in Kotlin in order to share it with other platforms. In many cases this is very easy to do given the similarities between Kotlin and Javascript.

Can I use React with ReduxKotlin?

Yes - but this has not been proven with a sample yet. This is on the roadmap. In theory this should work because the API for ReduxKotlin matches JS Redux. A minimal sample will be posted when available. If interested in creating a sample or collaborating, see the "Community" Section at the bottom of this page.

Does compiling to Native for iOS include a VM? Is there a lot of overhead?

Kotlin does not ship a VM to native. It compiles to a native executable with objC headers. KN does include an automated memory management scheme that does automatic reference counting and garbage collection. There does not appear to be a significant performance or memory overhead, however I have not seen benchmarks. For more details, checkout the Kotlin Native docs.

How do I structure a multiplatform kotlin project?

There some examples that demonstrate Android and iOS sharing code. JS examples will be added soon. Typically there is a shared module (or multiple shared modules) and the platforms pull it in as a dependency. Redux looks like a very promising pattern for multiplatform because the view layer can be very thin. Additionally Redux works well with Jetpack Compose and SwiftUI.

ReduxKotlin.org and kotlin-redux wrapper are completed separate projects with different objectives. ReduxKotlin is a port of Redux to pure Kotlin. Kotlin-redux is a kotlin wrapper around the JS Redux library, which allows compiling to JS only.

Further information

-kotlin-redux wrapper

Are coroutines usable on Native/iOS?

Yes. All the samples in this project use coroutines with a UI dispatcher and they perform reasonable well. However there is a limitation currently with coroutines on Native which only allows a single thread. The Jetbrains team is actively working on a solution. For now injecting your shared code with a coroutine context from the platform will allow you use a single threaded model now, and then switch to a multithreaded model easily in the future.

Further information

-Github issue: Kotlinx.coroutines multithreaded support on native -Deep dive into threading on Native by Kevin Galligan