Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
M

MiniGUI

> 编程语言
Open source

A modern and mature cross-platform window system for embedded systems and smart IoT devices.

779 stars0 likes0 views
WebsiteGitHub

About

A modern and mature cross-platform window system for embedded systems and smart IoT devices.

MiniGUI

A modern and proven cross-platform window system for embedded systems or smart IoT devices.

TABLE OF CONTENTS

  • TABLE OF CONTENTS
  • INTRODUCTION
    • What's MiniGUI
    • HVML App Framework on MiniGUI
    • MiniGUI and HybridOS
    • Source Code Repositories
  • NEW FEATURES IN VERSION 5.0.x
    • Compositing Schema
    • New Main Window Types
    • Virtual Window
    • Other Enhancements
  • NEW FEATURES IN VERSION 4.0.x
  • NEW FEATURES IN VERSION 3.2.x
  • THE RUNTIME MODES OF MINIGUI
  • A BRIEF BUILDING INSTRUCTION
    • Building Whole MiniGUI
    • Building MiniGUI Core
    • Unit Tests
  • Othere Resources
    • MiniGUI Components
    • Open Source Apps Based-on MiniGUI
  • HISTORY
  • AUTHORS AND COPYING
    • Special Statement
    • Not Free for Commercial Use
  • A LITTLE FAQ

INTRODUCTION

What's MiniGUI

MiniGUI aims to provide a fast, stable, full-featured, and cross-platform windowing and GUI support system, which is especially fit for embedded systems or smart IoT devices based-on Linux/uClinux, eCos, and other traditional RTOSes, such as RT-Thread, FreeRTOS, RTEMS, VxWorks, ThreadX, Nucleus, pSOS, uC/OS-II, OSE, and others.

This is the source tree of MiniGUI Core, which provides the windowing and graphics interfaces as well as a lot of standard controls (toolkit).

MiniGUI is released under GPLv3 and the dual-licensing applies to commercial use. In December 1998, the initiator of FMSoft, [Vincent Wei], began to develop MiniGUI under the GNU General Public License (GPL). In September 2002, the core developers of MiniGUI founded [FMSoft] and started the commercial marketing with the free software. By now, FMSoft still continues to release MiniGUI as a free software project.

For the live demos, source tarballs, and cases of MiniGUI, you can refer to the following website:

HVML App Framework on MiniGUI

MiniGUI and its components provide a lot of controls/widgets to help your develop GUI apps in C/C++ programming language. However, alternatively, you can use the following software to develop your apps in an easy-to-use programming language [HVML].

  • [HVML] is a descriptive programming language proposed and designed by [Vincent Wei].
  • [PurC] is the prime interpreter of HVML written in C lauguage.
  • [xGUI Pro] is a full-featured HVML renderer based on the tailored WebKit engine.

In short, the above software suite provides an Electron-like solution that can help people develop cross-platform applications using web front-end technology. The difference is that the solution replaces JavaScript with HVML and Node.JS with PurC. It provides an entirely new application framework that isolates the interpreter and renderer from running in separate processes, which brings several benefits. It greatly reduces the size and resource consumption of the entire solution, improves the overall performance, promotes the interactive responsiveness, and provides a simpler mechanism to integrate existing C/C++ code modules.

MiniGUI and HybridOS

[HybridOS] is another large open source project initiated by FMSoft. It is an open source operating system designed for embedded/AIoT devices and cloud computing environment.

HybridOS provides the complete software stack and the app framework based on [HVML] for embedded systems. You can easily develop your products which has rich functions and excellent expressiveness by using HybridOS.

In practice, MiniGUI and the software which are used to integrated with GPU constitute the graphics stack of HybridOS.

HybridOS uses MiniGUI as the underlying windowing system, and the members of HybridOS project are now maintaining the whole graphics stack. The following chart shows the graphics stack of HybridOS:

…

As shown in the chart above, the HybridOS graphics stack consists of the following software:

  • libDRM provides some user land APIs for Linux Direct Rendering Infrastructure.
  • HBDDRMDrivers contains the drivers (user land drivers, not kernel drivers) for MiniGUI DRM engine. The drivers implement the basic hardware accelerated 2D graphics operations of various GPUs for MiniGUI.
  • Mesa-HBD is the Mesa derivative for HybridOS, while Mesa is the open source implementation of OpenGL and other graphics APIs, including OpenGL ES (versions 1, 2, 3), OpenCL, OpenMAX, and Vulkan. It contains the following components:
    • The implementation of OpenGL, OpenGL ES (v1, 2, 3), and other graphics APIs.
    • The EGL implementation for MiniGUI platform.
    • The graphics drivers for various GPUs and a software driver called swrast.
  • Cairo-HBD is the Cairo derivative for HybridOS. Cairo is a 2D vector graphics library for Gtk. We provide support for MiniGUI backend in hiCairo.

For more information about HybridOS, please refer to:

For more information about HVML, please refer to:

or

Source Code Repositories

FMSoft had created the public repositories for MiniGUI Core, MiniGUI components, HybridOS, and other open source apps on GitHub. You can visit them on:

We now maintain all documents about MiniGUI on the following public repo:

You can download the source code tarballs of MiniGUI Core, MiniGUI components, and the dependent libraries from the download zone of the site:

