Nano-GUI

August 12, 2026 · View on GitHub

Nano-GUI by Peter Hinch — lightweight GUI for memory-constrained MicroPython boards.

pydevices-examples does not vendor Nano-GUI in the git repo. color_setup.py calls fetch_ph_gui to install the gui/ tree into utils/ and patch pygraphics.FrameBuffer isinstance checks. Display wiring uses displaybuf.py.

Requirements

ComponentLocationNotes
board_config.pypydevices/board_configs/display and neutral touch setup
color_setup.pylib/utils/Ships with pydevices-examples — fetches nano-gui, creates ssd
fetch_ph_gui.pylib/utils/mip install + FrameBuffer patches
gui/lib/utils/gui/Upstream — installed by fetch (not in git)
uctypes.pylib/utils/CircuitPython shim for nano-gui writer.py
utils.pathlib/utils/path.pyDev clone — puts utils/ on sys.path

Peter Hinch's drivers/ tree is for bare-metal MCU displays. With pydevices-examples you use color_setup.ssd instead; you do not need drivers/.

Install the gui package

Usually you do not install manually — importing color_setup runs fetch_ph_gui("micropython-nano-gui").

Full clone (development)

curl -sL https://github.com/peterhinch/micropython-nano-gui/archive/refs/heads/master.tar.gz \
  | tar xz --strip-components=2 -C src/utils micropython-nano-gui-master/gui

Or via mip / our full package manifest:

import mip
mip.install("github:PyDevices/pydevices-examples/packages/micropython-nano-gui.json", target="./utils")

lib/utils/gui/ is gitignored. Only one Hinch GUI may occupy utils/gui/ at a time; fetch_ph_gui empties the directory when switching.

Example

lib/examples/nano_gui_simpletest.py — hardware verification from the upstream docs.

Browser gallery: no special header — color_setup calls fetch_ph_gui("micropython-nano-gui") (live loader).

cd pydevices-examples/lib
micropython -i utils/path.py examples/nano_gui_simpletest.py

See also