LVGL

v9.5.0
LVGL is a lightweight, open-source C graphics library designed to build professional user interfaces on any microcontroller or microprocessor. It features a hardware-independent architecture with low memory requirements, supporting advanced rendering features like anti-aliasing, animations, and complex layout engines.

Features

  • Hardware-independent C library with no external dependencies for maximum portability.

  • Low resource footprint requiring as little as 32kB RAM and 128kB Flash.

  • Support for monochrome, ePaper, OLED, and TFT displays of any resolution.

  • Over 30 built-in widgets including buttons, charts, keyboards, and sliders.

  • Advanced styling system with approximately 100 customizable properties for states and parts.

  • Responsive layout engines based on CSS Flexbox and Grid standards.

  • Full UTF-8 support for internationalization, including CJK, Arabic, and Persian scripts.

  • Integrated data binding system (Observer pattern) to sync UI with application logic.

  • Advanced rendering capabilities including anti-aliasing, opacity, shadows, and image transformations.

  • Support for 3D rendering of glTF models via OpenGL integration.

  • Multi-display support for managing several screens simultaneously.

  • Compatibility with various input devices like touchpads, mice, encoders, and keyboards.

  • Built-in animation engine for smooth transitions and UI effects.

  • XML-based UI definition support via the LVGL Pro toolkit.

  • Integration with major RTOS environments like Zephyr, NuttX, and RT-Thread.

Architecture

LVGL follows a modular, object-oriented architecture implemented in C. The core of the library is built around the “Object” (lv_obj) abstraction, where every UI element is a widget inheriting base properties. The architecture is decoupled from hardware through a callback-based driver layer. Developers provide “flush” callbacks for display rendering and “read” callbacks for input devices, allowing LVGL to run on any display controller or input hardware without modification to the core library.

The rendering pipeline uses a partial buffering strategy to minimize RAM usage, where only changed areas of the screen are recalculated and drawn into a small draw buffer before being sent to the display. This allows for high-quality graphics even on memory-constrained MCUs. The library also includes a powerful style system that separates visual appearance from logic, and layout engines (Flexbox and Grid) that handle responsive positioning automatically.

Core Components

  • Display Interface: Manages rendering buffers and coordinates with hardware-specific flush callbacks.
  • Input Device Interface: Handles touch, mouse, keypad, and encoder inputs through a standardized event system.
  • Widget Engine: A collection of 30+ UI components with hierarchical parent-child relationships.
  • Style System: A CSS-like property system for customizing widget appearance across different states.
  • Layout Engines: Flexbox and Grid implementations for responsive design and automatic positioning.
  • Animation & Timer Engine: Manages time-based events, visual transitions, and internal task scheduling.

Use Cases

This library is ideal for:

  • Industrial HMI: Creating robust control panels for factory machinery with charts and complex data visualization.
  • Consumer Electronics: Building sleek interfaces for smart home appliances, thermostats, and wearable devices.
  • Medical Devices: Developing high-reliability UIs for patient monitors and diagnostic equipment requiring clear, anti-aliased graphics.
  • Automotive Dashboards: Implementing digital clusters and infotainment systems with smooth animations and multi-display support.
  • IoT Gateways: Adding local configuration screens to headless devices using low-cost monochrome or OLED displays.
  • Cross-platform Prototyping: Developing UI logic on a PC simulator (Windows/Linux/macOS) and deploying the same code to embedded hardware.

Getting Started

To integrate LVGL, developers typically add the source files to their project and provide a configuration file named lv_conf.h. The initialization process involves calling lv_init(), setting up a tick source via lv_tick_set_cb(), and registering display and input drivers. A display is created using lv_display_create(), where buffers and a flush callback are assigned. The main application loop must periodically call lv_timer_handler() to process UI tasks and animations. Detailed documentation, including over 100 examples and API references, is available at docs.lvgl.io.

Related Projects (208)

View All 208 Projects →
iMX RT1011 Nano Kit

iMX RT1011 Nano Kit

A high-performance development board featuring the NXP iMX RT1011 Crossover MCU with an ARM Cortex-M7 core running at 500MHz. It supports the Zephyr RTOS and Python environments, offering 128 KB RAM, 128 Mb QSPI Flash, and a compact USB-C form factor for rapid prototyping.

zephyr littlefslvglmicropython
Retro-Zero

Retro-Zero

Retro-Zero is a Libretro-based emulator frontend designed for the Cardputer Zero running ARM64 Linux. It utilizes the LVGL graphics library for its user interface and supports a wide variety of retro gaming systems through on-demand core loading and hardware-accelerated graphics.

lvgl
FlightRadar24-TTGO

FlightRadar24-TTGO

FlightRadar24-TTGO is an ESP32-based firmware that provides a real-time aircraft tracking display on TTGO and LilyGo-T-Display-S3 modules. It leverages the FlightRadar24 API for live updates and uses the LVGL library to render detailed flight information and carrier logos. The project includes a web-based configuration portal for setting location parameters, units, and traffic filters.

freertos lvgltft-espispiffs
ESP32 Morse Keyer

ESP32 Morse Keyer

A single-button wireless keyboard built on the ESP32-C5 that translates Morse code patterns into HID keystrokes over Bluetooth Low Energy. It features a real-time LVGL UI on a tiny 0.85-inch display and implements secure BLE bonding using the NimBLE stack.

freertos lvglnimble
Melody Machine

Melody Machine

Melody Machine is a feature-rich MP3 player and internet radio firmware designed for the LilyGO T-LoRa Pager (ESP32-S3). It leverages FreeRTOS for dual-core audio processing and the LVGL library to provide a responsive graphical interface with support for local microSD playback and WiFi-based streaming.

freertos lvgl
Tasmota SML Images

Tasmota SML Images

This project provides pre-compiled Tasmota firmware binaries specifically optimized for smart meter reading via SML and advanced scripting on ESP32 and ESP8266 platforms. It features a dual-track approach offering both the classic Tasmota Scripter and the high-performance TinyC VM, utilizing FreeRTOS for background processing and LittleFS for filesystem management. The firmware supports energy monitoring, Google Charts visualization, and emulation of smart battery interfaces like Shelly Pro 3EM.

freertos littlefslwiplvglplatformio-platformio-core
BETTA HA Panel

BETTA HA Panel

BETTA HA Panel is a runtime-configurable Home Assistant dashboard firmware for ESP32-P4 and ESP32-S3 touchscreen devices. Built on the ESP-IDF framework using LVGL and LittleFS, it allows users to design complex, multi-page layouts via a web-based drag-and-drop editor without requiring YAML configuration or firmware rebuilds.

freertos littlefslvgllwip
Xiaozhi AI Desk Buddy (ESP32-S3)

Xiaozhi AI Desk Buddy (ESP32-S3)

An expressive AI desk companion based on the Seeed Xiao ESP32-S3 that features a fully animated face system. It utilizes the ESP-IDF framework with FreeRTOS, LVGL for rendering display interfaces, and SPIFFS for asset storage. The project integrates I2S audio components for listening and speaking capabilities, creating a dynamic interactive experience.

freertos lvglspiffs