NEW FEATURES IN VERSION 5.0.x

In version 5.0.0, we introduced some exciting new features, and refactored a lot basic modules of MiniGUI Core.

Compositing Schema

In this version, we enhanced the MiniGUI-Processes runtime mode to support the compositing schema. Under compositing schema, regardless a main window is created by the server (mginit) or a client, it renders the content in a separate rendering buffer, and the server composites the contents from all visible main windows to the ultimate scan-out frame buffer according to the z-order information.

On the contrary, the legacy schema of MiniGUI-Processes uses the same frame buffer for all processes (and all main windows) in the system. So the legacy schema is also called the shared frame buffer schema.

By enabling the compositing schema, MiniGUI now can provide a better implementation for multi-process environment:

  • Easy to implement advanced user interfaces with rounded corners, alpha blending, blurring, and so on.
  • Easy to implement animations for switching among main windows.
  • Better security. One client created by different user cannot read/write contents in/to another windows owned by other clients.

New Main Window Types

In this version, we also enhanced the window manager of MiniGUI Core to support some special main window types.

Before 5.0.0, you can create a topmost main window with the style WS_EX_TOPMOST in order to show the main window above all normal main windows, and if you use MiniGUI-Processes runtime mode, the server (mginit) will always create global main windows, which are shown on other main windows created by clients.

Since 5.0.0, we introduce a concept of z-order levels for main windows. There are eight levels in MiniGUI from top to bottom:

  • The tooltip level (WS_EX_WINTYPE_TOOLTIP).
  • The system/global level (WS_EX_WINTYPE_GLOBAL).
  • The screen lock level (WS_EX_WINTYPE_SCREENLOCK).
  • The docker level (WS_EX_WINTYPE_DOCKER).
  • The higher level (WS_EX_WINTYPE_HIGHER).
  • The normal level (WS_EX_WINTYPE_NORMAL).
  • The launcher level (WS_EX_WINTYPE_LAUNCHER).
  • The desktop or wallpaper.

This enhancement allows us to create a special app which acts as screen lock, docker, or launcher.

Virtual Window

You know that we can post or send a message to other windows which may run in another thread under MiniGUI-Threads. The MiniGUI messaging functions such as PostMessage(), SendMessage(), SendNotifyMessage(), and the window callback procedure provide a flexible, efficient, safe, and flexible data transfer and synchronization mechanism for your multithreaded applications.

For example, you can send or post a message to a window from a general purpose thread which may download a file from a remote server under MiniGUI-Threads.

But can we use the MiniGUI messaging mechanism under MiniGUI-Processes and MiniGUI-Standalone runtime modes for multithreading purpose? For example, we may download a file in a general thread and inform a window when the file is ready.

Furthermore, if we want to use the MiniGUI messaging mechanism in a general thread to handle messages from other threads, how to do this?

The virtual window provides a solution for the requirements above. A virtual window is a special window object which does not have a visible window area. But after you create a virtual window in a different thread, you can use the MiniGUI messaging mechanism to post or send messages between the current main window thread and the new thread.

This enhancement provides a very useful facility to you in order to develop a well-designed multithreaded application.

Other Enhancements

We also tune or enhance the following modules of MiniGUI Core:

  • Enhanced timer support. MiniGUI now manages the timers per message thread. Under MiniGUI-Threads runtime mode, you can set up 32 (64 on 64-bit architecture) timers for each GUI threads. If you enabled virtual window, you can also do this for each message thread.
  • Support for listening a file descriptor as long as the underlying system has the select() system call for all runtime modes. Now you can call RegisterListenFD() to register a file descriptor to be listened, and handle MSG_FDEVENT in your window callback procedure to read/write from/to the file descriptor. Before this version, this feature only available for MiniGUI-Processes runtime mode.
  • Support for local data of windows. You can now set or retrieve a local data which is bound with a string name for a window. This will give you an easy-to-use interface to manage various data of a window.
  • Support for hardware cursors under compositing schema. MiniGUI now can utilize the hardware cursors if your graphics device support it. You can also load a cursor from a PNG file.
  • Support for loading icon from a bitmap file. You can now load an icon from a bitmap file such as a PNG file.
  • Unified the message hook functions for all runtime modes. MiniGUI now provides the consistent message hook functions for all runtime modes.
  • Use the update regions for cumulative updating the screen. This will eliminate the flickers due to the frequently redrawing of controls.

Obviously, this version brings the largest improvement since MiniGUI 3.0.0. We did our best to ensure backward compatibility of the existed APIs so that the old applications can smoothly migrate to the new version. However, there are still some slight changes you need to take care. For more information, please refer to RELEASE-NOTES.md file:

NEW FEATURES IN VERSION 4.0.x

In this version, we enhanced and tuned the APIs related to text rendering, in order to support [HybridOS Foundation Class Library].

  • Since 4.0.2, MiniGUI provides support for RTEMS, RT-Thread, and FreeRTOS.
  • MiniGUI now provides complete APIs for Unicode characters processing. These APIs conform to Unicode 12.0.
  • MiniGUI also provides new APIs to lay out, shape, and render glyphs from complex and mixed scripts, such as Arabic, Thai, and Indic.
  • We tuned and optimized MiniGUI's logical and

Issues· 14 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

C

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言