🚀 Join our team at LVGL: Check out our current job openings
Features
Make UI development easier with 30+ widgets, anti-aliasing, animations, multi language, Arabic and Persian text, encoder and keypad usage, etc.
Portability
It’s open-source
LVGL is fully open source which has several advantages. First, it gives you control over the library because you can not only see, modify, compile and debug the underlying source code but you can fully obtain it. Once you download it’s yours. This independence from a single provider is a huge value. Besides that open-source encourages collaboration and sharing of knowledge. Developers worldwide contribute to improving the software, making it more reliable and feature-rich to solve real-life problems.
It’s free
LVGL is distributed under the MIT license which allows users to freely use, modify, and distribute the software without imposing complicated restrictions or limitations. It provides flexibility for developers and businesses to incorporate the software into their projects, even for commercial purposes, while maintaining attribution to the original authors.
Minimal requirements
LVGL runs on any modern MCU or MPU.
Architecture: 16, 32 or 64 bit
Clock speed: > 64MHz
RAM:
4kB + 150byte / widget (~48kB for a UI with a few screens)
Flash:
~100kB for LVGL (depends on the enabled features)
Draw buffer: > 1/10 screen size buffer for rendering
Frame buffer:
at least 1 frame buffer in a display controller, internal- or external RAM
Compiler: C99 or higher
Build system:
LVGL has no external dependencies. Just copy it into your project and compile it with the other files of your project
UI Features
Many Widgets
LVGL comes with 30+ built in widgets, such as Arc, Bar, Calendar, Chart, Checkbox, Drop-down list, Keyboard, Meter, Message box, Switch, Table, Tabview, Text area.
With these widgets, what you see in smartphone apps can be realized with LVGL as well.
These widgets can be created and deleted real time. This way you can save RAM by dynamically creating only currently visible screens and widgets.
Rendering features
LVGL comes with powerful software render engine which can draw anti-aliased widgets in a vector graphic way using minimal resources.
- Rectangle with radius
- Border with radius
- Horizontal and vertical gradients
- Box shadow
- Skew lines
- Arcs
- Scale and rotate images or any widget
- Masking
Styles
You can choose from 100+ style properties to style the widgets run-time. It makes possible to dynamically change the theme of the UI or even animate the styles. It also saves flash as you need to use fewer images.
The widgets can be styled in any states, like pressed, checked, focused, disabled. Any parts of the widgets can be customized as well. For example a slider is composed of a main, an indicator and a knob part, whose appearance can be freely adjusted.
On top of that, with the use of transitions you make can LVGL automatically animate the styles on state changes.
Layouts
With the use of the powerful built-in layouts you don't have to position the widgets manually.
The flex layout allows you to arrange even hundreds of items lightning fast according to the policies you can set.
The grid layout helps to add the widgets into the cells of a user defined grid and align them as you need.
Simply aligning widgets to any side of their parent or using percentage units also help a lot to easily create responsive UIs.
All these layouts are updated automatically if you change any content, size or position.
Fonts and multi-language support
You can use 1, 2, 4, 8 bit-per-pixel fonts, compressed fonts, render glyphs from TTF, or WOFF files using FreeType (for MPUs) or TinyTTF (for MCUs)
All strings are UTF-8 decoded and LVGL's type settings engine supports Arabic, Persian, Hebrew, Thai, Chinese, Japanese, Korean and many other languages. You can even mix Right-to-Left and Left-to-Right writing directions.
Fallback fonts, and emojis are also supported.
Transformations
Any library can transform images, but in LVGL we pushed it one level further.
You can rotate or scale any widget drawn by LVGL. Even nested transformations are supported on the children.
The touch gestures are transformed for the widgets, so for example, lists scroll in their rotated direction.
Scrolling
Smooth scrolling is crucial to make an impressive, user friendly, smartphone-like user experience.
In LVGL scrolling is super simple: if a widget's children are out of the widget's bounding box, the widget will be scrollable. That's it. No need for a special scrollable container or any extra tricks.
Snapping, Elastic scrolling, Scroll momentum, scroll chaining are all supported.
Drivers
Displays
To make your display work with LVGL all you need is a function which can copy the rendered image to the display. If you have it you can integrate LVGL in 10 minutes.
You can choose from multiple buffering strategies including partial refreshing, double buffering, and many others.
Other features like rendering on transparent background to create OSD menus, multiple display support, or custom color format handling makes LVGL really versatile and powerful.
Input devices
Input devices can be also integrated via a single “read callback” that LVGL will call to get the state of the given input device.
Beside touch pad and mouse the LVGL UIs can be used with keypad, keyboard (“Tab navigation”) or even a single rotary encoder. External buttons can be integrated to click widgets on the UI directly.