Skip to content

Releases: lvgl/lvgl_pro

v2.0.3

Choose a tag to compare

@mrhubbs mrhubbs released this 25 Aug 02:09
b50910a

Changed

  • Made licensing configuration more customizable

v2.0.2

Choose a tag to compare

@mrhubbs mrhubbs released this 17 Aug 15:51
4d05fc7

Added

  • Debug logs to the LicenseService.
  • Any files in custom_data folder will be copied into the Editor preview. Allows adding arbitrary application or test data.
  • Experimental 🧪 Ability to specify other projects to include like this in project.xml:
<folders>
    <!-- Specifying root project is optional, but allows for controlling the precedence of globals -->
    <folder path="."/>
    <folder path="./lib"/>
    <folder path="../common"/>
</folders>

NOTE: projects included in this way may in turn also use <folders>...</folders> to include other projects, but they will be ignored. This feature is only one-level deep.

NOTE: breaking any existing projects which use a component library must be updated to have a folders entry like <folder path="./lib"/>

NOTE: limitations Including other projects is not currently recursive. So if you have a root project A that includes project B which also includes project C, project C will actually be skipped and project B will probably not function.

NOTE: KNOWN ISSUE when switching between projects that both include other projects, include paths will be stale. The first time exporting code and compiling, there will be errors. This is fixed by simply exporting code a second time. This will be fixed soon in a future release.

Changed

  • New project creation flow to clarify how to create a new project that will support Figma import.
  • CMake-related: various changes to streamline compiling an Editor project to target, using our generated CMake-config:
    • Make linking of the Editor internal lvrt project optional. This isn't needed on target.
    • Make LVGL linking more flexible.
    • Code export will no longer emit component_lib_list_gen.cmake - you can delete it. It's replaced by included_projects_gen.cmake, which is only emitted when a project actually declares included projects via <folders> in project.xml.
  • BREAKING: The LVGL XML engine requires a certain order in widgets/components/globals. Fonts/images/consts must be defined before styles, and styles before view. Without this, the Preview would output runtime errors and fail to properly render styles/fonts. These issues are now checked by XML validation and explicit errors given.

Fixed

  • Code export casts a const-qualified value passed to a void * argument, so the generated C compiles without warnings.
    • An event's user_data fed from an API prop (user_data="$device", or the same prop in a { ... } expression) is emitted as (void *)device; string literals, NULL and non-pointer values are unchanged, so a genuinely wrong type still gets flagged by the compiler.
    • A <pointer> subject's value is emitted as (void *)img_bell, since images generate as const void * while lv_subject_init_pointer() takes a plain void *.
  • Exported *_gen.c guards permanent screen creation with #if defined(LV_USE_XML) && LV_USE_XML == 0. LVGL 9.5 removed the lv_xml module, so LV_USE_XML is undefined when building outside the Editor. The guard is false, screens are never created, and the app crashes.
  • Permanent screens are guarded with #if !defined(LV_USE_XML) || LV_USE_XML == 0 so it fires when the macro is absent or explicitly 0. Inside the Editor (LV_USE_XML == 1 behavior is unchanged, screens are still created from XML.
  • Prefix all generated header guards with LVGL_PRO_ to avoid collisions with similar names (for example, a list component could conflict with list header file from a 3rd-party or platform library).
  • Screen name from XML was not used in generating header guard - filename was used instead.
  • lv_obj radio_button prop. Was incorrectly mapped as a flag when it is a boolean property - making it unusable.

v2.0.2-rc1

Choose a tag to compare

@mrhubbs mrhubbs released this 31 Jul 14:31
c075e5c

Added

  • Debug logs to the LicenseService.

Fixed

  • Permanent screens are guarded with #if !defined(LV_USE_XML) || LV_USE_XML == 0 so it fires when the macro is absent or explicitly 0. Inside the Editor (LV_USE_XML == 1 behavior is unchanged, screens are still created from XML.
  • Prefix all generated header guards with LVGL_PRO_ to avoid collisions with similar names (for example, a list component could conflict with list header file from a 3rd-party or platform library).
  • Screen name from XML was not used in generating header guard - filename was used instead.
  • lv_obj radio_button prop. Was incorrectly mapped as a flag when it is a boolean property - making it unusable.

