GUIslice embedded touchscreen GUI library in C for Raspberry Pi, Arduino & ESP8266 / ESP32, supporting SDL 1.2, SDL2 and Adafruit-GFX touch TFT
Clone or download

GUIslice library

Build Status GitHub Issues Contributions welcome License

A lightweight GUI framework suitable for embedded displays

Example 1 Example 5


  • Pure C library, no dynamic memory allocation
  • Widgets: text, images, buttons, checkboxes, radio buttons, sliders, radial controls, scrolling textbox / terminal, graphs, etc. plus extensions and multiple pages.
  • Platform-independent GUI core currently supports: SDL1.2, SDL2.0, Adafruit-GFX, TFT_eSPI
  • Devices: Raspberry Pi, Arduino, ESP8266 / NodeMCU, ESP32, Feather M0 (Cortex-M0), nRF52 (Cortex-M4F), LINUX, Beaglebone Black, M5Stack, STM32
  • Typical displays: PiTFT, Waveshare, Adafruit TFT 3.5" / 2.8" / 2.4" / 2.2" / 1.44", OLED 0.96", 4D Cape
  • Display drivers include: ILI9341, ST7735, SSD1306, HX8357
  • Touchscreen control including: STMPE610, FT6206, XPT2046, tslib
  • Foreign characters / UTF-8 encoding (in SDL mode)
  • No GUIslice installation -- just add include files and go!
  • LINUX Dependencies: sdl, sdl-ttf, optional: tslib
  • Arduino Dependencies: TFT_eSPI or Adafruit-GFX plus display / touch driver libraries


Example 3 Example 4 Example 2

Device Configuration

  • The following table lists a number of devices that have been tested with GUIslice and the recommended configuration modes and test examples.


Important Note for Arduino Users

  • The baseline Arduino (ATmega328P) devices have very limited SRAM memory (2KB SRAM, 32KB FLASH). Therefore, it is important that GUI elements are stored in FLASH whenever possible. A set of examples that demonstrate this method are located in \arduino_min. The examples in \arduino don't use the FLASH optimizations and are less likely to run on these limited devices.
  • Other Arduino variants and devices such as ATmega2560 (8KB SRAM, 256KB FLASH), ESP8266, Node-MCU, Feather M0, etc. tend to work much better as there is far more SRAM and FLASH available.
  • By default, DEBUG_ERR is enabled on many devices to provide error messages via the Serial Monitor interface. However, if further reduction of FLASH memory is necessary, disable DEBUG_ERR in the GUIslice_config_*.h.