Luyi365/awesome-embedded
Luyi365/awesome-embedded has 228 GitHub stars and 17 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-13 07:39 UTC. Last push 2026-10-27.
嵌入式开源库速查表,快速定位所需功能。300+ libraries for embedded dev, modularly organized, covering the common ground.
Measured star growth
- in 24h
- +1
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.en.md
OriginalAwesome Embedded 
中文 | English
A carefully curated collection of open-source embedded code libraries, classified in detail by function and covering 💥 most development scenarios. Unlike most Awesome lists, it collects relevant repositories and records key usage notes for selected libraries. 📝
A good open-source project is the result of community effort. If anything below interests you, please leave a comment through Issues:
- Recommend a strong embedded open-source library, including code snippets;
- Write up your experience using a listed library, such as an introductory tutorial or hard-won pitfalls;
- Report documentation errors or share suggestions;
For classification details and other collections, see ✨ Additional Resources.
TODO
- Add a maker-project category
- Add a tools category
- Open up the repositories in the list that require access permissions
📚 Contents
Single-purpose
- Pin and Control Library
- Timer and Time Library
- Memory and File System Library
- Board-Level Bus Protocol Libraries
- Data Structure and Data Processing Libraries
- Communication Protocol and Format Parsing Library
- Logging and Terminal Interaction Library
- Validation, Security, Boot, and Update Library
- UI and Menu Library
- Kernel and Foundation Framework Library
- Exception Snapshot and Testing Libraries
- Algorithms and AI Libraries
Integrated-purpose
Other
Pin and Control Library
Buttons
- key_detect - Simple button-detection component that uses button registration and lets you set single-click/double-click/long-press properties for each button individually.
- key_module - Simple button-detection module that uses event callbacks and provides the other basic functions apart from matrix keys.
- FlexibleButton - Stable button-processing library that scans and processes all button states in one pass, with triggers for a variety of button events, and leaves notes on how to implement combination buttons and interrupt triggering.
- MultiButton - State-machine button library designed with an object-oriented approach, so that each button object is managed by its own data structure.
- cotKey - Listener-based button-recognition library that is more flexible than other button libraries, covering single click, double click, multiple click, short press, long press, and other requirements.
- key_board - Uses button registration and heap memory by default, scanning and processing all button states at once, and includes matrix-keypad and combination-button functionality.
- LwBTN - Professional button-event management library with rich configuration and comprehensive features.
LED
- cotLed - Lightweight LED control module capable of driving multiple LED mode states (blinking, breathing, custom, and so on).
- led_module - Simple LED display library built on object-oriented and simple-factory patterns, with no custom modes but with color attributes.
PID
- pid_temperature_control - PID temperature control; a solid example whose approach extends well to other domains.
CNC
- Grbl - An industry-renowned open-source CNC codebase used for laser cutters, automated handwriting machines, drilling machines, graffiti painters, and quirky plotters; a maker favorite and an industry standard.
- µCNC - General-purpose CNC firmware for microcontrollers that keeps its features compact and its components modular.
Timer and Time Library
Timers
- MultiTimer - Software-simulated timer module that replaces the conventional flag-checking approach, operating almost identically to a hardware timer.
- SmartTimer - A very practical timer scheduler for bare-metal systems. Besides basic polling callbacks, it can also set the number of polling iterations.
- microseconds - Microsecond-level timer library with blocking and non-blocking delays. It mainly abstracts the different clocks on the same chip, making it easier to switch the underlying timer.
- perf_counter - Based on the Cortex-M SysTick, it provides not only basic timer functions but also code-section cycle measurement and timing services, so it can serve as a functional extension of an ordinary clock.
Watchdogs
- LwWDG - Lightweight watchdog library aimed mainly at operating systems. It monitors multiple threads and resets the system when one fails.
Time-related
- LwDTC - Utility library for dates, times, and cron. Because Cron supports only numbers, rather than strings, parsing is faster.
Memory and File System Library
Memory Management
- memory - A minimalist memory management module that only provides memory allocation and release, with no other features.
- mem_malloc - Simple and practical memory management module that does not produce memory fragmentation.
- tlsf - Heap allocator using the TLSF algorithm. It supports dynamically adding and removing memory-pool regions, has $O(1)$ allocation complexity, and does not emphasize thread safety.
- LwMEM - Professional memory management library with C++-like wrapper functions. It permits fragmented memory use and emphasizes RTOS thread safety.
- jemalloc - A high-performance memory allocator suitable for large-scale memory allocation and release in multithreaded environments.
- LWMalloc - Lightweight dynamic memory allocator for Linux, designed to replace the default ptmalloc allocator with better performance and memory usage.
Read/Write Wrapper Layer
- flashMultipleErase - Emulates EEPROM with FLASH and uses sequential writing to achieve more storage cycles and extend storage life.
- eepromfs - Simple file-like data read/write library based on EEPROM. What it does is not a true file system; instead, it simulates data reads and writes as files.
- Dhara - NAND flash translation layer (FTL) for small microcontrollers. It is mainly used to manage FLASH read, write, and erase operations. It sits between the FLASH device and the file system layer.
- kFlashFile - Lightweight file-data storage solution based on NOR Flash, primarily for projects that require data to be preserved after power loss.
- esp_partition - Partition-table library from ESP that wraps SPI Flash read/write operations and allows flash access by block.
- NVS - Non-volatile storage library from ESP, primarily for storing key-value data in flash. Together with other ESP tools, it supports encryption, partition-image generation, and other functions.
- FlashStore - Uses A/B dual-page Flash storage with block-level access and power-loss protection; well suited to configuration parameters and infrequent updates.
File Systems
- FatFs - A renowned file system library that is very easy to port, supporting the exFAT file system, 64-bit LBA, and GPT. It can be configured with macros according to functionality and emphasizes thread safety.
- JesFs - Lightweight serial NOR flash file system designed for resource-constrained embedded systems. It is suitable for IoT use cases such as data collection, event logging, and firmware updates.
- RanFs - Lightweight file system module providing POSIX-compatible file operations and emphasizing efficiency and data reliability.
- littlefs - A safe file system designed for microprocessors, with power-loss protection, wear leveling, low resource consumption, and other features.
- SPIFFS - File system designed for low memory (<=128MB), using statically sized ram buffers and providing wear leveling and other functions.
- lwext4 - Provides an Ext2/3/4 file system for microcontrollers, with file lookup and power-loss resilience, but without wear leveling.
- UTFS - Tiny TAR-like embedded file system that aims to keep the storage layout from being broken as data changes; it has no directories, wear leveling, or journaling.
Board-Level Bus Protocol Libraries
UART
- LwOW - Professional 1-Wire protocol library that supports communication through UART or a single GPIO and provides thread-safe APIs.
- MUDLink - Elevates UART serial communication to a link/transport layer, with delivery guarantees, flow control, link-performance statistics, and more.
CDbus
- CDBUS - A simple, efficient fieldbus compatible with UART and RS-485 protocols and hardware. It introduces hardware packet segmentation and arbitration, allowing every node to send and receive packets freely.
Modbus
- freemodbus - Modbus protocol stack ported by armink, supporting both master and slave functionality.
- nanoMODBUS - A compact Modbus library that can be feature-trimmed as needed and is intended for resource-constrained environments.
I2C
- i2c_scanner - I2C device-scanning library that can scan the number and addresses of onboard I2C devices.
- i2cdevlib - Abstracts I2C devices in the form of C++ classes, aiming to simplify I2C device integration and porting across different platforms.
SPI
- SFUD - An open-source universal serial SPI Flash driver library that supports a range of Flash chips through device tables.
USB
- TinyUSB - An open-source cross-platform USB host/device stack for embedded systems. It is memory-safe, uses no dynamic allocation, is thread-safe, and defers all interrupt events for handling in non-ISR task functions.
- CherryUSB - USB host/device protocol stack for embedded systems (with USB IP). It is portable across platforms and suits chips that lack a built-in USB protocol stack.
Interboard Communication
- uart_stream - Serial data-stream processing library built on FreeRTOS and cJSON, with TX/RX buffering, framing, request-response, and more; suited to interboard communication.
- ESSL - ESP's serial slave link component, allowing a host to communicate with slaves through bus drivers and the corresponding protocol. In essence, it is MCU-to-MCU communication with an additional layer.
- SACP - Snapmaker's device data-communication protocol, implemented in C++ for communication among multiple devices in a complete machine.
Data Structure and Data Processing Libraries
Queues
- CBUF - C++-based macro implementation of a ring buffer that is simple and easy to use.
- sys/queue - Queue and linked-list header files used by Linux and FreeBSD. They are implemented entirely with macros and can link arbitrary types, such as structs.
- byte_queue - Ring queue supporting arbitrary types, wrapped with macros and simple to use.
- queue - General-purpose queue supporting arbitrary data types; simple and efficient to use.
- Ring-Buffer - A ring-buffer library suitable for programs without a specified storage size.
- wl_queue - Ring queue supporting arbitrary data types. It uses C overloading techniques and emphasizes thread safety.
- RingBuffer - Practical, fully featured ring-buffer library that uses heap-memory allocation.
- queue - Simple, highly extensible queue library that also supports zero-copy queue reads and writes (suitable for individual elements that use large amounts of memory, effectively reducing function execution time).
- QueueForMcu - Queue module for non-RTOS systems that dynamically creates queue objects and buffers.
- ConcurrentQueue - An industrial-grade lock-free queue based on C++; it requires no locks and places strong emphasis on thread safety.
- LwRB - Professional FIFO ring-buffer library with no dynamic memory allocation, suitable for MDA transfers and focused on thread and interrupt safety.
- fifofast - FIFO library optimized for MCUs, intended to reduce CPU and SRAM consumption as much as possible.
Streams
- xprintf - Embedded string functions that substitute for conventional printf functionality and can dynamically write strings to different peripherals. Their main purpose is to interact with multiple peripherals rather than a terminal.
- CMSIS-Stream - ARM-official data-stream processing component with graphical representations, suitable for professional projects and multi-device data-stream processing.
Data Structure Collections
- uthash - Provides data-structure libraries for hashes, lists, rings, and more; header-only.
Databases
- cotParam - Manages parameters in a table-driven manner, including default, minimum, and maximum values.
- EasyFlash - A simple Key-Value database that provides variable KV pairing, IAP data modification (for upgrades), log storage, and other functions.
- FlashDB - Provides both KV and TS databases; compared with EasyFlash, it focuses more on the database itself and provides fewer extra features.
- Nanopb - Lightweight Protobuf implementation supporting C. Protobuf is a data format developed by Google. It can be used for data storage and communication protocols and is independent of language and platform, allowing data communication across different devices and languages.
- ITTIA DB - A powerful real-time embedded database mainly for embedded systems and IoT devices, used for on-device monitoring, storage, and analysis of time-series data; it requires a commercial license.
- linq4c - Implements C# LINQ methods in C.
- SQLite - The most widely used industry-standard embedded database, using SQL syntax and disk files.
Compression Libraries
- lz4 - An extremely fast lossless compression-algorithm library, suitable for data compression during communication.
- heatshrink - Embedded decompression library with extremely low resource consumption. Related documentation is sparse.
- TJpgDec - JPEG image-decompression module optimized for embedded systems.
Communication Protocol and Format Parsing Library
Web-Server
- LightTPD - A lightweight, high-performance open-source Web server designed for high-concurrency, low-memory-use scenarios. It is more suitable for embedded devices than Apache or Nginx.
- Mongoose - An event-driven networking library for C / C++. Besides the basic protocol stack, it includes HTTP and MQTT service protocols, runs on bare metal and RTOS, and includes a UI builder. Commercial use has paid restrictions.
- Boa - A small open-source Web server for embedded applications. It has not been maintained since 2005 and has known security vulnerabilities, so it is not recommended.
Web-Plugin
- FastCGI - Improves traditional CGI performance and adds distributed-computing and multi-role features.
- libevent - Event-driven library for network servers, intended to replace event loops in event-driven network servers.
- rtty - Access a device terminal through the Web; suitable for embedded Linux and quite interesting.
- Nanomsg - A socket library for "scalability protocols" that provides several common communication patterns. Scalability protocols define how multiple application systems communicate to form a large distributed system.
- url - Simple URL parsing module that can parse information from different segments.
- tiny-curl - cURL library for embedded systems that supports only HTTP.
RPC
- ERPC - A remote-call framework built on the cJSON, libevent, and libuv open-source libraries, including state notification, data encryption, exception monitoring, and more.
- EmbedXrpc - RPC communication protocol that enables business logic without focusing on the protocol itself and includes a code-generation tool.
- erpc - NXP's open-source Remote Procedure Call (RPC) system for multi-chip embedded systems and heterogeneous multi-core SoCs.
TCP/IP
- lwIP - A small open-source TCP/IP stack and one of the most widely used embedded network stacks, present in most IoT systems.
- CycloneTCP - Dual IPv4/IPv6 stack for embedded applications that simplifies Internet deployment.
- onps - Domestic network protocol stack with the same design goal as Lwip, for resource-constrained microcontroller systems, providing a complete ethernet/ppp/tcp/ip protocol-family implementation. It comes with very detailed documentation, making it a great read for Chinese developers.
- wolfIP - A tiny TCP/IP stack with no dynamic memory allocation, intended as a better alternative to lwIP and designed to work seamlessly with the wolfSSL library.
- dyad - Socket-based asynchronous networking library. It supports only TCP communication, for creating small standalone device servers and adding network support to existing projects.
SSH
- tinyssh - A minimalist SSH server that implements part of SSHv2 and, for security reasons, does not accept environment-variable requests from clients.
- wolfSSH - Lightweight SSHv2 client and server library written in ANSI C.
HTTP
- libevhtp - Low-overhead HTTP library for embedded devices.
MQTT
- Paho MQTT - MQTT library for embedded platforms, containing three sublibraries: packet serialization, C clients, and C++ clients.
- mqttclient - A high-performance, highly stable cross-platform MQTT client with a concise API, seamless integration with the Mbed TLS library, and an online code-generation tool.
- Mosquitto - An open-source message broker from Eclipse, mainly used to implement MQTT. Its lightweight design and low resource usage make it suitable for enterprise IoT projects.
- wolfMQTT - Lightweight MQTT protocol client library supporting multiple platforms.
RF
- RadioLib - C++-based universal wireless communication library that integrates various modules and protocols (OOK, FSK, LoRa, and more) into one unified system.
Thread
- OpenThread - A Google product and an open-source implementation of the Thread system.
Bluetooth
- bluetooth_stack - An open-source low-power dual-mode Bluetooth protocol stack for learning; its author provides many tutorials.
- BTstack - A lightweight, open-source Bluetooth protocol stack designed for embedded systems and resource-constrained devices, suited to low-power and high-flexibility scenarios.
- NimBLE - Open-source Bluetooth protocol stack (including host and controller) separated from Apache Mynewt; it completely replaces the proprietary SoftDevice on Nordic chipsets.
GNSS
- LwGPS - Simple NMEA message parsing library with built-in support for four GPS messages: GPGGA, GPGSA, GPGSV, and GPRMC; custom messages are also supported.
- RTKLIB - Benchmark library in the RTK field, widely used commercially and by the community, and also a textbook-style reference manual.
- Ntrip - Simple Ntrip protocol library written in C++, including a rover (Client), central server (Caster), and reference station (CORS).
AT
- AT Command - Communication parsing module for AT commands, suited to Modem, WIFI modules, Bluetooth, and other scenarios that communicate through AT commands or ASCII command lines.
- Xradio_atcmd - AT command parsing library extracted from the Xradio SDK, with abundant command examples and based on RTOS.
Base64
- base64 - Minimalist base64 codec library containing just 2 functions: encode and decode.
- base64 - SIMD- and OpenMP-accelerated base64 codec library that uses no dynamic memory and emphasizes thread safety.
CSV
- MiniCSV - A minimalist CSV parser that handles multiple lines, escaped characters in escaped rows and columns, blank lines, rows with a variable number of columns, and Windows or Unix-style line endings.
- CRStrLib - Parses strings in csv and other formats, extracts values, and validates frame headers and trailers.
- fast-cpp-csv-parser - C++-based CSV parser that is small, easy to use, and implemented in a single header file.
INI
- libinimini - Minimalist ini parsing library for microcontrollers that works on strings, with controllable memory use.
- inih - INI parsing library suitable for embedded systems, with syntax and parsing options and comprehensive features.
- iniparser - INI parsing library written in C, portable to embedded systems and focused on thread safety, with a parsing style similar to cJSON.
TLV
- ITLV - Optimized TLV data format that is extremely simple and lightweight. Custom data formats can be built on it, and it includes CRC validation.
- TLV - Encoding implementation of the TLV format.
JSON
- cJSON - A lightweight JSON parser in ANSI C and a fairly native JSON parsing library.
- struct2json - Based on cJSON, an extremely convenient library for rapid conversion between C structures and JSON.
- cson - Based on cJSON, a json-struct model parsing tool running on the C platform. It makes JSON parsing more convenient.
- json - Simple and efficient C library for generating and parsing json, suitable for simple projects.
- JSMN - Minimalist JSON parser with zero-copy parsing and no parsing correction.
- lwjson - General JSON parser library optimized for embedded systems.
- MojoJson - General JSON parser library implemented with object-oriented ideas and providing a C version.
- LJSON - Claimed to be the fastest JSON parser library, with extremely powerful features covering nearly all JSON parsing needs.
- json-parser - Simple, standard, practical JSON library for parsing and generation.
- Frozen - JSON parsing and generation library with a scanf/printf-like interface, including a base64 encoder and binary data decoder.
- sj.h - Minimalist JSON parsing library in C using a zero-copy strategy that parses the original data directly.
XML
- simple_xml - XML parsing library with complete functionality and bidirectional parsing support.
- TinyXML-2 - XML parsing library based on C++. It uses a document object model (DOM) and can conveniently convert between XML and C++ objects.
TOML
- TOML - Data markup format that is more extensible than INI and lacks the deeply nested JSON and YAML indentation syntax; it is not widely known.
Other Formats
- LwPKT - General packet protocol library with variable data lengths and theoretically unlimited packet length. It allows multiple annotations using sender and receiver addresses on a network and includes CRC validation.
- xpack - Converts between C++ structures and JSON/XML/YAML/BSON/MySQL/SQLite; header-only.
- Uart_Transfer_BIN_to_exFlash - Adds frame attributes to serial communication, enabling convenient and reliable data transfer to Flash.
Logging and Terminal Interaction Library
LOG Logging
- dbuglib - Compact logging library that only provides output display and can adjust log levels to filter logs at specified levels, equivalent to the printf functionality that generic SDKs include.
- log.c - A minimalist logging library that only provides output display and recording. It is based on the C99 standard, so you need to redirect the output yourself when using it on embedded systems.
- log - Compact logging module whose output includes the time, log type, content, file name, line number, function name, and other information.
- alog - Streamlined output logging component with color and mutex locking.
- LwPRINTF - Safe, concise standard-output utility library that allows multiple output streams to be redirected; all APIs are reentrant.
- EasyLogger - A relatively comprehensive logging library supporting dynamic filtering and color selection. It emphasizes thread safety and supports asynchronous and buffered output modes.
- zlog - A pure C logging function library that is highly reliable, high-performance, thread-safe, flexible, and conceptually clear; it does not support content filtering or parsing.
Terminal Interaction
- cmd-parser - Minimalist command-parsing library that triggers functions through strings, which is a pretty interesting approach.
- LwSHELL - Lightweight shell library that is simple and easy to use and includes command descriptions.
- debugcmd - A feature-complete command-line parsing library providing Tab completion, help viewing, subcommand registration, and other functions.
- Argtable3 - Standardized command-line parsing library for custom operation commands that follows the POSIX interface.
- nr_micro_shell - Standard command-line interaction library that provides Tab command completion and command history lookup, with native support for ENV tools.
- letter shell - A powerful embedded command-line interaction library providing nearly all shell functions and allowing functions to be executed directly through function addresses.
- Xradio_console - Console library extracted from Allwinner's XR806 chip. Its commands use a hierarchical structure, making it suitable when there are many commands; it is based on RTOS.
- easyShell - Simple and easy-to-use microcontroller shell that supports Tab completion.
Validation, Security, Boot, and Update Library
Validation and Security
- crc-lib-c - Minimalist CRC library implementing 21 commonly used CRC parameter models, with no extensions.
- tiny-AES-c - A compact, portable AES library providing ECB, CTR, and CBC encryption modes.
- key - Minimalist encryption algorithm used with keys. It is single-purpose but practical, and suitable for network encryption and similar applications.
- wolfCrypt - Lightweight cryptographic library from wolfSSL that supports many popular algorithms and ciphers, suitable for enterprise projects.
- wolfSSL - A lightweight, portable SSL/TLS library powered by the wolfCrypt cryptography library, aimed at IoT, embedded, and RTOS environments.
- Mbed TLS - TrustedFirmware project and a widely used SSL/TLS library in the industry.
- wolfHSM - A client-server framework for hardware cryptography, nonvolatile memory, and secure processing. Originally an HSM core for automotive applications, it now suits any trusted environment.
- wolfTPM - A portable TPM stack that provides wrapper interfaces to simplify key operations and supports bare metal, RTOS, Linux, Windows, and other platforms.
- wolfSentry - A dynamic intrusion detection and prevention system (IDPS): an embedded-ready firewall engine centered on monitoring, logging, pattern matching, and notification.
Boot and Update
- Tiny Bootloader - Simple bootloader for 8-bit and 32-bit microcontrollers that uses very few resources and supports multiple bus communication methods.
- OpenBLT - A well-known microcontroller bootloader library supporting 8-, 16-, and 32-bit microcontrollers.
- wolfBoot - Secure bootloader solution for 32-bit microcontrollers, supporting firmware authentication and firmware update mechanisms.
- mOTA - Update component designed for 32-bit MCUs, transferred through the YModem-1K protocol.
- MicorBoot - Bootloader module optimized for embedded microcontroller-device updates, providing power-failure protection, resumable transfers, and more.
- MCUboot - TrustedFirmware project: a general secure bootloader for 32-bit microcontrollers that is independent of specific systems and hardware.
UI and Menu Library
HMI
- tslib - Linux-based resistive touchscreen calibration algorithm library, widely used.
- tslib_for_mcu - A resistive touchscreen calibration library trimmed down from tslib, for microcontrollers.
Monochrome
- ECBM_GUI - A very basic monochrome GUI library that implements GUI functionality solely by storing screen content in an internal buffer. It suits small hobby projects.
- SimpleGUI - GUI library designed for monochrome displays that provides simple drawing capabilities. It suits low-pixel monochrome dot-matrix screens.
- oledlib - An open-source OLED graphics library with some graphics suitable for screen savers.
- U8g2 - Monochrome display library that provides support for various controllers and basic graphics drawing.
- MonoGUI - Specialized GUI system for small electronic devices with monochrome screens, offering comprehensive features and an input method. It suits devices such as electronic dictionaries and label printers.
- WouoUI - Inspired by Zhihui Jun's not-yet-open-source MonoUI, it implements a smooth UltraLink-like interface, uses an encoder as the controller, and has a particularly smooth and attractive upgraded version.
- astra UI - C++-based multi-level OLED menu UI with smooth transition animations.
- GLCD - Graphical LCD library for microcontroller-based embedded systems, including hardware drivers, text, and basic graphics drawing.
Color
- GuiLite - An ultra-lightweight GUI library that supports multiple platforms and third-party libraries.
- Olive.c - Simple 2D graphics library for C that draws only with canvas features.
- microui - A tiny, portable UI library that uses very little memory and is suitable for any rendering system that can draw rectangles and text.
- LingLongGUI - Efficient GUI generation library with a graphical interface editor for conveniently generating code.
- LingDongGUI - GUI library that further encapsulates Arm-2D, aiming to improve ease of use while also supporting native APIs.
- AAGUI - Cross-platform, general-purpose GUI that aims to enable Android-like advanced UI development in embedded systems. It supports semi-declarative (JSON) programming and is suitable for projects similar to mobile applications.
- GT-HMI - UI library from Shanghai Genitop intended for Chinese users, with multiple languages and font libraries, a simulator, and PC-side tools. It can be used with both RTOS and bare metal, making it suitable for practical product-level projects.
- LVGL - A lightweight general-purpose graphics library that is open source, free, and has almost everything needed for a GUI. It suits project-level devices.
- AWTK - ZLG's GUI graphics library, open source and free.
- TouchGFX - STM32's GUI graphics library with powerful features and graphical editing software, generally suitable only for STM32 development.
- GUIX - GUI graphics library provided by Azure RTOS; it is mature, convenient to develop with, open source, and free.
- emWin - Also known as uCGUI, it is a GUI graphics library from Segger that can be licensed for use with chips from many well-known manufacturers.
- Embedded Wizard GUI - A very powerful GUI graphics library, but it is paid. It comes with a graphical editor.
- Qt for MCU - GUI graphics library from QT, suitable for developers with QT experience, and requires payment.
- μGFX - Lightweight UI library for touchscreens that focuses on performance and is free for non-commercial use.
- MiniGUI - Multi-platform, highly customizable UI library that can be used with chips of different performance levels; it is suitable for mobile devices and industrial fields, and is free for non-commercial use.
- μGUI - An open-source minimalist graphics library that is platform-independent and consists of only one source file.
- Aeropoint GUI - Creates GUIs using a PPT-based approach, requires payment, and has no trial version.
- Clay - High-performance 2D UI layout library that provides responsive layout capabilities and is not tied to any specific renderer.
- Nuklear - Dependency-free graphical user interface toolkit that builds graphics through input states and drawing commands, suitable for responsive applications.
- LinaVG - Rendering library for 2D vector graphics.
- BlurHash - Open-source image placeholder algorithm and implementation that can display a wireframe and thumbnail before images are loaded; it may be useful in embedded applications.
- Rawdraw - Cross-platform, dependency-free UI drawing system with multiple backends to choose from, such as OpenGL and software rasterization.
- TinyGL - A small implementation of OpenGL for embedded systems. It simplifies complex interfaces into forms that are easier to understand and use.
- foolrenderer - Software renderer implemented in C that does not depend on graphics libraries. In only a few thousand lines of code, it implements a set of OpenGL-like basic graphics features and real-time rendering techniques for game development, such as shadows, tangent-space normal mapping, and physically based material systems.
- EmberGL - OpenGL-like real-time 2D / 3D raster rendering library for MCU.
- Cairo - A 2D graphics library that supports multiple outputs and provides PostScript- and PDF-like drawing methods. It is primarily intended for PCs but can also be ported to embedded chips.
Acceleration
- Arm-2D - 2D graphics acceleration library optimized for Cortex-M processors, positioned between GUI libraries and the driver layer.
- GUIslice - A simple, easy-to-use open-source GUI framework with a hacker style, no dynamic memory allocation, and a layout PC-side tool.
Graphics
- qrencode - QR code generation library suitable for microcontrollers.
- QR Code generator library - General-purpose QR code generation library containing versions for multiple languages, intended to achieve better performance with less code.
- QRCode - QR code generation library based on QR Code generator library, optimized for systems with constrained processors and memory, and supporting all specifications from Version 1 through Version 40.
Glyphs
- MCUFont - Library dedicated to fonts, implementing font compression, decompression, and text rendering (adjustment).
- Unicorn - C99-based Unicode encoding and decoding library that provides basic algorithms and functionality for this encoding.
Menu Frameworks
- zBitsView - A virtual multi-level menu that exists only in the logic layer and is unrelated to whether a screen is present.
- emenu - An unusual menu framework whose menu structure is reflected directly in the code.
- Menu - A simple and practical menu implementation. Its architecture is not very well decoupled, but it suits students who want to learn while using it in projects.
- cotMenu - Implements multi-level deep menus with linked lists, equivalent to the display logic layer and completely decoupled from keys and displays.
- MiaoUI - OLED menu UI framework based on U8g2, supporting list and icon menus, nonlinear animations, task pop-ups, and other features.
- MultMenu - Combination of multi-level menus and a monochrome OLED nonlinear animation library; it is simple and convenient to port and suitable for maker projects with similar requirements.
- SMF - C++-based menu framework providing multi-level menus and menu objects, suitable for product-level projects.
- PageManager - C++-based page lifecycle management library providing complete page scheduling capabilities, suitable for product-level projects.
Kernel and Foundation Framework Library
Events
- cpost - An ultra-lightweight context-switching and task-decoupling library that uses event dispatching and is suitable for bare-metal systems.
- LwEVT - Professional event-module library with optional custom data types and attached specified functions; it can be understood as a combination of events and messages, handling event dispatching and callbacks.
Messages
- YAMI4 - Messaging library designed for distributed systems, with particular attention to control and monitoring systems.
- ZeroMQ - A high-performance asynchronous messaging library intended for distributed or concurrent applications.
- CDIPC - An inter-process communication (IPC) mechanism and library suitable for coordinating perception, control drivers, and algorithms in real-time systems.
Pipes
- readerwriterqueue - C++ single-producer, single-consumer lock-free queue. It serves the same purpose as a pipe framework, is fast and easy to use, and emphasizes thread safety without locks.
Mailboxes
- DataCenter - C++ message publish-subscribe framework that provides complete mailbox services and is suitable for project-level engineering.
Thread Management
- C Thread Pool - Lightweight thread-pool library built on pthread for managing thread creation and lifecycles, solving the overhead caused by frequent thread creation and destruction.
Driver Frameworks
- initcall - Extracts the RT-Thread initialization framework so initialization functions get registered right at link time.
- platform_dev - Simplified driver framework modeled on Linux. Its design does not use dynamic memory allocation, making it suitable for chips with limited resources.
- c-periphery - Linux-based hardware peripheral abstraction-layer template.
Sensor Frameworks
- senser_algorithm - Sensor-data processing framework for RTOS. (pending release)
Module Frameworks
- RIL - Wireless communication module (GSM/GPRS/CatM1/NB-Iot) management software developed specifically for embedded platforms.
State Machines
- EFSMC - An event-driven finite state machine that avoids naming conflicts through careful design. It is simple, convenient, and standardized to use.
- signals_slots - A lightweight signal-and-slot framework that simplifies event-driven programming.
- UML State Machine in C - Multi-platform, lightweight state-machine framework supporting finite state machines and hierarchical state machines, with logging functionality.
Dynamic Loading
- dynamic_loader - Dynamic-loading function library trimmed from the libdl source code of RT-Thread. It is not coupled to the original OS and can be used on bare metal.
Exception Snapshot and Testing Libraries
Coredump
- CmBacktrace - A renowned error-tracing library for ARM Cortex-M series MCUs; pretty much any project that's even a little complex adds this library.
Exception Handling
- try - C-style implementation of try-catch exception handling.
- CException - Simple exception handling for C, faster than the standard library and portable to any platform supporting setjmp/longjmp.
- MLA - Small, easy-to-use memory leak analysis library that records allocation counts.
Testing
- MinUnit - Minimalist unit testing framework in a single header file, with no memory allocation.
- CuTest - Unit testing framework that uses dynamic memory allocation.
- cmockery - Lightweight C unit testing framework based on the standard C library, with support for function stubbing and preset return values.
- EEMBC - Provides many testing libraries for the embedded field, mainly for chip performance testing; an industry standard suitable for enterprise-level project deployment.
- Unity - Unit testing framework written in C and focused on embedded toolchains.
- greatest - A compact C testing system that uses instrumentation/coverage testing, and can run with other programs.
- Catch2 - A popular C++ unit testing framework, designed to be lightweight, easy to use, and dependency-free.
Algorithms and AI Libraries
Arithmetic
- LibBF - High-precision floating-point arithmetic library that provides values with greater precision than standard floating-point types such as float and double, with flexible control over precision and rounding modes.
Fundamental Algorithms
- FXT - A collection of C++ algorithms focused on bit manipulation, combinatorics, fast transforms, and more.
- xxHash - An extremely fast non-cryptographic hash algorithm that works under RAM and speed constraints and suits more demanding use cases.
- Terathon Math Library - A C++ mathematics library containing classes for vectors, matrices, quaternions, and projective geometric algebra elements. It can be used in graphics, AI, games, and related fields.
AI Frameworks
- TinyMaix - AI neural-network inference framework designed for resource-constrained microcontrollers.
- tinymnist - A two-layer miniature neural network implemented in C, suitable for learning and basic embedded applications.
- Genann - A minimal, thoroughly tested neural-network library for training and using feedforward artificial neural networks (ANNs) in C.
- uTensor - An extremely lightweight machine-learning inference framework built on TensorFlow that imports trained models as C++ files.
- NNoM - Framework for running neural networks on MCUs. It is similar to TinyMaix but offers more features.
- Paddle Lite - High-performance, lightweight, flexible, and extensible deep-learning inference framework targeting mobile, embedded, edge, and other hardware platforms.
- TVM - Built-in deep-learning compiler for CPU, GPU, ARM, and many other hardware architectures, offering a one-stop service.
- ncnn - A high-performance neural-network forward-computation framework highly optimized for mobile platforms. It supports most common CNN networks and can be deployed on some embedded chips.
- MNN - Lightweight deep neural-network engine that supports deep-learning inference and training on embedded devices with POSIX interfaces.
- TensorFlow Lite - A well-known machine-learning library for deploying models to mobile devices, microcontrollers, and other edge devices for on-device machine learning.
- Mediapipe - Google's open-source cross-platform machine-learning framework. It provides tools that can be deployed to mobile, web, PC, and IoT devices, including models for object detection, image classification, face recognition, gesture recognition, text classification, language detection, and audio classification.
- Edge Impulse - A popular embedded machine-learning development platform for data processing and analysis, model training, and model deployment.
- YMCV - Miniature computer-vision library written purely in C, with no dependencies, cross-platform support, and easy feature trimming.
- NeuralNetwork - Neural-network library for MCUs that runs RNN, GRU, and LSTM architectures with very few resources and supports bare metal and some operating systems.
AI Models and Algorithms
- Knn - A KNN algorithm written in C with no optimizations and a bundled training set, good for learning purposes.
- NanoDet-Plus - Super-fast, high-precision, lightweight anchor-free object-detection model implemented on a mobile AI framework.
- pico - Lightweight face-recognition algorithm based on pixel-intensity comparisons for object detection, suitable for single-purpose, low-traffic scenarios.
System and Thread Library
Time-Slice Scheduling Systems
- ztask - The most basic time-slice scheduler, with only five APIs; the kind of framework you could write on the fly.
- ETP - Time-slice polling framework intended to decouple tasks with different time slices in the main polling loop; it is the most basic polling framework.
- cotTask - Polling framework built on time slices that handles initialization, startup, and task-scheduling management, with the ability to set task priorities.
- CodeBrick - Time-slice polling framework that includes many practical modules, has no driver layer, and is simple and easy to use. It fits modern project development philosophy and is a bare-metal framework I really like.
- vkern - Task scheduling kernel written by imitating the RTOS architecture; its principle is still to use timers to create a foreground-background system.
- cola_os - Foreground-background system suitable for bare metal that has power-consumption requirements, limited CPU performance, and somewhat complex functionality.
- JxOS - Foreground-background system with no complex registration or function-pointer structures, providing system kernel functions: tasks, events, messages, bulletin boards, mailboxes, pipes, registration, memory allocation, and more.
- EventOS - Event-driven embedded system that provides kernel functions and more.
- BabyOS - Registration-service framework for bare-metal MCU projects. It manages functional modules and peripheral drivers, has very clear code layering and standards, RTT-like "MenuConfig" terminal configuration, and PC simulation.
Quasi-Real-Time Systems
- cotOs - Simple query-based cooperative multitasking system that does not require timers for task switching; it creates tasks just like an RTOS does, but provides no other functions. I really like it, and it feels absolutely cool.
- BasicOS - An extremely simple cooperative system in which all tasks share one task stack, including simple kernel functional components and more.
- TaskScheduler - Cooperative multitasking framework with preemptive programming, but without concerns about concurrent-processing safety. It supports various configurations of task execution parameters.
- QuarkTS - Event-driven multitasking scheduling system that avoids concurrency pitfalls (resource sharing, race conditions, deadlocks, and so on) and provides complete kernel functions, complies with multiple industry standards, and is suitable for basic enterprise projects.
- VSF - An event-driven preemptive multitasking framework that includes a kernel and commonly used components, suitable for enterprise-level projects.
RTOS
- KLite - A very concise and easy-to-use RTOS with the most basic practical kernel functions. It is suitable for simple RTOS projects that need rapid deployment.
- FreeRTOS - An OS used by many small vendors, with abundant online materials. It is fairly conventional and suitable for a basic project preparing to adopt an RTOS.
- uC/OS - Relatively popular OS in the early days. Its features are similar to FreeRTOS, but it has somewhat stronger functionality.
- RT-Thread - A shining star among domestic products, an excellent and practical RTOS with multiple components and extra functions. Its detailed documentation makes it very suitable for an OS project starting from scratch.
- RTX - ARM's RTOS, with strong compatibility with Keil.
- NuttX - Operating system emphasizing standard compatibility and compact packaging that follows the POSIX standard and ANSI standards.
- embOS - SEGGER's RTOS, free for non-commercial use.
- Azure RTOS - Microsoft's RTOS, with a rich set of components.
- Zephyr - An RTOS maintained by the Linux Foundation, well suited to learning Linux development philosophy.
- At-RTOS - A user-friendly real-time operating system for embedded controllers, providing only basic kernel functions.
- Embox - Multitasking operating system characterized by supporting Linux open-source components without using Linux itself. This open-source system aims to make Linux software usable everywhere.
- YiYiYa OS - Full-featured OS with an architecture designed in layers from top to bottom. It can almost be regarded as a simplified Android system, suitable for phone-like products.
- LK - Short for Little Kernel, a tiny embedded system whose BootLoader is particularly well known and used in native Android systems.
- SKRTOS_sparrow - Ultra-small system of only a few hundred lines that implements basic scheduling and IPC mechanisms; some call it a children's version of FreeRTOS.
- CosyOS - Operating system with zero interrupt latency that can maintain real-time performance without globally disabling interrupts, including many innovative and practical kernel functions.
- scmRTOS - Lightweight RTOS written in C++, providing only the most basic kernel functions such as scheduling and messages.
- MuditaOS - Mobile operating system built on FreeRTOS, optimized specifically for E-Ink displays.
- egos-2000 - A minimalist OS implemented in just 2000 lines of code, covering core functions such as thread control, memory management, a file system, and bus IO, with detailed tutorials aimed at helping students understand how systems work.
- seL4 - System kernel built for high-security, high-reliability domains, providing fine-grained access control, virtualization, and fast IPC.
- AkiraOS - Embedded platform built on Zephyr with modularity and security at its core, supporting C, Rust, or Python. It provides a WebAssembly (WASM) runtime and container technology, giving MCUs a phone-style app ecosystem.
IoT-RTOS
- Contiki-NG - A multitasking IoT operating system maintained by the authors of uIP and LwIP. It focuses on reliable, secure low-power communication and standard Internet protocols.
- Mbed OS - Easy-to-use IoT operating system from Arm.
- Huawei LiteOS - Lightweight IoT operating system from Huawei for the IoT domain.
- Xiaomi Vela - IoT operating system from Xiaomi, built on the NuttX kernel at its foundation.
- AliOS Things - Highly scalable IoT operating system from Alibaba for the IoT domain.
- TencentOS Tiny - A real-time operating system developed by Tencent for the IoT domain.
- OneOS - Lightweight operating system introduced by China Mobile for the IoT domain, featuring configurability, cross-platform support, low power consumption, and high security. It supports mainstream chip architectures such as ARM Cortex-M/A, MIPS, and RISC-V; is compatible with standard interfaces such as POSIX and CMSIS; and supports JavaScript and MicroPython development.
- LuatOS - A Lua script runtime framework for embedded systems, with the functional scope of an operating system.
- Lua-RTOS-ESP32 - A real-time operating system supporting a Lua interpreter, providing all Lua-required resources, basic modules, and middleware, and portable to other 32-bit platforms.
- Apache Mynewt OS - Apache OS designed for low-power wireless devices, with built-in Bluetooth and IEEE protocol stacks, ready to use out of the box.
- Mongoose OS - IoT firmware development framework supporting C/JavaScript development, with good support for remote management and upgrades. The open-source edition has limited functionality.
- MicroPythonOS - Lightweight, multifunctional operating system built with MicroPython, designed for microcontrollers such as ESP32 and desktop systems. It provides a modern Android-like touch interface, an app store, OTA, and more.
- RIOT - Security-focused IoT system supporting 8/16/32-bit MCUs. Its design principles are low power consumption, low resource usage, and modularity, and it also provides a wide range of peripheral drivers and a full network protocol stack.
ROS
- ROS - A well-known open-source robot operating system in the industry that implements a complete set of software libraries and tools.
- AimRT - A runtime development framework built with Modern C++ for modern robotics. It provides comprehensive plugin development interfaces, is highly extensible, and compatible with other ROS ecosystems.
Unix
- NetBSD/evbarm - A not-so-famous minimalist Unix system that is nonetheless fast, secure, stable, and highly portable, with clean code and tidy design.
Module Collection Packages
- ToolKit - A small embedded toolkit providing a circular queue, software timer, and event set, with very clear documentation.
- lwUTIL - Practical toolkit containing value operations, endian storage, bit operations, ASCII conversion, and more.
- sc - A standalone, high-performance toolkit with a small memory footprint, mainly providing data-structure functionality.
- cotUtils - General C extension library, including multiple containers (queues, stacks, doubly-linked lists, dynamic arrays), serializable/deserializable structures, the PP library (multifunction macros), and more.
- mr-library - Lightweight embedded framework providing standardized driver interfaces and simple kernel-function components; a top choice for ordinary vendor-level projects.
- Zorb Framework - A lightweight embedded framework with basic kernel functions, all independently integrated for convenient trimming.
- Gear-Lib - A set of general C foundational libraries implemented entirely in POSIX C for cross-platform compatibility with Linux, Windows, Android, and iOS, including data structures, async operations, I/O, state machines, and dynamic loading.
- c-algorithms - Provides a collection of common algorithms and data structures to make up for missing standard-library facilities, and compiles much smaller than the C standard library.
- klib - An independent, lightweight C library offering a variety of foundational algorithms, data structures, parsers, and more.
- AMetal - A software package from ZLG that covers various types of peripherals and provides a unified abstraction-layer interface. The code is somewhat redundant, but its coverage of types is comprehensive.
- eLab - Integrated development platform containing most packages needed for embedded systems, with particular emphasis on cross-platform development and PC simulation; it is especially suited to projects with standardized development processes.
- TheAlgorithms - The open-source organization TheAlgorithms maintains a rich collection of foundational algorithms, data structures, machine-learning libraries, and versions in popular languages.
- simpostOS - A design methodology and a collection of software components and services. It modularizes all functions and greatly improves reuse. Written in modern C++, it is not suitable for beginners.
- PetiteDrv - General SDK library based on layered abstraction to decouple functions without complex code; suitable for small-company, small-project development.
- varch - An embedded C module library with commonly used algorithms, data structures (containers), parsers, a standalone C std library, and utilities. Each library can be used independently and is simple and efficient.
- ctool - Common tools usually absent from ordinary libraries, including variadic arguments, dates, and memory testing.
- Generic_MCU_Software_Infrastructure - Provides the necessary software infrastructure, services, and macros for high-level abstract concepts and paradigms.
- appkit - C++ library for Linux application development, including common modules such as thread management, timers, file I/O, and serial communication.
- GLib - The core GTK library, offering many functions including data structures, type conversion, string utilities, file operations, and main-loop abstraction.
Chip and Toolchain Adaptation Libraries
51
- 8051-ELL - ELL (efficient low-layer) library that combines the programming concepts of HAL and LL libraries, primarily targeting the STC8 series.
- ECBM - 51-chip peripheral function library; take whichever module you need.
AVR
ST
- STM32F4 Discovery - A collection of driver libraries for STM32F4-series microcontrollers, including implementation tutorials and examples for multiple peripherals and interfaces.
ESP
- LwESP - Professional AT parser library intended for communicating with ESP devices from other devices through AT commands.
- ESPUI - A simple web user interface library for ESP32 and ESP8266 devices. It lets users create and manage device web interfaces easily without HTML, CSS, or JavaScript frontend-development knowledge.
- FluidNC - CNC firmware library optimized for ESP32 controllers.
- Rabbit GRBL - CNC firmware library running on ESP32 processors, highly optimized to maintain stable, jitter-free control pulses up to 120 kHz.
SIMCom
- LwCELL - Professional AT parser library intended for communicating with SIMCom devices from other devices through AT commands.
MDK
- flash_blob - Quickly generates generic flash drivers using MDK FLM files.
Driver
- LibDriver - An open-source driver-development organization containing driver libraries for all common peripheral modules (140+).
Engine (Simulation) Libraries
SoftFP
- SoftFP - Software floating-point implementation for systems without a hardware floating-point unit (FPU).
C++
- sds - A simple dynamic-string library that uses heap memory and imitates the C++
stringtype in C. - STR - String-processing library with string splitting, trimming, searching, and error-checking functions.
- etl - C++ template library (STL) for embedded systems, designed to define fixed sizes for containers at compile time.
- LW_OOPC - Object-oriented programming extension for embedded systems. It has been updated and optimized across multiple versions based on the original source and is simple to use.
- PLOOC - Provides object-oriented programming extensions in C, including private members, inheritance, overloading, and more.
- vlib - C-language template library providing functionality similar to C++ STL, including common containers and support for arbitrary data types.
Lua
- MicroLua - LUA development package for Raspberry Pi Pico. With porting changes, it should also work on other microcontroller devices.
- eLua - Lua engine for embedded systems that lets Lua scripts run on embedded platforms.
Python
- PikaPython - An ultra-lightweight Python engine with zero dependencies and zero configuration that uses Python instead of C for development. It has extensive Chinese documentation and video materials.
Rust
- Rust Embedded - Focuses on improving the end-to-end experience of using Rust in resource-constrained environments and on nontraditional platforms.
JavaScript
- mJS - JavaScript engine specifically for microcontrollers, with a small footprint (RAM: 1k, ROM: 50k) and based on the ES6 standard.
Arduino
- ArduinoCore-API - The hardware-independent layer of the Arduino core. Include the corresponding API files when using Arduino-related libraries.
Virtual Machines (Sandboxes)
- EVM - An ultra-lightweight IoT virtual machine composed of a syntax-parsing frontend framework and a bytecode-execution backend. It runs on resource-constrained microcontrollers and supports running self-developed apps on this virtual-machine engine.
- uvm32 - A minimalist, dependency-free virtual-machine (RISC-V) sandbox designed for microcontrollers and other resource-constrained devices. It is a single C file with no dynamic memory allocation and an asynchronous architecture. It can replace script engines such as LUA and MicroPython.
Multimedia
- FFmpeg - A highly renowned cross-platform audio/video processing framework that provides a suite of audio/video codec development tools.
Game Frameworks
- Arduboy - Provides the programming interfaces required to make games, allowing players to create C/C++ games easily, run them on the platform, and share them through the community.
- raylib - Game library written entirely in C that provides simple video and game-programming capabilities.
✨ Additional Resources
Library Classification Details
Open-source libraries are diverse. Similar functions may have different names in different contexts, while a single library may contain multiple subfunctions that could each form a separate category. This makes classification difficult. For this reason, the collection is divided into three types: single-purpose, integrated-purpose, and other.
- Single-purpose - Open-source libraries for a single function or domain, organized as
domain-function; - Integrated-purpose - Packages or frameworks integrating multiple functions, organized by
domain; - Other - Libraries adapted only to specific chip types or engines;
Other Related Open-Source Library Collections
- zhengnianli/EmbedSummary: A curated collection of quality embedded resources (not updated for a long time)
- nhivp/Awesome-Embedded: A curated list of awesome embedded programming.
- ESP Component Registry (ESP32 component library)
- Arduino Library List - Arduino Libraries (other vendors' chips need a ported Arduino core)
- mim — MicroPython Package Manager & Directory (based on MicroPython)
- fffaraz/awesome-cpp: A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff. (general-purpose C/C++, not optimized for embedded)
🤝 Contributing
Contributions are welcome. See the contribution guide for details.
Explore related projects
sindresorhus/awesome
😎 Awesome lists about all kinds of interesting topics [NOTE: Pull requests are temporarily disabled until I have a chance to catch up with the existing ones]
536,113 starsEbookFoundation/free-programming-books
:books: Freely available programming books
401,515 starsnilbuild/developer-roadmap
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
371,935 starsvinta/awesome-python
The definitive list that answers "I want to do X in Python, which tool should I use?"
334,406 stars