v2.0.1

Choose a tag to compare

@mrhubbs mrhubbs released this 22 Jul 23:22
d8e8c86

Added

  • Legal acceptance flow and panel for EULA, Privacy Policy, and Terms of Service — post-login overlay when documents are updated
  • Git workspace validation for Product licenses: detects git installation, repository status, and remote URL mismatches with actionable error messages.
  • Auto-configuration of git remote when assigning a Product license to a project.
  • "Update" button in top-right of the Editor, which appears when there is a new release available. Clicking it opens the changelog for the new release in an overlay with a button to go to the website download page.

Changed

  • Launch screen license label now shows a single formatted name, appending the tier only when it is not already part of the display name.
  • Project selection now requires selecting the exact folder containing project.xml and globals.xml (no longer auto-resolves to ui/ subfolder).

Fixed

  • Emsdk/toolchain dependency installation (bundled Python download) now routes through HTTP_PROXY/HTTPS_PROXY/NO_PROXY when configured, instead of failing with a generic fetch failed error on networks that require a proxy.
  • Notification toasts now layer correctly above modals and overlays.
  • XSS vulnerability in inline markdown link rendering by escaping quote characters in href attributes.
  • License selector is no longer closable until a valid license is selected, and closes after a successful selection.
  • Signing out no longer restarts the app after briefly showing the auth panel.
  • Git remote configuration failing when other remotes exist but origin does not.

v2.0.0

Choose a tag to compare

@Anthony-De Anthony-De released this 06 Jul 18:04
e769ec0

Overview

This is a major update and brings the editor to you with no time limit. No feature restrictions. No credit card.

If you're building something personal, open-source, or just evaluating, the full editor is yours. Every feature, no expiry.

Alongside a long list of new features, we rebuilt the Editor's foundation to make it faster, more stable, with a familiar VSCode like interface, built in accessories, fully ready for the way teams work. v2.0.0 marks the point where the Editor grows to meet the demands the community and our customers have made.

Licensing built for you v2.0.0 moves to a product based model instead of a recurring subscription. Personal, open-source, and evaluation use stays free forever, commercial teams license per product with five years of updates, startups get a special price, and companies going all in on LVGL move up to Platform with floating and on-premise licensing options.

AI ready, out of the box v2.0.0 ships with an MCP server for LVGL XML. AI assistants can read, understand, and help write your UI definitions. Building embedded UIs with the help of tools like Claude and Gemini is now a first class part of the workflow.
LVGL Flow for Figma. Our new Figma plugin brings your full designs straight into the Editor, reducing the figma to screen conversion time to mere seconds.

Expression evaluation Instead you assigning values to properties you use expressions like width="{large ? 200 : 100}" or hidden="{subtitle == '' ? true : false}"

Memory usage analysis We know that on embedded, every byte counts. A new panel showing exactly where your flash and RAM go.

Design Mode, leveled up Edit component slots, wire up events and screen loads.
Multiple targets. Shipping a line of products with different display sizes and UIs? Define multiple UIs of a product line from a single source and switch between them live in the Preview.

Smoother Onboarding We’ve built a Learn by Examples flow that drops you into real, working projects built from bundled templates instead of a blank canvas so you can get started in seconds.

