basysKom AnwendungsEntwicklung

State of Flutter on Embedded Linux
Essential Summary
Flutter, originally designed for mobile applications, has evolved to support a wide range of platforms, including embedded Linux. In this article, we explore why Flutter might be a viable choice for your embedded project, weigh its pros and cons, and compare it to Qt to see if it stands as a strong alternative.

Motivation

In 2020, we started exploring the possibility of running Flutter on embedded Linux. (here).
And today, we’d like to give you an update on the state of Flutter on embedded Linux. In this first part of a two-part article, we will cover fundamentals on how and why flutter might be the most reasonable choice for your embedded project.
In the upcoming part two, where we will take a more technical look on how to actually set up a Flutter application architecture that can talk with existing middleware and peripheral hardware, without compromising the cross-platform capabilities of Flutter.

What is Flutter?

Flutter is an open-source UI framework developed by Google, designed primarily for building applications that are compiled to native machine code (or JavaScript, in case of the web) across different platforms, including Android, iOS, web, and desktop.

Compiling to a platform native code is important because it ensures high performance by directly using the hardware’s processing power, which benefits cross-platform performance and results in smoother, more responsive applications.

Initially targeted at mobile platforms like Android and iOS, Flutter has expanded to support desktop and web applications. Built with the Dart programming language, Flutter offers a unified development experience with a strong emphasis on modern, declarative UI development.

State of Flutter on Embedded Linux 1 basysKom, HMI Dienstleistung, Qt, Cloud, Azure

Embedded Hardware Overview

What is embedded hardware? When we say embedded hardware, we refer to specialized systems that are designed to perform dedicated tasks, often with strict resource limitations. This hardware is found in a wide range of devices such as home appliances, industrial equipment, and automotive systems.

Like mobile but unlike desktop environments, embedded systems often use System on Chip (SoC) architectures, which integrate various components such as CPU, memory, and I/O onto a single chip, making them highly specialized and efficient. Common examples of SoCs that are used in embedded hardware include i.MX 6 and i.MX 8 chips, as well as other 32-bit and 64-bit embedded SoCs like the STM32 series and the Texas Instruments AM64x series.

We are looking at embedded hardware that runs with lightweight Linux distributions, such as Yocto or Buildroot, in contrast to the more resource-intensive operating systems found on desktop and mobile devices.

State of Flutter on Embedded Linux 2 basysKom, HMI Dienstleistung, Qt, Cloud, Azure
Hardware Plattforms of UX-Gruppe

Why Flutter for Embedded Hardware?

Flutter’s ability to deliver responsive user interfaces on different mobile platforms makes it also interesting for embedded hardware. Particularly in situations where an advanced mobile application is required and you want to leverage code and functionality of the embedded HMI to your mobile App. Given the right system architecture (which we will show in part two of this article) Flutter allows you to run your unmodified embedded HMI directly on a mobile device. This remarkably reduces development efforts and increases development speed compared with other solutions, like native mobile platform development.
Since we, as a Qt Service Partner, are traditionally using frameworks like Qt/QML and web technologies for embedded UI development, you may wonder why we show you Flutter as an alternative option. The reason is simple. We offer technology-agnostic consulting to our customers and while Qt/QML is a great fit in areas like Desktop and embedded HMI development, it does not provide the same level of build-in out-of-the-box support for mobile platforms that Flutter does.
On mobile platforms, Qt/QML sometimes lacks integrated support for native mobile features, requiring you to write Java or Objective C Code for features that Flutter inherently supports. Also, keeping track with the mobile platform evolution can sometimes be a hurdle with Qt.
Technology-agnostic means showing you the goods and the bads of an approach. Keep in mind that Flutter offers an unified and natural approach on mobile platforms, but it is this mobile origin that lets it fall behind when it comes to directly integrating with embedded hardware and (existing) middleware, such as GPIOs, specialized features and (existing) libraries. Especially comparing with Qt/QML.
This is mostly due to the point that, while a framework like Qt/QML is written in C++ and therefor naturally integrates with other C/C++ libraries, Flutter uses Dart and requires you to either provide hardware features via something called “Embedder” or via plugins that utilize the Dart:ffi C-Interface.
We will show you in part two how to turn run Flutter on embedded without compromising its cross-platform capabilities.

Licensing

Beside the technical points mentioned, it is important to also consider the licensing differences on Qt/QML and Flutter: Qt is available under GPL, LGPL, and commercial licenses. For pure embedded projects, Qt is typically either used under the LGPLv3 or the commercial license. The LGPLv3 license allows you to use the library in your application without mandating that you disclose your application’s source code, as long as you comply with its requirements. These requirements include (see 4.d.0) permitting users to modify or replace the LGPL-licensed library. You need to ensure your users can relink the library with your application. For mobile platforms, specifically iOS, these LGPLv3 obligations may show to be too impractical for most. Even though it is technical feasible, there is at least a financial barrier to be considered, as the users need access to macOS and development tools in order to be able to fullfil their right.
Effectively this means: If you were to use Qt under the LGPLv3 license for an iOS application, you would need to ensure that users can relink or replace Qt independently, which is generally complicated (while technically possible) due to iOS’s restrictive environment. Therefore, a commercial license for Qt becomes the more practical approach. Note that a commercial Qt license cannot soly restriced to a platform and you cannot mix open-source and commercial Qt. If you decide for a commercial approach, this means, at the time of writing this text, Qt may also charge a license fee per sold embedded device, as well as per developer year. Those are costs that should be considered when selecting a technology for an embedded HMI that shall also run on mobile platforms.
Flutter, on the other hand, is offered under a permissive open-source license (BSD 3-Clause), making it free to use for commercial projects. The permissive nature of this license provides significant development flexibility, allowing proprietary modifications and integration without the obligation to open-source the entire application. But keep in mind that a BSD 3-Clause license still does have some obligations, such as the requirement to include a copyright notice in distributions and the absence of liability and warranty assurances. But those requirements are much simpler and cheaper to fulfill than the demands of an LGPL on iOS.

