Make UI development easier with 30+ widgets, anti-aliasing, animations, multi language, Arabic and Persian text, encoder and keypad usage, etc
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.
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 requirementsLVGL 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
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.
Interactive example! Try it out!
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
- Horzizontal and vertical gradients
- Box shadow
- Skew lines
- Scale and rotate images or any widget
No images were used in this UI. Try it out!
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.
A slider widget styled in many different ways.
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 policices 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.
Try out the flex layout in action!
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 typesettings engine supports Arabic, Persian, Hebrew, Thai, Chinese, Janaese, 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.
Any library can tranform images, but in LVGL we pushed it only 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.
Try to rotate and zoom the card with the arc and the slider!
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.
Let's play with scrolling!
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 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.