Added

  • Pointer subjects for image bindings, including <pointer> support in globals.xml, typed bind_src validation and autocomplete, preview/runtime updates, and lv_image bind_src code generation. (#247)
  • Design Mode Events section in the Properties panel for adding, editing, and removing event elements, such as event_cb and screen load events, on the selected component.
  • Standard API getters for accessing slots.
  • Design Mode support for editing component slots, including adding, duplicating, drag-and-drop reordering, and copy/paste operations in slot layers.
  • Memory usage summary feature with a UI panel, graphs, and code export support.
  • Proper support for repeat_count and repeat_delay in animation timelines.
  • CLI screenshot command for capturing a screen as a PNG.
    • Example: node lved-cli.js screenshot ./testing/test_project screens/main_screen --out main.png --delay 300
  • Default ZIP repository loading for Theia browser GitHub projects, with the existing GitHub Tree/raw-file flow kept as the automatic fallback.
  • Preview inspection for access="add" and access="get" typed elements, such as lv_tabview-tab and lv_dropdown-list, and their contents.
  • Expression evaluation, like width="{large ? 200 : 100}"
  • Launch screen Learn by Examples flow for creating Tutorials or Examples projects from bundled templates.
  • Image convert support for creating multiple versions of the same source image.
  • Project theme support with <project theme="default"> and <project theme="simple">.
  • Support for the precise_points type, including lv_line support in code export and XML validation.
  • Support for content, 1fr, and validation in grid_row_dsc_array and grid_column_dsc_array.
  • Responsive target support: targets defined in project.xml can now be referenced in fonts, images, views, styles, and other project resources to create multiple versions of the UI. Preview supports dynamically switching between targets.
  • Figma Flow plugin integration.
  • Proper support for px|% and px|%|content types in widget properties.
  • Validation and autocomplete for animation targets and timelines.
  • Full support for array types: type[], type[N] / type[count], and string[NULL]. (#370)

Changed

  • Launch screen now opens on every app launch when signed in with a valid license, including when a project was restored from the previous session.
  • Simplified unit selector for Design Mode number inputs, such as position and size fields.
  • Project opening now enforces Product, Platform, Community, and Evaluation license rules using product_id and git_url project metadata.
  • Preview now reloads when any .xml file in the open project changes, improving support for external tools.

Removed

  • figma-sync CLI command. Figma integration is now handled through the Figma Flow plugin.
  • copy-resources CLI command.
  • --toolchain-mode option from the generate, compile, run-test, run-all-tests, and screenshot CLI commands. The toolchain now always uses local-emsdk.

Fixed

  • Design Mode subject pickers no longer keep removed globals.xml subjects as valid choices.
  • Design Mode copy, cut, paste, and Preview zoom shortcuts now work through Theia keybindings.
  • Deleted project folders now clear stale workspace and file navigator state, and close project-scoped bottom panels.
  • File > Open Project now uses the in-place Project Launcher flow instead of triggering a full Theia reload.
  • Removed obsolete Design Mode XML-comment warnings when opening screens.
  • Clean/build project operations now validate before deleting generated files.
  • Improved backdrop contrast for the light-theme toolchain installation modal.
  • Validation and build output remains available after switching projects so errors can still be inspected.
  • Subject validation now keeps root globals.xml subjects when parsing library globals.xml files.
  • Validation failure toasts now show local relative paths and wrap long file names.
  • Asset Memory can sort memory regions and assets by bandwidth as well as size.
  • Project commands now save unsaved editor tabs before running.
  • Design panel shortcuts now work when the Design panel or Preview is active outside full Design mode.
  • Pasted and duplicated Design elements now get unique names without renaming the source element.
  • File > Open Project Launcher now uses the launcher, while File > Open File and Ctrl/Cmd+O are disabled in Theia.
  • Theia project command shortcuts now save dirty editor tabs before running.
  • Recent projects are now timestamped, sorted by last opened, refreshed when the launcher opens, and show a clear error for moved or deleted paths.
  • Code export improvements for slot support.
  • Improved UX when the user's login has expired. (#371)
  • Added a guided flow to install emsdk, pypng, and lz4 locally when compiling with the local toolchain.
  • Setters on widget elements with access="add" now correctly operate on the generated child element.
  • User-defined event callbacks are now called correctly.
  • Memory usage monitoring now counts file-backed TinyTTF fonts and file images once per source file.
  • Translation strings starting with $ or # are no longer treated as API or const references during validation and code export.
  • Preview compatibility on Linux and macOS has been improved.
  • CLI compile command now correctly defaults the compilation target to cli.

v2.0.0-beta

v2.0.0-beta Pre-release
Pre-release

Choose a tag to compare

@mrhubbs mrhubbs released this 25 Jun 00:45

Added

  • Pointer subjects for image bindings, including <pointer> support in globals.xml, typed bind_src validation/autocomplete, preview/runtime updates, and code generation for lv_image bind_src. (#247)
  • Design Mode Events section in the Properties panel for adding, editing, and removing event elements (e.g. event_cb, screen load events) on the selected component.
  • Generate standard API getters for accessing slots.
  • Design Mode support for editing component slots, including adding, duplicating, drag-and-drop reordering, and copy/paste operations in slot layers.
  • Memory usage summary feature, including a UI panel with graphs and additions to code export.
  • Proper support for repeat_count and repeat_delay in animation timelines.
  • CLI screenshot command for capturing a screen as a PNG.
    • Example: node lved-cli.js screenshot ./testing/test_project screens/main_screen --out main.png --delay 300
  • Preview inspection for access="add"/access="get" typed elements (e.g. lv_tabview-tab, lv_dropdown-list) and their contents.
  • Launch screen Learn by Examples flow to create Tutorials or Examples projects from bundled templates.
  • Image convert support allow creating multiple versions of the same source image.
  • <project theme="default or simple">to set a good looking or a minimally styled theme
  • Support for type precise_points (supports lv_line) to code export and XML validation.
  • Support content, 1fr (besides fr(1)), and validation in grid_row/column_dsc_array
  • Responsive target support: targets defined in project.xml can now be referenced in fonts, images, views, styles, etc. to create multiple versions of the UI. The Preview supports dynamically switching between them.
  • Figma Flow plugin to the Editor.
  • Proper support for types px|% and px|%|content in widget properties.

Changed

  • Launch screen opens on every app launch when signed in with a valid license, including when a project was restored from the previous session.
  • Simplified unit selector for Design Mode number inputs (e.g. position and size fields).
  • Project opening now enforces Product, Platform, Community, and Evaluation license rules using product_id and git_url project metadata.
  • For external tool support - reload the Preview whenever any .xml file in the open project is changed.

Fixed

  • Code export tweaks for slot support.
  • Confusing UX flow when the user's login has expired (#371).
  • UI flow to install emsdk locally, on first compilation
  • Setters on widget elements with access="add" would operate on the widget itself, instead of the child element, in code export.
  • User-defined event callbacks were not being called (the weak ones stubbed by code export were incorrectly preferred).
  • Memory usage monitoring now counts file-backed TinyTTF fonts and file images once per source file.
  • Translation strings starting with $ or # being treated as API or const references during validation and code export.
  • Use Emscripten environment "worker" instead of "web" because the Preview runs in a worker. On some Linux and Mac machines, the preview wouldn't run because of this.

v1.2.1

Choose a tag to compare

@mrhubbs mrhubbs released this 22 May 01:43

Please see this blog post about some of the new features!

Added

  • Proper support for repeat_count and repeat_delay in animation timelines.

Fixed

  • Generate standard API getters for accessing slots.
  • Code export tweaks for slot support.
  • Confusing UX flow when the user's login has expired (#371)
  • UI flow to install emsdk locally if the user tries to compile when the Editor is in local-emsdk mode.
  • Setters on widget elements with access="add" would operate on the widget itself, instead of the child element, in code export.

v1.2.0

Choose a tag to compare

@mrhubbs mrhubbs released this 12 May 02:44
845a97d

NOTE: Please see v1.2.1, as we stabilized some issues.

Please see this blog post about setup for bundled runtimes / local emsdk.

Added

  • ☝🏻 Support LVGL v9.5.0, including slot support and bind_style_prop. NOTE: specifying lvgl_version="..." in project.xml is now required.
  • 🎁 Include pre-built runtimes with the Editor, so it is not necessary to compile for the live, XML preview to work.
    • NOTE: if your project uses custom C code / custom widgets and you do not compile, the preview can be innacurate.
    • NOTE: this also significantly speeds-up compile times, because lib LVGL is distributed pre-built and does not need to be compiled
  • 🧍 Added user_config.cmake to the project template to allow users to add extra source files to the generated editor project without modifying generated files.
  • 💬 Popup in case of repeated failures to connect to the LVGL licensing service.

Fixed

  • Fix a small issue where widget generated headers would have an extra ';' in some cases causing pedantic warnings at compilation time
  • Numeric subject fields use text-based editing with keyboard stepping so decimal values stay readable while still supporting arrow increment and decrement.
  • File Navigator header actions now create files and folders correctly when a root-level file is selected.
  • Enable LV_USE_IMGFONT by default in the Editor runtime configuration.
  • XML validation and completion now handle globals.xml comments correctly, including root comments and comments on the first line inside inner elements such as <enums>.
  • Figma style sync now accepts both plugin scene nodes and deserialized Figma API node data during project updates.
  • Referenced component/widget API props now take precedence over wrapper element props with the same name during XML schema lookup and validation.
  • Designer mode image handling now keeps globals.xml, the images/ folder and related project XML references in sync for image add, change, rename and delete flows.
  • Active XML previews now refresh reliably when synced image references or externally modified XML files change on disk.
  • globals.xml changes now trigger preview runtime reloads so image updates appear without switching modes.
  • Image uploads now reconcile globals.xml immediately, so newly added external images appear without waiting for delayed watcher timing.
  • Dropdown menus now keep within the viewport with scrolling and smarter alignment when space is limited.
  • Editor autocomplete suggestion visibility over the Subjects panel.
  • Online Preview GitHub loading, runtime fallback logging, and preview-mode actions.
  • Online Preview code export path handling for repo-root and subtree projects.
  • Online Preview schema cleanup after removing component libraries.
  • Online Preview template project creation now writes .gitignore instead of leaving the bundled gitignore template file in /ui.
  • Online Preview XML saves now sync text files through the text cache and avoid re-transferring detached worker buffers.
  • Online Preview and UI lint configs now run under the current ESLint flat-config setup and catch unused imports correctly.
  • Electron recent-project history now deduplicates entries by project path and keeps the newest lastOpened record.
  • E2E testing stability improvements and expanded Windows OS test coverage.
  • Simplified LVGL private includes.
  • Restore saving output PNGs for tests in subfolders of the screens folder.

v1.1.2

Choose a tag to compare

@mrhubbs mrhubbs released this 27 Mar 02:15

Please note there is one breaking change. Widget/component API props (getters) were generated with an extra argument. This is now fixed, and all [widget]_gen.h files will be regenerated on code export, but you must delete or fix any [widget].c files to correct the generated functions.

Added

  • Custom editor context menu with functional actions. (#328)
  • Add ANSI colours to the Console output of the Editor (error, warning, note). (#332)
  • Intelligent image and font conversion that skips re-conversion of up-to-date resources.

Changed

  • Fit to screen when preview selection is changed.

Fixed

  • Widget private header generation now uses the correct pointer type for non-object child elements such as lv_chart-series.
  • Prevent subject update feedback loop by skipping updates when they originate from LVGL.
  • Fix Inspector toggle and enabling with Alt or Alt + I shortcuts.
  • Textarea shows for string and text type attributes.
  • Test screen shot compare path with subfolder resolution fix.
  • Correct LVGL Pro-related weblinks.
  • Editor crashing when opening a project without a globals.xml file.
  • Excessive API inheritance for extended components.
  • 'lv_textarea' missing properties and missing part selector. (#295)
  • Project overview reflects component library content and presence.
  • Load all files into LVGL Schema when component library added.
  • Correct adding float value in subject field. (#330)
  • Various Translations issues: not showing until opening a project, translations not updating in preview, local translations never shown, input field stability.
  • Subject inputs now reject out-of-range min_value / max_value updates consistently across the form, preview store and runtime.
  • Empty string was not allowed for string api props if default was not present. If default was present, the default value was incorrectly used instead of the empty string.
  • Widget/component properties (of elements with access='get') were generated with an extra argument.
    • NOTE: fix will auto-regenerate all [widget]_gen.h files, but you must delete or fix any [widget].c files to correct the generated functions.
  • Make text area popup input to the clicked prop, not the first in the schema.
  • Support automatic reloading of XML files modified by external editors for Windows. #345

v1.1.1

Choose a tag to compare

@mrhubbs mrhubbs released this 04 Mar 03:37

This release continues our commitment to rapid bugfixing. We have also been implementing many automatic tests to ensure reliable software. We are pleased to share that many bugs are being caught by internal tests, before they can even be reported by users. On the flip side, the reporting from our users has been awesome! Thank you to everyone who contributes to improving these tools! (New fixes are, of course, made available every 24hrs in our nightly builds.)

But all that work hasn't stopped us from slipping in some small quality-of-life improvements. :) See below.

Added

  • Toggle visibility of generated files (*_gen.c, *_gen.h) via the filter button in the File Navigator; visible by default. (#304)
  • Collapse-all button in the File Navigator to collapse all expanded folders in the file tree.
  • Preliminary support for locally-installed Emscripten instead of using a container/Podman/Docker.
  • File navigator context menu action to reveal files/folders in the host OS file manager (Finder/File Explorer/File Manager).

Changed

  • Improved LVGL linking for target builds when using CMake:
    • Projects now automatically link with LVGL when the lvgl target is detected at configure time
    • The lvgl target can be provided through multiple methods:
      • add_subdirectory(lvgl) - when LVGL is a subdirectory of your project
      • FetchContent - when LVGL is fetched as a dependency
      • find_package(lvgl) - when LVGL is installed system-wide or via a package manager
    • Simply include your LVGL UI project with add_subdirectory(YOUR_LVGL_UI_PROJECT_FOLDER) after the lvgl target is available
  • Allow switching between Design and Code mode on any screens and components.
  • Do not generate C variables for unused objects.
  • Selector with pipe (|) symbol also triggers completion.
  • Open project file browser defaults to last opened path.
  • File navigator: Add Template button tooltip is context-specific (e.g. "Add New Component", "Add New Widget", "Add New Screen") depending on the folder.
  • Change external file paste dialog box text. (#322)

Fixed

  • Sync with widget_xml_parser.c for the generated header files. (#72)
  • Incorrect paths in generated component library includes on Windows. (#324)
  • Incorrect Windows external-command invocation which prevented local Emscripten from being used on certain machines.
  • LVGL assertion failures would hang the CLI indefinitely while running tests.
  • VS Code Preview would not work.
  • CLI tests always failed on Windows due to pathing issues. ([#314]#314))
  • File navigator: Corrected caret rotation for closed directories
  • Font conversion broken in the CLI, on all OSes, since v1.1.0. (#318)
  • No min_value and max_value suggestion for constants' <int> and <prop> image typed default value suggestion with images.
  • Prevent automatic jump back to parent when adding children in Design mode
  • Incorrect Font and Subject input field type detection in Properties panel (Design mode)
  • Long input field labels can mess up the layout in the Properties panel in Design mode
  • Screens in subfolders had subfolder name prepended to screen name. (#320)
  • Stabilize single and all test runners.
  • Fitting preview to screen on every XML edit.
  • Online Preview: Redirect to /ui only when template project is added, no slash escaping in URL.
  • Superfluous popups asking user to pick a license.
  • At XML completion use parent extends for allowed children.
  • Inspector can be enabled by pressing Alt, independent of the current focus.
  • Test image difference images scale to container width.
  • In Design Navigator keep same parent selected after dropping inside another element.
  • CLI ignoring the --ignore-fonts and --ignore-images options. NOTE: Using these options can generate C code that will not compile, as font/image resources are not included in the build. These are intended to be used when quickly sanity-checking exported C code for widgets/components. (#323)
  • Assets synchronization now runs in both Design and Code modes for the active project.
  • Assets synchronization now applies <images sync="true"> from globals.xml on each sync run and triggers immediately when globals.xml changes.
  • Image sync now reconciles by image src_path (canonicalized path), preserving manually renamed image name values in globals.xml.
  • Image sync no longer leaves an extra blank line in <images> after removing image entries.