I want to expand a bit more on my previous comment, but first, we have to go back to late 2016… when I started developing WoWs Info using Swift 2. Read more in details here about the overall timeline. Skip to Kotlin if not interested in the rest.

React Native, Xamarin, Flutter

I never mentioned why React Native was chosen over Xamarin and Ionic and only said it was a shortcut. You see, I used C# more back then, so Swift was actually quite new to me. Ionic wasn’t bad, but the performance wasn’t great with lists and you know, why is it so hard to just centre a div?? React Native worked well for me. I was quite happy with the flex layout, and JavaScript was easier to learn and write. Well, it is actually way harder because you really need to know iOS and Android development to make it work nicely.

To be honest, if I could just wait a little bit more, Flutter would be released in just a few months, but I missed it unfortunately. At the time, Flutter had solved almost all the issues I had with React Native. It was consistent with great UI across all platforms, built-in navigation (YES!) and extremely simple to setup and upgrade. I would use Flutter for WoWs Info if I waited a little bit more, but you never know what will happen in the future.

Looking back, React Native is indeed a better choice than Xamarin, Ionic, and even Flutter. React itself is a popular frontend framework even to this day. JavaScript is almost everywhere now. You can have a nodejs backend, with a React frontend and use React Native for the mobile app. C# can also do that, but I feel like it is more of a backend/desktop language. Xamarin is also kinda dead now and being replaced by MAUI, which is also sorta half dead. Well, it is Microsoft quality, don’t expect too much.

Why I say even Flutter even though I have made two apps with the most stars with Flutter and they work well, but why?

The thing with Flutter is that it is by itself. Dart isn’t really used elsewhere if you ask me. If I picked Flutter instead of React Native, I would miss the huge JavaScript community and get locked into just Flutter. This is never something I pursue. Please don’t get me wrong, Flutter is amazing and much better compared to React Native in general. The only reason React Native is better is because of React and JavaScript, that’s all.

Kotlin | Unique Developer Experience

Kotlin is widely known in the Android and JVM ecosystem, but it is more than that. One of its features is that it can compile to JavaScript and Native, which opens up the potential to share the same codebase across platforms. While JavaScript can also run everything, you’re often locked into its ecosystem. That isn’t necessarily a bad thing in 2024, but Kotlin offers something different.

What sets Kotlin apart is its developer experience. I like to call it, “developer native”. Although frameworks like React Native, Flutter, and Xamarin allow you to run apps on iOS/Android, they don’t provide the same seamless experience when integrating with the native platform. For iOS, Swift/Objective-C and Xcode are the native tools. You can’t simply import something from Flutter, React Native, or Xamarin as if it were just another Swift module. While it’s possible to bridge between native code and the framework, it is a lot of effort. This is where Kotlin shines.

With my new wowsinfo-core fully in Kotlin, I managed to get it running with React Native, see #3. This wasn’t easy, but it opened up new possibilities. Since my production app is built in React Native, I can’t abandon it entirely for Kotlin. However, I have started slowly migrating some APIs and common logic to Kotlin and using Kotlin/JS to run it within React Native. This approach helps me separate the app’s logic from its UI—a key improvement over my current implementation.

When the entire app logic is done with Kotlin, that’s when I can start working on the native UI with UIKit and SwiftUI or some Compose Multiplatform. Although this is a long term milestone, I am happy with the direction things are going. The key point is that I don’t need to throw everything away and start over. Instead, I can gradually improve the app, keeping what works and making it better over time with newer technologies.


In the end, the future is unknown. What I can do is pick the best approach today. There can be a better technology tomorrow like the LLM AI thing. By the way, I have also prepared something for that, I will write about it later. For many years, I disliked my React Native app even though there is nothing wrong with it. I always wanted to get rid of it, but I couldn’t. Now, I am accepting it. No matter how bad it is, it is still my app, I wrote it. For many years, it has been running just fine even though the code quality is poor. I tried to rewrite it in Flutter twice, but I never completed it. Now, I want to try something different. Like I said, instead of throwing everything away, do it slowly and adapt to better technologies, but not for the sake of it.