Should you build desktop apps with Flutter?

03 Mar 2025

A Counter point

This is written as a response to an recent interesting article that argued that two main points, one of them is that Flutter "desktop" support is problematic due to its choice of using C++ instead of .NET as the language for writing the native portion of Flutter plugins. While I don't feel I'm qualified to address the specific issue of the Windows platform here as I've chosed to actively avoid using or developing for Windows for the last 25 years, I do want to cover a related question, should you even use Flutter to build "desktop" applications? Well my answer is no and if you want to know why I say that, read on...

Web apps FTW

In fact the above is actually an incomplete version of my answer, because I don't mean that you shouldn't specifically use Flutter to build desktop applications, but that you shouldn't build native desktop applications at all! Instead I think in 2025, the answer I think for all but the most niche use cases is to build "desktop" applicatons as web applications, using the web browser and not native SDKs as your host runtime.

But, I hear you say, I'm not just building a standard desktop application, I need to use Bluetooth or USB to connect to a device my application will support. Well good news! In 2025 you can make use of WebBLE, WebSerial, WebUSB and WebMIDI to connect your web application to a plethora of extenal devices. Admittedly most of these APIs will require you to use a Chromium based web browser (Chrome, Edge, Opera, Brave, etc) but as you can see there are plenty to choose from and there is hope that other browsers will implement more of these APIs as even after a decade of recalcitrance Firefox finally implemented WebMIDI support in version 108 leaving Safari as once again the outlier as the only major desktop browser not to support it. But even there, there may be hope for the future based on the EU's success in forcing Apple kicking and screaming from its nasty monopolistic practises to implement the USB-C standard in the last few years.

Despite my above recommendation, I still remain very happy that Flutter does provide me with the means to write Linux desktop applications and there remain as I said niche use cases for it, such as the Ubuntu OS installer that was recently rewritten in Flutter which definitely makes more sense to write as a native binary executable GUI application vs a web app.

My recommendation comes not just from some philosophical or theoretical position, as I recently shipped a small Flutter companion app for the picoTracker device as a Flutter web app. I actually first developed the remote UI app as a native Linux application, but I found that not only did most users prefer to have a web app over needing to install a native application (on whatever their choice of desktop OS was) but also the serial communication implementation in Chrome on Linux was actually more mature and stable then the Flutter plugin for the direct Linux serial APIs.

Shipping a web app also meant I avoided all the awful headaches associated with code signing and nightmarish dealing with app stores required to ship an application on MacOS and Windows and even the much smaller hassles for shipping for Ubuntu.

Finally with the new Dart JS interop in Flutter, you can call JS APIs directly from your Flutter web apps Dart code in a type safe manner with no need for JS wrappers! The Dart team already provides an automatically generated package for accessing all the standardised web API's but for thing like the WebSerial API which have yet to be adopted as a standard, you can easily write your own Dart code and I have article coming up to show you how to do just that, so stay tuned!

The end

What this is all boils down to, is that todays "desktop OS's" really should be considered as legacy for the vast majority of non technical users. For most people, mobile devices and thier respective OS's are the platform of choice for the computing needs and for the rest, the web platform of today is more than good enough to handle the vast majority of use cases. For the tiny niche that is left over, Flutter desktop is there if you really do need it.