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 dialog
- 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.
- 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.
- 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
| Section | Setting | Meaning |
|---|---|---|
| Project | Name | The project name; the folder and the .ino are named from it. |
| Project | Code prefix | The prefix on generated identifiers and files, ui by default: ui_init, ui_Screen1. |
| Project | LVGL version | 9.x or 8.3.x. |
| Rendering | Buffer height | The partial draw buffer in lines. 40 by default; lower it on a small MCU or a large panel. |
| Rendering | Double buffer | Two buffers, so LVGL renders one while the other flushes. |
| Rendering | Buffer in PSRAM | Allocate the buffers in external RAM. Only offered where the MCU has it. |
| Files to generate | Arduino sketch and pin header · Graphics driver configuration · lv_conf.h · platformio.ini | Untick what you already have - for instance when dropping the ui/ folder into an existing sketch. |
Every file
| File | What it is |
|---|---|
<Name>.ino | The sketch: driver init, LVGL glue, flush and touch callbacks, setup() and loop(). |
lcd_pins.h | Every pin and timing value as a #define, with the board and panel named at the top. |
User_Setup.h | TFT_eSPI configuration - copy over the library's own. The same defines are in platformio.ini, so PlatformIO needs no copy. |
LGFX_Config.hpp | The LovyanGFX device class, included by the sketch. (One of these two, depending on the library.) |
lv_conf.h | LVGL configuration: colour depth, the fonts you use, the widgets you use, memory size. |
platformio.ini | Board, framework, lib_deps, build flags and the partition scheme. |
README.md | The target, a wiring table, the file list, build steps for both IDEs, configuration notes and a troubleshooting table. |
LIBRARIES.md | Every library, with search names and links. |
hardware.h / .cpp | Buses, peripherals, extenders, analog and digital I/O; hw_init() and hw_poll(). |
app_logic.h / .cpp | Variables, bindings and automations; app_init(), app_poll(), vars_update(), bindings_apply(). |
lw_math.h | The helpers formulas compile to: _lw_mapf, _lw_clampf. |
ui_fs.cpp | Registers the board filesystem with LVGL as a drive letter. |
data/*.bin, data/README.md | Image assets in LVGL binary format, and how to upload them. |
ui/ui.h / ui.c | Declarations of every object, ui_init(), the theme. |
ui/ui_<Screen>.c | One per screen: creates its widgets, styles, events. |
ui/ui_helpers.h / .c | The helpers generated event code calls - screen change, flag and property setters, animations. |
ui/ui_events.h / .c | Yours. 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.