PyDevices
PyDevices Portal

One display & hardware contract for MicroPython, CircuitPython, and CPython — from bare metal to the browser.

The same driver, event, and display code runs unmodified on bare-metal MicroPython and CircuitPython boards, as native CPython wheels on desktop and Android, and directly in a browser tab — no rewrites, no plugins.

Live Pure-Python Device

1: Core Platform & Board Contract

Standard hardware driver engine and companion reference code.
Core Flagship

pydevices

Unified pure-Python hardware abstraction layer and core device contract for MicroPython, CircuitPython, CPython, direct WebAssembly, Pyodide, and Android.

Visit site
C Bus Usermod

displayif

High-performance C hardware bus engines (SPI, I2C, Intel 8080, RGB/DPI, MIPI DSI) and native usermod display drivers for MicroPython and CircuitPython.

Visit site
C Audio Usermod

audioif

CircuitPython's audio system (audiocore, synthio, audiomixer, effects, audiomp3) ported to MicroPython and CPython, extending CircuitPython along the way: 53 classic instruments (audioinstruments), 43 effects (audioeffects), dynamics, routing, convolution, and offline rendering. Ships as pydevices-audioif with pydevices-audioinstruments and pydevices-audioeffects.

Visit site
Companion Showcase

pydevices-examples

Comprehensive example code, direct MicroPython WebAssembly demos, board configurations, and multi-interpreter showcase benchmarks.

Visit site

2: Python Framebuffers & GUI Toolkits

Zero external native dependencies — runs on any Python 3 host.
0-Dependency

pygraphics

Pure-Python 2D graphics library with drawing primitives, anti-aliased font rendering, paletted surface blitting, and area-dirtying pipelines.

Visit site
Pure-Python UI

pdwidgets

Lightweight object-oriented UI widget framework including buttons, sliders, progress bars, labels, and event routing for PyDevices screens.

Visit site
Color Engine

palettes

Color management library with RGB565 / RGB888 conversion, HSL / HSV color spaces, palette swatches, and smooth gradient generators.

Visit site

3: LVGL Native Extensions & Binding Generator

Single-source LVGL C header binding generator and native interpreter modules.
LVGL Generator

lvgl-bindings

Automated binding generator parsing LVGL C headers into native CPython extensions, MicroPython usermods, and CircuitPython modules.

Visit site
MicroPython C

lvgl-micropython

Native MicroPython C module integrating LVGL v9 graphics engine with displayif bus drivers across ESP32, RP2040, and i.MX RT targets.

Visit site
CPython / Pyodide

lvgl-python

Pre-built CPython extension wheels and Pyodide WASM packages bringing LVGL v9 to desktop Linux, macOS, Windows, and web browsers.

Visit site
CircuitPython C

lvgl-circuitpython

CircuitPython native C module providing LVGL v9 bindings and displayif integration for Adafruit Feather and SAMD51 / RP2040 boards.

Visit site

4: App Hosts & Mobile

Deploy PyDevices apps directly to desktop browsers or mobile APKs.
PWA Template

pyscript-template

Progressive Web App starter template repository for deploying offline-capable client-side PyDevices applications on GitHub Pages.

Visit site
Android APK

android-template

Pre-configured python-for-android build recipes and Buildozer project template for packaging PyDevices applications into native Android APKs.

Visit site

5: Developer Tools & Infrastructure

MIP package indexing, multi-usermod builds, and serial/FTP IDE extensions.
IDE Extension

mpftp

Connect MicroPython and CircuitPython boards from VS Code, Cursor, or the CLI: dual-pane file transfer, in-editor REPL, firmware flash, mip/circup, plus RPC, MCP, and an optional browser PWA.

Visit site
MIP Index

mip

Single source of truth (SoT) for precompiled MicroPython .mpy bytecode packages and pure-Python library distributions across the PyDevices ecosystem.

Visit site
Build Tool

cmods

Out-of-tree C build workspace for compiling MicroPython and CircuitPython firmware binaries with displayif drivers and LVGL bindings.

Visit site
micropython-pydevices

micropython-pydevices

The PyDevices patch queue for MicroPython, kept like a distribution keeps one: an ordered, provenance-tracked patch series over a pinned upstream release, with profiles for Windows networking/FFI, desktop, and WebAssembly, plus the wasm bridge usermod and variant.

Visit site

Architecture & Layers

How PyDevices abstractions stack from the application down to the hardware — the amber-outlined Core Stack below is the pydevices package itself, the product this org ships; everything above it is optional tooling and everything below it is platform glue.
graph TD %% App Layer subgraph AppLayer ["Application Layer"] direction LR LVGL["LVGL App"] PDW["pdwidgets App"] PYG_APP["pygraphics App"] DIR["Direct App"] end %% Frameworks Layer subgraph Frameworks ["Graphics Frameworks"] PYG["pygraphics Core"] end %% Core Stack — this boundary IS the pydevices package, the product PyDevices ships subgraph CoreStack ["🐍 pydevices — the Core Stack"] %% Routing / Event Layer subgraph EventLayer ["Event & Routing Layer"] APPDEV["appdev
(Traffic Controller & Host Loop)"] end %% Device Abstraction Layer subgraph DeviceLayer ["Core Device Contract"] direction LR DISP["displaydev
(fbdisplay, psdisplay, wasmdisplay, etc.)"] AUDIO["audiodev
(Tone & PCM)"] TIMER["multimer
(Async & Sync Timers)"] end end %% Hardware / Interpreter Layer subgraph HardwareLayer ["Interpreters & Platforms"] direction LR MP["MicroPython (MCU)"] CP["CircuitPython (MCU)"] UNIX["Unix Desktop
(CPython, MicroPython, CircuitPython)"] WIN["Windows Desktop
(CPython, MicroPython)"] WASM["WebAssembly (Browser)"] AND["Android"] end %% Lowest Level Bindings Layer subgraph BindingsLayer ["Lowest Level (Native/OS Bindings)"] direction LR DIF["displayif
(C-usermod Bus Engine)"] DIO["displayio
(CircuitPython Built-in)"] SDL["sdl2
(via usdl2.py or displayif/usdl2)"] W32["win32
(via uwin32.py)"] DOM["DOM / HTML5 Canvas"] end %% Connections LVGL --> APPDEV PDW --> PYG PYG_APP --> PYG PYG --> APPDEV DIR -.-> APPDEV DIR --> DISP APPDEV --> DISP APPDEV --> AUDIO APPDEV --> TIMER %% Connect Subgraphs cleanly to avoid spaghetti lines DeviceLayer --> HardwareLayer %% Map Platforms down to Native Bindings MP --> DIF CP --> DIO UNIX --> SDL WIN --> W32 WASM --> DOM AND --> SDL classDef core fill:#24292e,stroke:#d97706,stroke-width:2px,color:#fff; classDef layer fill:#f8fafc,stroke:#cbd5e1,stroke-width:1px,color:#0f172a; classDef hardware fill:#f1f5f9,stroke:#94a3b8,stroke-width:1px,color:#334155; classDef binding fill:#e2e8f0,stroke:#64748b,stroke-width:1px,color:#1e293b,stroke-dasharray: 4 4; class APPDEV,DISP,AUDIO,TIMER core; class LVGL,PDW,PYG_APP,DIR,PYG layer; class MP,CP,UNIX,WIN,WASM,AND hardware; class DIF,DIO,SDL,W32,DOM binding; style CoreStack fill:#fffbeb,stroke:#f59e0b,stroke-width:3px