Documentation / Shipping it

Export

Every file the generator writes, what it is for, and the one you are meant to edit.

Export is where the project becomes a folder of source. It happens on the server - the generator and its hardware tables are not part of the designer - and it is the one thing in the application that is metered. Export > Export UI code, the Export button in the toolbar, or Ctrl+E opens the dialog.

The export dialog after a successful build.
The export dialog after a successful build.

The dialog

  1. The project is validated. Errors are listed and block the build; warnings are listed and do not. No configuration errors means you can go ahead.
  2. Generate code sends the project, and the decoded pixels of any image assets, to the server. If you are not signed in and have used the guest allowance you are asked to sign in here, and the build continues once you are. An unconfirmed email address is refused with a Resend the link button.
  3. The file list appears on the left, grouped; click one to read it on the right, copy it, or download it alone. Download project .zip takes the whole folder. The zip is part of the same generation, not a second one.

The Your plan box in the dialog shows what you have used this period and where the allowance stands - Accounts and limits.

Export settings

SectionSettingMeaning
ProjectNameThe project name; the folder and the .ino are named from it.
ProjectCode prefixThe prefix on generated identifiers and files, ui by default: ui_init, ui_Screen1.
ProjectLVGL version9.x or 8.3.x.
RenderingBuffer heightThe partial draw buffer in lines. 40 by default; lower it on a small MCU or a large panel.
RenderingDouble bufferTwo buffers, so LVGL renders one while the other flushes.
RenderingBuffer in PSRAMAllocate the buffers in external RAM. Only offered where the MCU has it.
Files to generateArduino sketch and pin header · Graphics driver configuration · lv_conf.h · platformio.iniUntick what you already have - for instance when dropping the ui/ folder into an existing sketch.

Every file

FileWhat it is
<Name>.inoThe sketch: driver init, LVGL glue, flush and touch callbacks, setup() and loop().
lcd_pins.hEvery pin and timing value as a #define, with the board and panel named at the top.
User_Setup.hTFT_eSPI configuration - copy over the library's own. The same defines are in platformio.ini, so PlatformIO needs no copy.
LGFX_Config.hppThe LovyanGFX device class, included by the sketch. (One of these two, depending on the library.)
lv_conf.hLVGL configuration: colour depth, the fonts you use, the widgets you use, memory size.
platformio.iniBoard, framework, lib_deps, build flags and the partition scheme.
README.mdThe target, a wiring table, the file list, build steps for both IDEs, configuration notes and a troubleshooting table.
LIBRARIES.mdEvery library, with search names and links.
hardware.h / .cppBuses, peripherals, extenders, analog and digital I/O; hw_init() and hw_poll().
app_logic.h / .cppVariables, bindings and automations; app_init(), app_poll(), vars_update(), bindings_apply().
lw_math.hThe helpers formulas compile to: _lw_mapf, _lw_clampf.
ui_fs.cppRegisters the board filesystem with LVGL as a drive letter.
data/*.bin, data/README.mdImage assets in LVGL binary format, and how to upload them.
ui/ui.h / ui.cDeclarations of every object, ui_init(), the theme.
ui/ui_<Screen>.cOne per screen: creates its widgets, styles, events.
ui/ui_helpers.h / .cThe helpers generated event code calls - screen change, flag and property setters, animations.
ui/ui_events.h / .cYours. Stubs for Call function actions.

hardware.*, app_logic.*, lw_math.h and ui_fs.cpp are written only when the project uses them. The screen files are one per screen, named from the screen's name.

What is yours and what is regenerated

Everything is regenerated on every export except ui/ui_events.c. That file holds the stubs for your Call function actions, and the generator will not overwrite a copy you have edited - so put your code there, or in files of your own that the sketch includes, and re-export freely. Edits to any other generated file are lost on the next export; if you find yourself hand-editing lcd_pins.h, change the pin in the designer instead.

Inside the sketch

setup() starts serial at 115200, drives the backlight, initialises the panel through the chosen library (with any board-specific power-enable first), brings up the touch controller, initialises LVGL with a partial draw buffer, registers the display and the input device, calls ui_fs_init() if there are filesystem assets, then ui_init() and app_init(), and prints UI ready. loop() is app_poll(), lv_timer_handler() and a five-millisecond delay. lcd_pins.h is included by the sketch and by the driver config, so every pin and timing number exists in exactly one place.

LVGL version

The project targets LVGL 9.x or 8.3.x, chosen on the Theme tab or in the export settings. The generator switches API names (lv_img_* / lv_image_*, lv_obj_clear_flag / lv_obj_remove_flag), the display and input registration calls, the theme call, the chart tick API and the binary image header to match. platformio.ini pins lvgl/lvgl@^9.2.2 or @^8.3.11 accordingly. The two are not source compatible: switch version in the designer and re-export rather than patching by hand.

Libraries

LIBRARIES.md lists every library the project needs - the Library Manager search string, the author, the upstream link, and which part of the design needs it - with a separate section for what is bundled with the board core, and copy-paste blocks for arduino-cli lib install and lib_deps. It is built from the same collector that writes platformio.ini, so the two cannot disagree. A touch controller that the sketch reads itself is listed as needing no library.

Download project .zip from the Export menu

Separate from the code export: Export > Download project .zip bundles the project's JSON and its image assets for archiving or moving between machines. It costs nothing and needs no account.