guilabOpen the editor
For embedded, desktop and kiosk interfaces

Design a screen once. Get the code for 10 targets.

Draw your interface on a canvas the size of your real display, and export clean code for LVGL, Arduino, MicroPython, Tkinter, PySide6, Slint or the web, arranged for STM32CubeIDE, PlatformIO, Arduino IDE or ESP-IDF.

Free to try without an account. Your design stays in your browser.

The smart thermostat example (3.5″ 480×320 generic), exactly as guilab exports it to HTML. Try the + and − buttons and Schedule.

code targets
10
kinds of widgets
27
ready-made examples
35
displays and boards
50

From a sketch to your firmware in three steps

guilab only writes the interface. Your project, your main program and your hardware set-up stay yours.

  1. 1

    Pick your display

    Choose the module or board you use from 50 presets (M5Stack, Cheap Yellow Display, LILYGO, Waveshare and bare modules), or type any size.

  2. 2

    Draw the screens

    Drag 27 kinds of widgets onto a canvas of exactly that size: buttons, sliders, gauges, charts, keyboards. Link buttons to other screens.

  3. 3

    Export for your project

    Choose the target and your tool. You get one folder with the UI files and a short README that says where it goes in the project you already have.

Made for people who ship devices

10 targets from one design

LVGL 9 and 8, LVGL MicroPython, Arduino_GFX, TFT_eSPI, MikroE Visual TFT, Tkinter, PySide6, Slint and HTML. Switch target any time; the design stays the same.

Your code survives every export

Each export has exactly one file that is yours. What you write between its USER CODE markers is merged back in when you export again, like STM32CubeIDE does.

Arranged for your tool

STM32CubeIDE, PlatformIO, Arduino IDE, ESP-IDF, a Python editor or Thonny: the files come in the layout that tool expects, with a step-by-step README.

Several screens, real navigation

A button can open another screen. guilab writes the screen-switching code for every target.

Components and a screen library

Save a group of widgets as a component and reuse it. Add ready-made screens (5 so far: launcher, settings, Wi-Fi, PIN pad, dialog) laid out for your display.

Backgrounds, gradients, icons

Built-in backgrounds, a gradient maker, your own pictures, and 161 icons in 3 sets, with their licenses added to the export.

Checked with the real tools

The test suite compiles the generated C against the real LVGL 9.2.2 and 8.4.0 headers, runs the Python, and opens the HTML in a real browser.

Honest about each widget

Not every target has every widget. The editor shows, per widget and target, whether it is native, emulated or approximated, before you export.

Free to try, no account

Open the editor and start. Your design is kept in your browser; save it as a file whenever you like. An account adds cloud projects and more targets.

Start from an example

35 designs for medical, automotive, industrial, home and IoT devices, from a 1.28″ round watch to a 7″ panel. These are their real HTML exports.

All examples →

One design, ten outputs

Microcontrollers, a Raspberry Pi, a desktop app or a browser kiosk: the same screens become code for each. Three targets need no account at all; a free account and the Regular plan open the rest.

See the plans →
TargetLanguageRuns onAvailable with
HTML / CSS / JSHTML, CSS, JavaScriptAny browser, kiosksNo account needed
LVGL v9CSTM32, ESP32, RP2040 and other MCUsNo account needed
Tkinter / ttkbootstrapPythonRaspberry Pi, any desktopNo account needed
LVGL v8CProjects still on LVGL 8Free account
PySide6 / QtPythonRaspberry Pi, any desktopFree account
SlintSlint + PythonEmbedded Linux and desktopRegular plan
LVGL MicroPythonMicroPythonESP32 and others with LVGL MicroPythonRegular plan
Arduino_GFXC++ (Arduino)Arduino boards with a TFTRegular plan
TFT_eSPIC++ (Arduino)ESP32 / ESP8266 / RP2040 with a TFTRegular plan
MikroE Visual TFTC (mikroC)MikroElektronika boardsRegular plan

Ready to draw your first screen?

Open the editor, pick your display, and export. No sign-up, nothing to install.