In this post, we are extensively comparing Flutter Vs Xamarin on 15 different criteria of app development to guide the developers and entrepreneurs. This comparison guide is for reference purpose only, as each project has separate requirements at the end of the day.
Flutter and Xamarin are both cross-platform mobile application development frameworks used to build apps using a single code base. Today we have the privilege of working with so many cross-platform frameworks like Intel XDK, Cordova, Xamarin, Flutter and React-native etc. By making a comparison among their drawbacks, strengths and features, it becomes easier for the developers and entrepreneurs to select the best fit for their projects.
Let’s start exploring their differences to understand better that which one is developer’s delight and useful app development technology:
Flutter Vs Xamarin- Comparison Guide
1. Programming Language
The key benefit of using a cross-platform mobile app development technology is the ability to use a single programming language to develop apps for both iOS and Android.
Xamarin uses C# language to build cross-platform apps. C# got popular because of the cool features like portability, meta programming and functional programming.
C# is mainly used for web development, so cross-platform app development is a cakewalk for C# developers.
Xamarin is a winner in this category because of the huge community support for C# developers ( as it is C# is backed by Microsoft). Dart has a great feature set too, but it’s lesser used and lacks community support.
The method which is easy to install without any complications is the one preferred by the developers and loved by all. Installation method must always be straight forward.
Flutter ( Binary Download from Source )
Flutter is installed by downloading the binary for a specific platform from GitHub. For MacOS, we have to download the
flutter.zip file and add it as a PATH variable.
Flutter can avoid extra installation steps by supporting package managers like-Homebrew, Macports, APT, YUM etc.
Xamarin ( Visual Studio -Xamarin SDK)
Xamarin uses Visual Studio IDE for installation and Xamarin SDK for iOS and MacOS can be installed later into Visual Studio.
There is no documentation/ resources about installing Xamarin without Visual Studio.
Xamarin installation is dependent on the Visual Studio IDE, whereas Flutter installation is performed via command line. Flutter installation seems to require extra steps for adding the binary to PATH and downloading it from the source code. However, installing Flutter is much more easier and lightweight and Flutter can be installed without any dependency on IDE.
A well-designed technical architecture greatly influences the performance of its apps. Hence, it is very essential for a great cross-platform app development framework to have a supportive technical architecture. By knowing the intricacies of framework, we can select the best one for our apps.
Lets check out their architecture:
Flutter has everything in the Flutter engine itself as it uses the Dart Framework. Dart has most of the components inbuilt(so, it is bigger in size also) and it does not require any bridge for communications with the native modules.
Dart has many frameworks, like Material Design and Cupertino, packed inside which provide required technologies for development. Also, Dart framework uses Skia C++ engine which has all the protocols, compositions and channels.
Xamarin uses Mono execution environment for both iOS and Android platform. For iOS, Mono execution environment runs along with Objective-C runtime and Unix kernel, while for Android, it runs along with Android Runtime on Linux or other kernel.
Microsoft documentation provides a detailed explanation of iOS and Android architecture used with Xamarin. Xamarin also has Swift runtime support, which resides in a separate repository.
Flutter is the winner in this category because of many native inbuilt components. Although Xamarin architecture looks promising, it doesn’t have great support for Kotlin or Swift runtime which are official runtimes for developing Android and iOS apps.
4. Developer Productivity
Developer productivity is the key to building apps faster, when a developer is satisfied with a technology then it gives better outcome in performance.
Let’s find theirs-
Flutter has the hot reload feature and it’s very easy to get started with the demo app. However, as the complexity of apps grows, developers would need to learn and adopt new Flutter concepts.
In addition, Dart is not a common programming language and there is a lack of support for it in many IDEs and text editors.
There is no concept of hot reload in Xamarin; but it has loads of modules and a great development API and it heavily depends on the Visual Studio IDE. Developers from the non-Microsoft stack will struggle to learn all the concepts of VS Code or a similar IDE. Also, learning C# will be require a long learning curve.
Xamarin uses AOT compilation for iOS for the build and JIT/AOT for Android, so getting the UI changes in the devices might take some time. Xamarin renders UI in terms of the nativeUIControllers. There are a lot of resources online for Xamarin developers to solve the common issues.
Being a mature framework, Xamarin has great developer support in terms resources and tools. Flutter is fairly new at this point, but will catch up very soon as the community around Flutter grows.
As soon as developers start to show interest in a technology and adopt it in their development process, they form a community to share knowledge. A strong community helps developers to learn from each other and solve the problems they are facing.
Flutter has been around for a while, yet there are not sufficient resources for developers to solve common issues. But it gained a lot of attention when Google promoted it in the Google I/O conference in 2017.
The Flutter community is growing rapidly with regular meetups and conferences being held online. The biggest event Flutter Live happened in December 2018.
Xamarin has a huge community spread all over the world. There are many conferences being held for Xamarin-related talks, like Xamarin developer summit etc.
Being the oldest cross-platform mobile app development framework, Xamarin community has more community support from developers.
The Xamarin community is way bigger than Flutter, especially because Xamarin is more popular. The community is growing even faster now that Xamarin has been acquired by Microsoft. Flutter is still fairly new although community support is growing rapidly.
6. Testing Support
Developers have been performing various types of tests and documenting the outcomes for better feedback on the code. Today, we have a variety of superior quality frameworks for different technologies as per their requirements to conduct unit, integration and UI tests for their apps.
Flutter offers a rich set of testing features to test the apps at widget, unit, and integration level. Flutter comes with a cool widget testing feature to test the UI and run them at the speed of unit tests.
Xamarin supports all different types of testing in Visual Studio itself like Unit tests and UI tests. Also, it supports third party testing through frameworks like Appium independently or via native test frameworks like XCUITest or Expresso.
Xamarin unit testing can be set up for each individual platform project. On top of unit testing, Xamarin has dedicated support for UI testing, Xamarin.UITest API.
Additionally, it has its own cloud test environment to run tests.
Both Xamarin and Flutter have great support for testing. However, Flutter wins as it has widget testing support and ability to conduct tests at multiple levels.
7. DevOPs & CI/CD Support
Releasing mobile apps to the App Store or Play Store is a painful process. It involves the complex task of code signing and correct project configuration. When it comes to cross-platform mobile app development, it gets even more trickier.
Flutter has a strong command line interface. We can create a binary of the app by using the command line tools and following the instructions in Flutter documentation for building and releasing Android and iOS apps.
Flutter now has an official CI/CD solution. However, there are other cloud-based services that can be used for CI/CD for Flutter apps.
Xamarin built automation process heavily depends on Microsoft Visual Studio configuration, but there is also a CLI interface for App Center which is known as appcenter-cli to configure the builds from command line.
The App Center build service has solid documentation on how to build and distribute different platforms. Xamarin apps can be made on multiple CI/CD services, like App Center, Jenkins or TeamCity.
Flutter has a great build automation tooling and can be used to deploy apps from the command line. Xamarin also has a strong support for the CI/CD, but it’s all in the Microsoft bubble.
8. UI Components & Development API
To develop a great native app, the support of native component is a must. It is very important that the framework has an API to access the native modules without any hassles.
The Flutter framework is bundled with UI rendering components, device API access, navigation, testing, stateful management and loads of libraries.
This rich set of components removes the need to use third-party libraries. If you get the Flutter framework, it means you will have everything needed for developing mobile apps.
Flutter also has widgets for Material Design and Cupertino that allow developers to easily render the UI on both iOS and Android platform.
Being the oldest cross-platform SDK, Xamarin has solid documentation of its development API. Xamarin supports multiple platforms, like iOS, Android, Forms, macOS, watchOS, tvOS, etc, which in turn have lots of UI components and modules in place for developers to build on.
Xamarin also has documentation for developing individual components, like layout, buttons, pop ups, databases, etc.
With its rich set of documentation and a development API, Xamarin has come out a winner over Flutter in this category. Also, Xamarin supports more platform than Flutter.
Flutter still has a long way to go to allow developing complex UIs, animations and games.
9. App Size
App size is also considered while developing cross-platform apps. Let’s find out their app sizes to know better .
Flutter app binaries are usually bigger and the apps are bigger in size in comparison with native iOS & Android apps.
Flutter core engine takes up 2.7 MB in addition to the framework and app code, which makes app binaries a bit heavy in size.
Xamarin supports lots of platforms, yet the size of the binary is relatively small. However, when Xamarin apps are bundled for release, then the app size gets a bit bigger.
As cross-platform technologies, Flutter and Xamarin both produce big-sized apps, but the Xamarin binaries are smaller than Flutter binaries , so Xamarin is the winner.
10. Onboarding & Learning Curve
The process of setting up the developer machine to use the new framework takes time. It requires lots of configuration of software installations. The technology should have proper documentation to get users up and running.
The getting started guide for Flutter has detailed information on IDE setup and platform setup for both iOS and Android.
Flutter has a CLI tool called flutter doctor which guide developers through the setup and inspects all the tools to be installed and configured on the local machine. When the flutter doctor command satisfies its pre-requisites, one can carry on with creating new Flutter app.
There is a separate page on how to configure the editors to get going with Flutter. Once all the setup is done, we can create and run a new Flutter app from CLI easily.
As Xamarin configuration is heavily dependent on Visual Studio and the Xamarin SDK, the developers who are familiar with VS Code can pick up quickly.
The Xamarin getting started guide for iOS and Android explains the onboarding process for new developers. Xamarin requires separate configurations for iOS and Android- i.e Xamarin.iOS & Xamarin.Android.
When the developer is outside the Microsoft ecosystem, the learning curve is longer to get acquainted with Visual Studio and understanding the Xamarin SDK.
Xamarin has Xamarin university with loads of guides for smooth onboarding of new developers.
The Flutter getting started guide is much simpler than Xamarin’s as softwares required for onboarding are lightweight and easy to install. Also softwares are not dependent of any proprietary softwares.
Open-source frameworks are preferred choice for cross-platform app development.
Flutter is open source and developed openly. Flutter provides a big advantage to developers by giving greater control over the code for building apps.
Xamarin is also open-source. Although, Xamarin has some cool features, it is available for free with limitations. Xamarin is developed behind the doors, so you won’t get some native features, like 3D-touch, Force touch etc.
Flutter wins this category because of providing greater control to the developers.
12. Time to Market/ Code sharing
Time to Market/ Code-sharing is also an important aspect of judgement for cross-platform app development .
Let’s see their take on these-
Flutter enables lots of code sharing as Flutter uses its own UI components. Sometimes, the Flutter developers need to write native code too to support few more things, which can’t be done with Flutter.
Xamarin uses Xamarin.Forms to share code between multiple platforms. Approximately 96% of Xamarin code can be shared across platforms.
This code sharing includes business logic, Data logic and the network layer.
Xamarin wins in the code sharing because the time to market for Xamarin might be shorter due to this feature.
Ultimately, cross-platform app development is all about a better performing mobile app. So, the performance of the technology is of utmost importance while considering which to choose.
Let’s find out-
Flutter is claimed to have a much better performance than Xamarin apps because of Flutter’s Dart engine and hot reload feature.
Xamarin has a profiler which can report performance issues earlier. And it does not have a hot reload feature.
Flutter gives better performance than Xamarin because of its hot reload feature.
14. Native User Experience
Xamarin and Flutter apps are very native when compared to other cross-platform technologies. Flutter and Xamarin both produce apps with a look and feel close to native apps.
Flutter produces native apps
Xamarin too produces native looking apps.
Portability across various platforms is another major concern while developing a good performing mobile app.
Flutter is aimed at iOS and Android development. Flutter apps are not portable to the Windows Platform as approximately 98.5 % of Smartphones run either on Android or iOS.
Flutter is not compatible with 32 bit OS devices.
Xamarin’s bigger ecosystem gives it an advantage over Flutter, it is a one size fits all framework when you want to develop apps for Windows Mobile. Xamarin is aimed at Android, iOS, Windows platforms as well as macOS apps.
Flutter is not compatible with 32 bit OS devices, so if you’re planning to develop apps for the older phones such as the iPhone 5, Xamarin is a better choice.
Traditional mobile app development methods are slow and expensive because we had to develop a separate app for each platform with different development teams. Cross-platform app development is a smart way of developing mobile applications, where the applications are suitable to run on more than one platform. Flutter and Xamarin are two such cross-platform technologies which are helping the developers build less expensive , less time-consuming apps with greater ease while using them.
Many developers use to believe that Xamarin is the king of cross platform industry, but Flutter is expected to change the whole scenario with its smart flexibility, widget availability and IDE features.