What about Flock?

On October 27, 2024 the Flutter Foundation announced that it is forking Flutter due to limitations in labor and responsiveness within Google’s team. The fork, called Flock, aims at prioritizing fixes, features, and support that the Flutter team cannot currently address. Flock intends to bring faster reviews, facilitate contributor involvement, and enable community-led development without depending on Flutter’s timelines. When you read their blog article, you may wonder how this will effect Flutter on embedded?

The simple answer is, we can’t tell yet. One possible outcome is that forking Flutter to create Flock leads to faster development cycles, more community-driven features, and potentially less dependency on Google’s control over Flutter. For us as developers, this might mean choosing between different focuses, like Google’s roadmap versus Flock’s community priorities.

Historically, forks in the open source world are nothing unusual and they often showed that successful forks can push innovation and address user needs faster. However, they also bear the risk to fragment the developer ecosystem, sometimes leading to compatibility and support challenges. To discuss Flock, we will have to wait and see how it evolves in the coming months and years and see if it get’s enough momentum and community support to fly.

Comparing Flutter and Qt

TECHNOLOGY
MOBILE SUPPORT
DESKTOP SUPPORT
WEB SUPPORT
EMBEDDED SUPPORT
LICENSE
LTS
ECOSYSTEM (Marketplace/Package Management)
Tooling
Flutter
Strong
Depends on the Platform. Maintained, but no active development from Google.
✅ Multi-Window Support
✅ Integration in OS Notification System
✅ Clipboard support
✅ Native Dialog Support (Filebrowser)
✅ Out of Window drawing (i.e. dropdown overlays)
✅ Systemtray support
Strong
Depends on the Embedder. Adapting embedded hardware and middleware might be a challenge
BSD 3-Clause
❌ No LTS
No official commercial support
Strong, Commercial and open-source offerings in the ecosystem available. Several package management offerings available. Flutter may not deliver all features you need, where the Ecosystem can then provide those missing features.
Hot-Reload improves development speed

Good integration in Visual Studio Code
QML (Qt6)
For commercial non open-source projects, this requires a commercial license.

Requires writing specific code in Java / ObjectiveC to support advanced native features.
Strong
✅ (since Qt6.8) Multi-Window Support
❓ Integration in OS Notification System depends on OS
✅ Clipboard support
❓ Native Dialog Support (Filebrowser) depends on Qt configuration
✅ (since Qt6.8) Out of Window drawing (i.e. dropdown overlays)
✅ Systemtray support

Using Emscripten

WASM (commercial only)

limited

Strong
GPLv3 LGPLv3 Commercial
✅ 5 Years of Updates in LTS Versions. Commercial Support available.
Available Eco-System but not as strong and diverse compared to Flutter. Qt delivers a wide range of built in functionality (sometimes commercial).
Good integration in Qt-Creator, specific tooling and linting

Conclusion of Part One

When your project requires integrating both mobile and embedded systems into a cohesive solution, using Flutter might be a possible approach. This is because of the mobile application roots of Flutter and its permissive license, which can help to reduce development cost in the short-term and per-device cost in the long-term. In general Flutter’s cross-platform capabilities, unified codebase and strong ecosystem can simplify and speed up your development. Overall even for a pure embedded application that may never require a mobile app, it might be a reasonable choice to use Flutter, but that then depends highly on the individual technical requirements.

If you are unsure which framework works best for your case, feel welcome to contact us and get a first assessment from our experts. For those who are curious on the technical part, look for part two.

Picture of Jeremias Bosch

Jeremias Bosch

Jeremias Bosch consults in his position as Technical Project Manager our customers in building embedded HMI applications, as well as the implementation of next generation cloud projects. He is responsible for the system/software-architecture and the development within customer projects as well as the agile project management. He has over 12 years of experience in developing HMIs and Web Applications. He has delivered multiple large and medium scale Qt Quick and cloud applications in industries such as automotive, aerospace and manufacturing engineering. He holds a diploma of computer science from the University of Applied Sciences in Isny. Is a certifed SCRUM Master and Product Owner as well as a certifed Qt Developer.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Weitere Blogartikel

basysKom Newsletter

We collect only the data you enter in this form (no IP address or information that can be derived from it). The collected data is only used in order to send you our regular newsletters, from which you can unsubscribe at any point using the link at the bottom of each newsletter. We will retain this information until you ask us to delete it permanently. For more information about our privacy policy, read Privacy Policy