Portability & platforms¶
Portability is PyDisplay's defining feature. Write your display, input, and timing code once against board_config, and it runs unchanged across every supported runtime and target below. This page is the single home for the platform matrix; each row links to platform-specific notes.
Where PyDisplay runs¶
| Runtime | Microcontrollers | Unix / Linux | Windows | Browser | Jupyter Notebook |
|---|---|---|---|---|---|
| MicroPython | ✅ | ✅ | ✅ | ✅ PyScript · Wokwi | — |
| CircuitPython | ✅ | ✅ | — | — | — |
| CPython | — | ✅ | ✅ | — | ✅ Jupyter |
How portability works¶
The same import works on every platform:
from board_config import display_drv, broker
What changes is which display backend board_config selects — automatically on desktop, PyScript, and Jupyter, or explicitly via a per-board config on hardware:
| Backend | Used on | Selected by |
|---|---|---|
BusDisplay |
MicroPython / CircuitPython MCUs (SPI / I80) | board config |
FBDisplay |
CircuitPython framebuffer displays (RGB, USB video) | board config |
SDLDisplay |
CPython, MicroPython Unix, CircuitPython Unix (SDL2) | auto / board_configs/sdldisplay/ |
PGDisplay |
CPython desktop (PyGame — easy on Windows) | auto / board_configs/pgdisplay/ |
PSDisplay |
PyScript browser canvas | auto |
JNDisplay |
Jupyter Notebook | auto |
Input is just as portable: a mouse on the desktop, a finger on a touchscreen, and a tap in the browser all arrive as the same events. Timers come from multimer, which picks a backend (machine.Timer, librt, threads, polling, SDL, or asyncio) to suit the host.
See Displays for backend details and Architecture for how the pieces fit together.
Platform notes¶
- MicroPython — MCUs, Unix, Windows, bus drivers, frozen firmware.
- CircuitPython — MCUs and Unix;
framebufferioand theframebufshim. - CPython desktop — SDL2 / PyGame setup for Linux, macOS, and Windows.
- Jupyter Notebook — interactive display widget and async execution model.
- Run the notebook interactively — JupyterLab / VS Code setup (the RTD notebook page is static).
- PyScript — running in the browser.
Build GUIs across platforms¶
Because the backend is portable, anything built on PyDisplay inherits that portability — including the LVGL sister projects for MicroPython, CircuitPython, and CPython. You can even prototype an LVGL app in Jupyter and run it unchanged on a microcontroller.