# State Of LVGL Support

**URL:** <https://genode.discourse.group/t/state-of-lvgl-support/365>\
**Category:** Developer's Corner\
**Created:** [September 27, 2026, 10:25pm UTC](https://genode.discourse.group/t/state-of-lvgl-support/365 "2026-09-27T22:25:18Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![jjkarcher](https://avatars.discourse-cdn.com/v4/letter/j/a9adbd/32.png) [@jjkarcher](https://genode.discourse.group/u/jjkarcher)\
**Post date:** [September 27, 2026, 10:25pm UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/1 "2026-09-27T22:25:18Z")

</div>

Inspired by @jschlatow’s “System Info” component, I am playing a little bit with LVGL. Following the System Info example, I was able to build a minimal component. Very nice!

Before continuing too much further, I have a few questions:

1. Where is the canonical version of the “LVGL” and “LVGL\_Support” components (e.g., “jschlataw/goa-projects/ports”)?
2. In the “Lvgl.Config” struct, there are only callback slots for Resize and Timer. Do we need to add the other callbacks for Events, etc.? (The README mentions limited support for interaction.)

If any required enhancements are simple enough, I might finally be able to contribute something to the community. 🙂

---

<div class="post-metadata">

**Author:** ![jschlatow](https://dub1.discourse-cdn.com/flex006/user_avatar/genode.discourse.group/jschlatow/32/12_2.png) [@jschlatow](https://genode.discourse.group/u/jschlatow)\
**Post date:** [September 28, 2026, 6:54am UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/2 "2026-09-28T06:54:46Z")

</div>

> [@jjkarcher](#):
>
> 1. Where is the canonical version of the “LVGL” and “LVGL\_Support” components (e.g., “jschlatow/goa-projects/ports”)?

Yes, that is the place.

> [@jjkarcher](#):
>
> 1. In the “Lvgl.Config” struct, there are only callback slots for Resize and Timer. Do we need to add the other callbacks for Events, etc.? (The README mentions limited support for interaction.)

Events are injected into LVGL, thus you should be able to use LVGL’s event handling mechanisms. The support is merely not tested in practice very well as far as I know. Maybe @jws has some interactive LVGL-based application running that I don’t know of as he originally created the port.

Thus, no, there is not required enhancement that I’m currently aware of other than experimenting with it and building useful LVGL applications 😉

---

<div class="post-metadata">

**Author:** ![jws](https://dub1.discourse-cdn.com/flex006/user_avatar/genode.discourse.group/jws/32/104_2.png) [@jws](https://genode.discourse.group/u/jws)\
**Post date:** [September 28, 2026, 10:04am UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/3 "2026-09-28T10:04:26Z")

</div>

To be honest I haven’t played around with LVGL on Genode for quite a while now.

That being said, the support for interactive applications was enough for _formular-like_ stuff, e.g., a minimal UI for `fetchurl` where URLs could be entered via keyboard and clipboard. That was one of the prototypes I developed the `lvgl_support` library with.

> Thus, no, there is not required enhancement that I’m currently aware of other than experimenting with it and building useful LVGL applications 😉

I want to second that whole-heartedly 👍.

---

<div class="post-metadata">

**Author:** ![jjkarcher](https://avatars.discourse-cdn.com/v4/letter/j/a9adbd/32.png) [@jjkarcher](https://genode.discourse.group/u/jjkarcher)\
**Post date:** [September 29, 2026, 4:16am UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/4 "2026-09-29T04:16:04Z")

</div>

Thanks to both of you for the quick responses! I did a quick button test, and it worked fine.

Quick question about function naming - I noticed that a few of the function names were shortened from the LVGL names (e.g., “lv\_scr\_act()” vs. “lv\_screen\_active()”, “lv\_btn\_create()” vs. “lv\_button\_create()”). Was there a specific reason for that?

Thanks again!

---

<div class="post-metadata">

**Author:** ![jws](https://dub1.discourse-cdn.com/flex006/user_avatar/genode.discourse.group/jws/32/104_2.png) [@jws](https://genode.discourse.group/u/jws)\
**Post date:** [September 29, 2026, 6:33am UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/5 "2026-09-29T06:33:29Z")

</div>

> Quick question about function naming - I noticed that a few of the function names were shortened from the LVGL names (e.g., “lv\_scr\_act()” vs. “lv\_screen\_active()”, “lv\_btn\_create()” vs. “lv\_button\_create()”). Was there a specific reason for that?

The port is using an older version of LVGL, `8.3.x`, and that’s its API naming.

Judging by the website `9.6.0` is current by now - perhaps an update of the port would be in order?

---

<div class="post-metadata">

**Author:** ![jjkarcher](https://avatars.discourse-cdn.com/v4/letter/j/a9adbd/32.png) [@jjkarcher](https://genode.discourse.group/u/jjkarcher)\
**Post date:** [September 29, 2026, 10:29pm UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/6 "2026-09-29T22:29:49Z")

</div>

Thanks! I made a quick attempt at using “goa import” to pull in and build the 9.6.0 version, but there were enough changes that it doesn’t look trivial (to me, at least).

In any case, 8.3.x seems like a stable release, and should support all my foreseeable needs.

So far, so good with the elementary testing I’ve done so far, and it looks like a pleasant framework to work with. We’ll see what follows…

Thanks again!

---

<div class="post-metadata">

**Author:** ![jjkarcher](https://avatars.discourse-cdn.com/v4/letter/j/a9adbd/32.png) [@jjkarcher](https://genode.discourse.group/u/jjkarcher)\
**Post date:** [October 11, 2026, 10:17pm UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/7 "2026-10-11T22:17:04Z")

</div>

I am able to run my minimal LVGL test app on the PC and PinePhone using goa-testbed - very nice!

I notice that touches on the PinePhone don’t generate click or press events in LVGL. (I haven’t tested touch on the PC yet.) Is there a configuration change needed for this, or is it a current limitation?

---

<div class="post-metadata">

**Author:** ![jschlatow](https://dub1.discourse-cdn.com/flex006/user_avatar/genode.discourse.group/jschlatow/32/12_2.png) [@jschlatow](https://genode.discourse.group/u/jschlatow)\
**Post date:** [October 12, 2026, 5:39am UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/8 "2026-10-12T05:39:34Z")

</div>

Touch events are not processed by lvgl\_support, yet, and simply ignored.

---

<div class="post-metadata">

**Author:** ![jws](https://dub1.discourse-cdn.com/flex006/user_avatar/genode.discourse.group/jws/32/104_2.png) [@jws](https://genode.discourse.group/u/jws)\
**Post date:** [October 19, 2026, 12:23pm UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/9 "2026-10-19T12:23:17Z")

</div>

> I notice that touches on the PinePhone don’t generate click or press events in LVGL. (I haven’t tested touch on the PC yet.) Is there a configuration change needed for this, or is it a current limitation?

FWIW, I added rudimentary touch support a few years back for fooling around with LVGL on the PinePhone. The branch [jsoentgen/genode-world/lvgl-2023-12-21](https://codeberg.org/jsoentgen/genode-world/commits/branch/lvgl-2023-12-21) contains the commit.

---

<div class="post-metadata">

**Author:** ![jjkarcher](https://avatars.discourse-cdn.com/v4/letter/j/a9adbd/32.png) [@jjkarcher](https://genode.discourse.group/u/jjkarcher)\
**Post date:** [October 19, 2026, 10:20pm UTC](https://genode.discourse.group/t/state-of-lvgl-support/365/10 "2026-10-19T22:20:43Z")

</div>

Thanks! That’s along the lines of what I was going to try, but it saves me a lot of time figuring it out. 🙂
