Kotlin and Flutter were both introduced a few years ago as tools for mobile app development. The first you will learn about them online is that Flutter is developed by Google, and Kotlin is made by JetBrains, a Czech development firm.
Selecting between JetBrains and Google, the latter seems to be a safer choice in the long-term perspective. Yet in 2019, Google announced that Kotlin is now the preferred language for building Android apps.
Flutter is used to run such huge projects as Alibaba and Tencent, while Kotlin is utilized to build Twitter and TripAdvisor among others.
So things aren't that simple and both technologies have their strengths and weaknesses.
If you're facing the choice between two, as a cross-platform app development company we came up with this blog post comparing Flutter and Kotlin Multiplatform. At least, we'll try, since those are quite different technologies.
Before we start
When it comes to comparing tools as different as Kotlin Multiplatform and Flutter, the first thing you'd want to do is often to compare their popularity and numbers of apps written using these technologies. Yet it is obvious that Google-based Flutter receives more eyes, downloads, and, eventually, popularity. Thus this aspect is very distantly related to the quality of the tools and we decided to drop it.
Also, if you want to learn more about Flutter as compared to other mobile app development tools, check out our other blog posts:
- Flutter vs React Native vs Xamarin in 2021: Pros, Cons, Examples
- Flutter vs React Native: Comparison for Tech Managers
- Flutter VS Xamarin VS React Native: What’s Best in 2021?
First things first, Kotlin is a first and foremost programming language (even though it comes with libraries and tools), while Flutter is a UI software development kit and a framework requiring you to write the code for it in Dart, a C-style language.
Flutter is designed to build apps for Android, iOS, Linux, macOS, Windows, and even Fuchsia via a single code base.
Kotlin was initially created to build native apps for Android. However, with the introduction of Kotlin Multiplatform, it now also supports most of the major platforms, but in a more specific way. (Note: as of summer 2021, many Kotlin Multiplatform projects are still in Alpha).
For instance, in Android, the Kotlin-based code targets the Java Virtual Machine, and in iOS, it targets the iOS native code via LLVM. However, it is capable of implementing only the business logic for the iOS app – you'll still need the Objective-C or Swift developers to build its interface.
So as of 2021 both of the technologies can be used for Android/iOS cross-platform development. Yet the difference in approaches is so huge it is impossible to compare the tools side by side. Because of that, we're going to compare them in terms of business indicators, such as performance or expertise requirements.
Unlike Flutter, Kotlin code compiles in the platform's native format, which guarantees the best performance that platform can show.
With Flutter, you will be forced to use libraries to access the platform's native components such as Bluetooth or camera. Using Kotlin, you get direct access to those, which is less resource-consuming.
When our web and mobile application development company gets a project requiring the app to be present on different platforms, Flutter appears to deliver better team performance, as we need less time and experts to build the same apps for iOS, Android, web, and desktop.
On top of that, Flutter sports Hot Reload, a feature that helps you immediately see the changes you made in the app (without the need to recompile the whole project). This increases the development speed dramatically, even though with Kotlin you'll generally need to write fewer lines of code.
Flutter is a UI SDK, which means that you'll use widgets (read: building blocks) to build the interface of your apps. That is a very fast process since you don't need to build those widgets from scratch, there are lots of those widgets, and you can quickly customize them by their parameters, even though they are predefined.
iOS and Android cross-platform development often means you'll sacrifice things such as animations and UI nativeness to the code uniformity for different platforms. Flutter has no such problem as it takes advantage of its Skia graphic engine to ensure smooth animations and offers Android and iOS-specific UI widgets to deliver a native-like visual experience.
Kotlin Multiplatform, on the contrary, provides more freedom in terms of UI development. You'll use the platform's local libraries and widgets and those will enable you to make the app look exactly like you want (at the cost of bigger development time, of course). Thus, the more unusual your app looks, the more chances Kotlin Multiplatform will be a better fit for you. Still, we’re talking about Android here; with iOS, you’ll need to code the UI in the platform’s “native” Swift or Objective-C.
Though both are object-oriented languages, Kotlin is more similar to Java and Swift, while Dart is based on C. If your team had never worked with Kotlin or Flutter, your choice of the technology will be based on how well your developers are accustomed to these languages.
In case you have an existing project that is based on Java, migrating the code to Kotlin is very straightforward and quick thanks to Java-Kotlin compatibility.
Reliability and documentation
Since Kotlin Multiplatform is in alpha (as of summer 2021) and its documentation is still in progress, it becomes a major pitfall for those wanting to build a cross-platform app. Its counterpart is not only documented much better but also offers handy testing tools to ensure the reliability of your app.
Yet if you're targeting the Android platform only, both tools are equally good in terms of reliability and documentation. And later expansion to iOS and/or the web won’t require you to rewrite your code from scratch in a different language in both cases.
Here's the comparison table that shows that there is no clear winner:
However, there's one important thing.
We’ve done a lot of app development for startups and learned that your project is never about another average Android app. It most probably possesses unique technologies, ideas requiring creative implementation, or an innovative approach to an existing problem. Thus the main question is how the two compared technologies can handle your request and what effort will be required for that.
In our experience, the answer is often unexpected. The Android-only app might be built more quickly with Flutter and show astonishing performance, and vice versa, a cross-platform project might require going with Kotlin even despite its limitations.
Because of that, we always recommend starting with a free consultation with one of our seasoned experts and see what they say. Preliminary estimates might not be of the utmost precision but still will provide you with a big picture and next steps. Such information is always much more useful than generic comparisons of development tools.