Files
lvgl/examples
Gabor Kiss-VamosiandGitHub 331ac10a6f
Arduino Lint / lint (push) Canceled after 0s
Build Examples with C++ Compiler / build-examples (push) Canceled after 0s
MicroPython CI / Build esp32 port (push) Canceled after 0s
MicroPython CI / Build rp2 port (push) Canceled after 0s
MicroPython CI / Build stm32 port (push) Canceled after 0s
MicroPython CI / Build unix port (push) Canceled after 0s
C/C++ CI / Build OPTIONS_16BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_24BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_FULL_32BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_NORMAL_8BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_SDL - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_16BIT - cl - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_16BIT - gcc - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_24BIT - cl - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_24BIT - gcc - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_FULL_32BIT - cl - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_FULL_32BIT - gcc - Windows (push) Canceled after 0s
C/C++ CI / Build ESP IDF ESP32S3 (push) Canceled after 0s
C/C++ CI / Run tests with 32bit build (push) Canceled after 0s
C/C++ CI / Run tests with 64bit build (push) Canceled after 0s
BOM Check / bom-check (push) Canceled after 0s
Verify GDB constants are up-to-date / verify-gdb-consts (push) Canceled after 0s
Verify the widget property name / verify-property-name (push) Canceled after 0s
Verify code formatting / verify-formatting (push) Canceled after 0s
Compare file templates with file names / template-check (push) Canceled after 0s
Code Generation / Code Generation (push) Canceled after 0s
Build Docs / build-and-deploy (push) Canceled after 0s
Build .deb packages / build (push) Canceled after 0s
Validate pkg-config and CMake config / cmake (linux) (push) Canceled after 0s
Validate pkg-config and CMake config / pkgconfig (linux) (push) Canceled after 0s
Validate pkg-config and CMake config / cmake (linux-3d) (push) Canceled after 0s
Validate pkg-config and CMake config / pkgconfig (linux-3d) (push) Canceled after 0s
Test API JSON generator / Test API JSON (push) Canceled after 0s
Install LVGL using CMake / build-examples (private) (push) Canceled after 0s
Install LVGL using CMake / build-examples (public) (push) Canceled after 0s
Check Makefile / Build using Makefile (push) Canceled after 0s
Check Makefile for UEFI / Build using Makefile for UEFI (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Script Check (scripts/perf/tests/benchmark_results_comment/test.sh) (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Script Check (scripts/perf/tests/filter_docker_logs/test.sh) (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Script Check (scripts/perf/tests/serialize_results/test.sh) (push) Canceled after 0s
Hardware Performance Test / Hardware Performance Benchmark (push) Canceled after 0s
Hardware Performance Test / HW Benchmark - Save PR Number (push) Canceled after 0s
Performance Tests CI / Perf Tests OPTIONS_TEST_PERF_32B - Ubuntu (push) Canceled after 0s
Performance Tests CI / Perf Tests OPTIONS_TEST_PERF_64B - Ubuntu (push) Canceled after 0s
Port repo release update / run-release-branch-updater (push) Canceled after 0s
Static Checks / Static Checks (push) Canceled after 0s
Verify Font License / verify-font-license (push) Canceled after 0s
Verify Kconfig / verify-kconfig (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark 32b - lv_conf_perf32b (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark 64b - lv_conf_perf64b (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Save PR Number (push) Canceled after 0s
docs(examples): add get_started XML examples (#10151)
2026-07-20 13:09:20 +02:00
..

LVGL Examples

The examples shown in the widget documentation live here. The fastest way to add one is to copy an existing example next to the one you're adding and adjust it — the surrounding files already follow every convention.

Two kinds

  • XML (preferred)lv_example_<module>_<feature>.xml in its own <module>/<feature>/ folder. Use for anything declarative: layout, styling, properties, data binding. The C examples are generated from it, see below.
  • C-onlylv_example_<module>_<feature>.c directly in the <module>/ folder. Use only when the point is imperative C that XML can't express (event callbacks, animations, draw events), or a feature XML doesn't support yet.

Most widgets need many XML examples and zero or one C-only example.

Good examples to copy

Generating the C

You write .xml; a script produces the shipped .c. Never hand-edit a generated .c — your changes will be overwritten.

python scripts/generate_examples.py [path ...]   # all examples if no path

Run it after every new or edited XML, then build to confirm it compiles. The script auto-runs scripts/code-format.py examples at the end so every generated .c ships astyle-formatted, and then wipes all .c/.h files from examples/xml_project/ (the CLI's project scaffolding) so they can't collide with the host project's source globbing.

The generator drives the LVGL Pro editor CLI (lved-cli.js), which ships with the LVGL Pro editor — see https://lvgl.io/docs/pro. The script picks it up from your PATH, or point at it explicitly:

python scripts/generate_examples.py --cli /path/to/lved-cli.js [path ...]

Hard rules

  • Fit 320×240 — every example runs in that target (see xml_project/project.xml). Size widgets to fit.
  • Reuse shared resources — subjects, consts, styles and images come from xml_project/globals.xml. Don't invent per-example subjects; add to globals.xml only if nothing fits.
  • One example = one feature. Show a meaningful variation, not defaults.
  • Each example is surfaced in the docs with <LvglExample>.

Comments

Every XML example opens with a comment block directly above <screen>, plus one in-view hint. Keep the layers distinct — never repeat a sentence:

  • @title — short, capitalized; mirrors the on-screen label. No "XML".
  • @brief — one sentence, less than 80 chars, ending with a period.
  • Description — 23 sentences after @brief: name the specific attributes/values that vary and why it's interesting. Self-contained (readable without the doc page).
  • 💡 hint — first child of <view>: imperative and specific about what to do and what visibly changes ("Drag each arc; lower change_rate lags behind"), not a vague "Adjust the arc".

XML syntax

The XML format and the editor are documented at https://lvgl.io/docs/pro. For the in-tree conventions, the best reference is the existing examples — match the file you copied.