Output Structure
A map of everything the service writes to disk when you export: which files are yours, which are generated, and where fonts and images land.
When you export, the service writes to an LVGL project. This page is the map: what each file is, where assets go, and which pieces the service owns versus the ones it hands to you.
Everything here lands under the project directory you set for the service (the
projectDir setting, or your workspace root if you leave it empty). See
Get started for where that setting lives.
The project on disk
A freshly exported project looks like this:
your-project/
├── project.xml # project root: display size, required
├── globals.xml # tokens: colors, fonts, images, styles
├── components/
│ ├── card_summary/
│ │ └── card_summary.xml # one folder per component
│ ├── nav_button/
│ │ └── nav_button.xml
│ └── base/ # shared base library (row, column, panel, h1–h4)
│ └── …
├── screens/
│ ├── screen_home.xml # one file per screen, safe-named
│ └── screen_settings.xml
├── images/
│ └── logo.png # extracted image + vector assets
├── fonts/ # your TTFs go here (read, never overwritten)
│ └── FONTS-MISSING.md # written only when a font can't be resolved
└── .lvgl-flow/ # internal state, leave it aloneNot every export writes every folder. An All Globals export touches globals.xml
and its assets; a Selected Screens export writes the screens plus the components and
tokens they reference. See Exporting for what each action's scope covers.
What each file is
project.xml: the project root LVGL loads first. It carries the <display> block
built from the display size you set in Project mode, which is why that field
gates every export. Required, and owned by the service.
globals.xml holds your design tokens in one place: color, number, and string variables,
font declarations, and the paint / text / effect / grid styles from your file. Every
export that ships tokens rewrites this, so components and screens always resolve against a
current set.
components/<name>/<name>.xml: one nested folder per component, matching LVGL's
component layout (never a flat file). Variants fold into states inside the component. The
service owns these.
components/base/… is a small shared base library the generated components extend:
layout primitives like row, column, and panel. It's
demand-driven. The service only writes the bases your components actually reference.
screens/<safe_name>.xml: one file per screen, with the name normalized for the
filesystem.
images/<name>.png: image and vector fills pulled out of your design and written as
files. Anything that wasn't already a PNG is re-encoded to PNG on the way out, so LVGL has
a consistent format to load.
The .lvgl-flow/ folder is the service's own bookkeeping: component, screen, and
widget-name records plus an export manifest and asset sidecars. It's how re-exports keep
names stable and know which files they own. You never edit it by hand; it isn't part of
the LVGL build.
Fonts
Fonts are the one place the service reaches outside your project, and it does it in a fixed order. For every font your design references, it tries:
Your fonts/ folder. Drop a TTF into <project>/fonts/ and the service uses it
directly. This folder is read-only from the service's side. It never overwrites what you
put there.
Google Fonts. If a face isn't on disk, the service fetches it, unless the service is running with offline fonts on, in which case it skips this step entirely.
The bundled Inter placeholder. An opt-in fallback (the "Use Inter for missing fonts" toggle in Project settings) so a missing face doesn't leave a screen blank.
FONTS-MISSING.md. If nothing resolves, the service records the gap in this file at
the project root instead of failing the export.
A font that can't be found is a non-fatal warning, not a stopped export. The rest of
your project still writes. Check FONTS-MISSING.md
when text renders with the wrong face.
Last updated on
Inspect Styles
Read any layer's LVGL style straight from Figma and copy it into your XML: colors, borders, radius, and size, with no export needed.
Updating & File Ownership
Re-export as often as you like: the service regenerates its own files while leaving anything you've taken over untouched, so your hand edits are always safe.