Multiplatform (iOS/Android/MacOS/Windows) Applications in 2021
Published: 2021-01-14 11:15:47

If you are one of the "Write Once Run Anywhere" advocates, here is my analysis of where the Mobile/Desktop application world is going.

The world is getting divided again. The groups this time: dotNet(MS), FB/MS and Google/JetBrains.

Here is what is happening. The desktop and mobile OS space is now divided into:
- Windows
- Apple ( iOS / MacOS )
- Android ( primarily Google, but lot of forks )
- Browser

Microsoft, with dotNet as the strong foundation, has the best developer experience, with Visual Studio. It is currently enabling its developers to build applications using [Xamarin](https://dotnet.microsoft.com/apps/xamarin) for the mobile and desktop platforms, in a "learn one platform" way. It is using C#/F# as the technology of choice. And if you like these, then definitely explore Xamarin. The last time I evaluated Xamarin, just when [Xamarin Forms](https://dotnet.microsoft.com/apps/xamarin/xamarin-forms) was being released, the challenge I saw, as with any other multi-platform framework, will be to keep pace with the latest. Things may have changed since then, evaluate thoroughly.

Apple has its ecosystem locked into XCode. Any development that needs to happen for the iOS/MacOS platforms, needs to use xcode as the underlying infrastructure. And, XCode won't work with other languages or tools. So, if you are looking to build something that works on all platforms, look elsewhere.

After Google lost the case against Oracle, JetBrains, the tools company, was quick to pitch its language, and the Android ecosystem just pivoted on Kotlin. Its a great language to work with, and the tooling from JetBrains is really good too. There is some conflict right now between Android Studio and IntelliJ, and that can be an irritant when switching the tools, but I'm sure they will figure it out eventually.

JetBrains is preparing its play on the multi-platform apps story with [Kotlin Multi Platform](https://kotlinlang.org/docs/reference/mpp-intro.html), also referred to as MPP (Multi Platform Project). They are following an approach similar to Xamarin, but with the [Kotlin](https://kotlinlang.org) language. You can see this with the recently launched [Compose For Desktop](https://www.jetbrains.com/lp/compose/) project. The alignment of JetBrains to Google is not a chance here, given that Apple refuses to allow anyone close.

The Browser based approach uses Javascript as the language of choice. These are pioneered by frameworks that came from the Web application usage, and wanted to enable the large community to build mobile applications. The most popular in this tech stack, by far, is [React Native](https://reactnative.dev), which is based on the React framework from Facebook. Originally intended for Android and iOS family (TV OS, WatchOS), Microsoft has been recently  investing in [React Native for Desktop](https://microsoft.github.io/react-native-windows/) applications, so the future looks bright for it to arrive on Windows and MacOS too. Looks like [Outlook is built React Native](https://www.reddit.com/r/reactnative/comments/j7jp1n/microsoft_outlook_is_moving_to_react_native/g852mjo) now. 

All the multi-platform libraries follow the 'Light Weight' UI platform architecture, that renders and last seen very successfully done with [Java Swing](https://en.wikipedia.org/wiki/Swing_(Java)) Most of the controls translate to platform specific, OS provided implementations, as in [Java AWT](https://en.wikipedia.org/wiki/Abstract_Window_Toolkit). And, present a unified component lifecycle across platforms for uniformity and programmability. All frameworks have some kind of `Bridge` to allow the applications to reach system specific APIs if needed, to ensure that platform specific functionality is available to the applications, while the "Common" layer figures out the best integration for the multi-platform approach.

Interestingly, each technology stack has exactly one dominant player trying to address the problem, so we will see them growing stronger with the years. The tooling still leaves a lot to be desired, specially if you look at the maturity of functionality when using Docker based development environments with VS Code. But, these are early days. 

In Summary, here is landscape:

Tech Stack | Dominant Player | IDE of Choice
C#/F#/dotNet | Xamarin / Xamarin Forms | Visual Studio
Java / Kotlin | Kotlin MPP / Compose for Desktop / Jetpack Compose | IntelliJ / Android Studio
Javascript | React Native | Visual Studio Code

2021 (and 2022) will be really interesting in this space. I will be keeping a watch, and keep you posted.

About the author:
The author, Navneet Karnani, is a Fullstack Veteran with over 23 years of industry experience. Now a freelancer, his profile can be accessed on [MandrakeTech](https://www.mandraketech.in)

This blog was originally published at https://www.mandraketech.in/multiplatform-applications-in-2021