Try out LVGL Pro - A complete toolkit to build, test, share, and ship UIs efficiently!
LVGL
Release

LVGL v8.0 Released with CSS-Inspired Layouts and Powerful Scrolling

Major release featuring CSS Flexbox and Grid layouts, simplified scrolling, improved widgets, enhanced events, and a new architecture that makes LVGL more powerful and flexible.

Gabor Kiss-VamosiGabor Kiss-Vamosi4 min read

v8.0 brings many new features like simplified and more powerful scrolling, new layouts inspired by CSS Flexbox and Grid, simplified and improved widgets, more powerful events, hookable drawing, and more.

Breaking Changes

v8 is a major change and therefore it's not backward compatible with v7. See the migration guide below for details on upgrading your projects.

Directory Structure#

The project organization has been streamlined for better maintainability:

  • The lv_ prefix is removed from the folder names
  • The docs is moved to the lvgl repository
  • The examples are moved to the lvgl repository
  • Created an src/extra folder for complex widgets:
    • Makes the core LVGL leaner
    • Provides space for numerous and specific widgets
    • Offers a great place for community contributions

Widget Changes#

Several widgets have been consolidated and reimagined:

  • lv_cont removed - layout features are moved to lv_obj
  • lv_page removed - scroll features are moved to lv_obj
  • lv_objmask removed - the same can be achieved by events
  • lv_meter added as the union of lv_linemeter and lv_gauge
  • lv_span new widget mimicking HTML <span>
  • lv_animimg new widget for simple slideshow animations
  • Plus many minor changes and improvements

New Scrolling System#

Scrolling is now more flexible and works on any object:

  • Support "elastic" scrolling when scrolled beyond bounds
  • Support scroll chaining among any object types (not only lv_pages)
  • Remove lv_drag - similar effect can be achieved by setting the position in LV_EVENT_PRESSING
  • Add snapping support
  • Add snap stop to scroll max 1 snap point

New Layouts#

LVGL now supports modern CSS-style layouts:

Style System Improvements#

The style system has been optimized and simplified:

  • State is saved in the object instead of the style property
  • Object size and position can be set in styles too

Enhanced Events#

Events are now more flexible and powerful:

  • Allow adding multiple events to an object
  • A user_data can be attached to added events

Driver Changes#

Info

Display and input device driver initialization has changed in v8. Review these changes carefully when migrating.

  • lv_disp_drv_t, lv_indev_drv_t, lv_fs_drv_t need to be static
  • ...disp_buf... is renamed to draw_buf. See an initialization example here
  • No partial update if two screen-sized buffers are set
  • disp_drv->full_refresh = 1 makes always the whole display redraw
  • hor_res and ver_res need to be set in disp_drv
  • indev_read_cb returns void. To indicate that there is more data to read, set data->continue_reading = 1 in the read_cb

Other Notable Changes#

  • Remove the copy parameter from create functions
  • Simplified File system interface API
  • Use a more generic inheritance model
  • The built-in themes are reworked
  • lv_obj_align now saves the alignment and realigns the object automatically but can only align to the parent
  • lv_obj_align_to can align to any object but doesn't save the alignment
  • lv_pct(x) can be used to set the size and position in percentage
  • There are many other changes in widgets that are not detailed here. Please refer to the documentation of the widgets.

New Release Policy#

We will follow Release branches with GitLab flow:

  • Minor releases are expected every 3-4 months
  • master will always contain the latest changes

Migrating from v7 to v8#

Warning

First and foremost, create a new lv_conf.h based on lv_conf_template.h.

To try the new version, it's recommended to use a simulator project and see the examples.

When migrating your project to v8:

  1. Update the drivers as described above
  2. Update the styles
  3. Update the events
  4. Use the new layouts instead of lv_cont features
  5. Use lv_obj instead of lv_page
  6. The other parts are mainly minor renames and refactoring. See the functions' documentation for descriptions.

For detailed migration instructions, see the v8 Migration Guide.

About the author

Gabor Kiss-Vamosi
Gabor Kiss-Vamosi

CEO & Creator of LVGL

Founder and lead developer of LVGL, the open-source embedded graphics library used in millions of devices worldwide.

Meet the people behind the blog

Discover the talented writers sharing their knowledge about LVGL

View Authors

Subscribe to our newsletter to not miss any news about LVGL. We will send maximum of 2 mails per month.

LVGL

LVGL is the most popular free and open source embedded graphics library targeting any MCU, MPU and display type to build beautiful UIs.

We also do services like UI design, implementation and consulting.

© 2026 LVGL. All rights reserved.
YouTubeGitHubLinkedIn