Open-Awesome
CategoriesAlternativesStacksSelf-HostedExplore
Open-Awesome

© 2026 Open-Awesome. Curated for the developer elite.

TermsPrivacyAboutGitHubRSS
  1. Home
  2. MicroPython
  3. micro-gui

micro-gui

MITPython

A lightweight MicroPython GUI library for displays with framebuf drivers, supporting input via pushbuttons, encoders, or touchpads.

GitHubGitHub
351 stars52 forks0 contributors

What is micro-gui?

micropython-micro-gui is a lightweight GUI library for MicroPython that enables interactive interfaces on displays with framebuf-based drivers. It solves the problem of adding user input to embedded displays without touchscreens by supporting pushbuttons, encoders, and other input devices, making it ideal for low-cost hardware projects.

Target Audience

Embedded developers and hobbyists building interactive devices with MicroPython on platforms like ESP32, Raspberry Pi Pico, or Pyboard, especially those using non-touch displays.

Value Proposition

It offers a portable, RAM-efficient GUI with a rich widget set and flexible input options, providing a viable alternative to touch-based libraries for cost-sensitive or resource-constrained projects.

Overview

A lightweight MicroPython GUI library for display drivers based on framebuf, allows input via pushbuttons. See also micropython-touch.

Use Cases

Best For

  • Building control panels for IoT devices with pushbutton or encoder input
  • Creating data dashboards on small embedded displays
  • Developing instrumentation interfaces with sliders, meters, and graphs
  • Prototyping low-cost embedded systems with non-touch screens
  • Adding GUI functionality to MicroPython projects on ESP32 or Pi Pico
  • Replacing touch overlays on displays where calibration is problematic

Not Ideal For

  • Applications requiring responsive touchscreen interfaces with native calibration and multi-touch support
  • Projects using ePaper or Sharp displays where slow, visually intrusive refresh rates are unacceptable
  • Display-only applications where absolute minimal RAM usage is critical (nano-gui is more suitable)
  • Teams wanting drag-and-drop GUI builders or extensive pre-styled, icon-based themes without custom coding

Pros & Cons

Pros

Portable and Lightweight

Written in pure Python, it runs on a wide range of MicroPython hosts and displays with framebuf drivers, minimizing dependencies and RAM usage as highlighted in the README's performance notes.

Rich Widget Library

Includes buttons, sliders, meters, graphs, and more for interactive data display and entry, with demos showing complex applications like linked sliders and dropdowns.

Flexible Input Methods

Supports 2-5 pushbuttons, rotary encoders, ESP32 touchpads, and custom drivers for speech or gestures, offering intuitive alternatives to touchscreens on low-cost hardware.

Asyncio Integration

Uses asyncio internally for efficient event handling but exposes a conventional callback interface, simplifying development while maintaining performance on resource-constrained devices.

Cons

Manual Hardware Configuration

Requires editing a hardware_setup.py file with specific pin assignments and display driver settings, which can be error-prone and time-consuming compared to plug-and-play solutions.

Limited Touch Support

Primarily designed for non-touch input; touch is restricted to ESP32 touchpads and lacks calibration for common resistive/capacitive touchscreens, as admitted in the Rationale section.

Performance on High-Res Displays

On large or multi-byte color displays, refresh delays can cause missed button presses, necessitating workarounds like overclocking or driver-specific asyncio yields, per the Performance notes.

Breaking Changes

As an actively developed project, it has introduced breaking changes (e.g., refresh control in Sept 2024), requiring code updates and careful version management.

Frequently Asked Questions

Quick Stats

Stars351
Forks52
Contributors0
Open Issues11
Last commit1 month ago
CreatedSince 2021

Tags

#asyncio#micropython#esp32#rotary-encoder#raspberry-pi-pico#gui-library#embedded-gui#display-drivers#framebuf

Built With

M
MicroPython
a
asyncio
P
Python

Included in

MicroPython1.8k
Auto-fetched 1 day ago

Related Projects

micropython-nano-guimicropython-nano-gui

A lightweight MicroPython GUI library for display drivers based on framebuf class

Stars662
Forks106
Last commit2 months ago
lvgllvgl

LVGL binding for MicroPython

Stars353
Forks198
Last commit1 month ago
TFT-GUITFT-GUI

Simple GUI for Pyboard and TFT touch panel displays

Stars97
Forks14
Last commit6 years ago
micropython-core2micropython-core2

MicroPython version for the M5Stack CORE2

Stars64
Forks15
Last commit4 years ago
Community-curated · Updated weekly · 100% open source

Found a gem we're missing?

Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.

Submit a projectStar on GitHub