A Comparison of Embedded UI Frameworks
UPDATED! I originally wrote this blog post in August of 2023 to help you identify the right framework for your next project. In preparing my talk for the upcoming Embedded World North America 2024 conference, during which I will explore this topic in detail, I have updated my original post. I've added the most current information on these frameworks, providing you with a handy resource encompassing the variety of viable options available today for embedded development. (If you're attending the show in Austin, I invite you to join me for my talk on Thursday, October 10 at 10:30 am.)
Most programming languages don't directly provide support for developing graphical user interfaces. It is typically done with external software that may be referred to as a library, toolkit or framework. Many such toolkits exist and are distinguished by a number of factors, most notably:
- What programming languages they directly support (e.g. C, C++, Python).
- What platforms they support (e.g. mobile, desktop, and embedded platforms such as Windows, Linux, macOS, iOS, and Android).
- Whether they also provide facilities beyond the user interface, like string handling, containers, file input/output, networking, etc.
- What type of license they are distributed under (e.g. open source/free software or commercial/proprietary).
The choice of which toolkit to use can be daunting. At ICS we have long relied on Qt, known for cross-platform compatibility and consistent user experience among other benefits. It is a great option for many projects, but there are some situations that warrant a different solution. As a result we also use a variety of other UI frameworks to implement applications with graphical user interfaces. Each has its pros and cons and the choice for a given application depends on many factors.
I thought you would find it helpful for me to compare the key features of some of the major UI frameworks or toolkits so you could use this information to inform your decision making. To reduce the scope of the comparison to a manageable list, I selected only frameworks that met the following criteria:
- Run on multiple platforms
- Support native development
- Support using compiled languages
- Actively being maintained
- Suitable for embedded development
I identified 15 frameworks that met these criteria, including Qt, Flutter and Slint. The table below, with frameworks presented alphabetically, summarizes their features.
Framework Comparison
Name | Platforms | Languages | License | Pros | Cons | Comments |
Crank Storyboard | Bare metal, various RTOS, VxWorks, Linux, macOS, Windows, Android. | C, C++ | Commercial | GUI builder. Lightweight (suitable for MCUs). | UI framework only. | Mainly used on MCU platforms. |
Dear ImGui | Platforms that support DirectX, Metal, OpenGL, or Vulkan. | C++ | MIT | Lightweight. Leverages GPU for rendering. | Small development team, incomplete documentation. | Primary use cases are games and other applications with a 3D pipeline. |
Embedded Wizard | OS independent (incl. bare metal) | Chora | Commercial and free | Suitable for microcontrollers. | Proprietary Chora language. | WYSIWYG front-end. |
emWin | MCUs (RTOS and bare metal) | C, C++ | Commercial | Commercially supported. AppWizard GUI builder. | Cost. Not a full cross-platform framework. | Mostly aimed at microcontrollers |
FLTK | X11, Windows, macOS. | C++ | LGPL | Lightweight, small, short learning curve. | UI framework only. Offers few widgets. Not native look and feel. | Mostly used on desktop platforms. |
Flutter | Android, iOS, Linux, macOS, Windows, web. | Dart | BSD | Simple, short learning curve. | Only directly supports the Dart programming language. | Developed by Google. |
GTK/gtkmm | X11, Wayland, Windows, macOS. | C, C++ | LGPL | Stable, widely used. | Lack of compatibility across major updates. | GTK uses C, gtmmm is the C++ interface. |
LVGL | Most MCUs and MPUs. | C | MIT | Free. Supports MCUs. | UI toolkit only. No GUI builder. Not commercially supported. | A common option for MCUs. |
MicroEJ | Many commercial boards/SOMs/MCU and MPUs. | C, Java | C, Java | C, Java | Cost. Large and complex. Mostly aimed at Java. | Also offer virtualization and cloud support. |
Qt | Android, iOS, Linux, macOS, Windows, and others. | C++, QML, Python | GPL, LGPL, and commercial | Full cross-platform toolkit, large user base, well documented. | Large and complex. Long learning curve. | Need to decide whether to use widgets or QML. |
SDL | Linux, Windows, macOS/iOS, Android. | C | ZLIB | Free. Simple API. | Not a full cross-platform framework. No commercial support. | Mostly used for games and multimedia applications. |
Slint | Windows, Linux, macOS, and some MCUs. | C++, Rust, JavaScript | GPL or commercial | Lightweight, can run on MCUs. | Relatively new with a small user base. Limited MCU support. | QML-like markup language. |
TouchGFX | STM32 Microcontrollers | C, C++ | Free, but proprietary | Free. Supported by STMicroelectronics. | Supported on STM32 platforms only. Source code not available. | Suitable for STM32 MCUs only. |
Unity | Windows, Linux, macOS, iOS, Android, and others. | C# | Commercial | 2D and 3D support on many platforms. Good documentation. | Closed source, commercial only. Only directly supports C# language (Mono on Linux). | Mostly targeted at game development. |
WxWidgets | Windows, macOS, Linux. | C++ | LGPL-like | Stable, free. Uses native widgets when available. | Widgets-only, best suited to desktop applications. | Formerly known as WxWindows. |
Conclusions
Choosing the right framework can go a long way toward ensuring the success of your project. Though some of the information I have presented is subjective and my list is not exhaustive, I hope it gives you some basis of comparison helpful when choosing the best toolkit for your project.