// the find
lvgl/lv_binding_rust
LVGL bindings for Rust. A powerful and easy-to-use embedded GUI with many widgets, advanced visual effects (opacity, antialiasing, animations) and low memory requirements (16K RAM, 64K Flash).
Rust safe bindings over the LVGL C GUI library, targeting embedded systems with no_std support. Wraps LVGL via bindgen-generated unsafe bindings, then adds a codegen layer to produce ergonomic Rust APIs. Aimed at embedded Rust developers who want LVGL's widget set without writing unsafe C interop themselves.
The three-layer architecture (lvgl-sys raw bindings, lvgl-codegen generator, lvgl safe API) is the right call — keeps the unsafe surface isolated and makes adding new widget bindings mechanical rather than error-prone. no_std compatibility is genuine, not an afterthought, and the optional LVGL global allocator feature is a practical touch for memory-constrained targets. The embedded_graphics integration means you can target the long tail of displays that crate already supports without writing your own display driver. Working desktop simulator via SDL2 makes development and iteration actually usable without dedicated hardware on your desk.
Last pushed January 2025 against an older LVGL version — LVGL 9.x introduced breaking API changes and this binding is stuck behind them, so you'd be writing new firmware against a superseded library. Widget coverage is thin: images, file system, and tasks are all unchecked in the README's own feature list, which covers a lot of real UI work. The build setup is genuinely painful — you need to supply an lv_conf.h, set DEP_LV_CONFIG_PATH, and manage a git submodule tree just to get a hello world running; there's no sensible default config for prototyping. The enum alignment issue linked in troubleshooting has been open long enough to be in the README, which suggests the maintainers don't have capacity to close it.