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.

Get Started installs the Python packages, with pip on a desktop or mip on a board. To build MicroPython firmware with the modules compiled in, run curl -fsSL https://pydevices.github.io/install.sh | sh and follow the guide on the micropython-pydevices page.

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

audiodsp

CircuitPython's audio system (audiocore, synthio, audiomixer, effects, audiomp3) ported to MicroPython and CPython, extending CircuitPython along the way: dynamics, routing, convolution, and offline rendering. On PyPI as pydevices-audiodsp; the instrument and effect libraries built on it ship from audiocomponents.

Visit site
C Audio Driver

audioif

The part of the audio stack that knows what a thread is, where the clock comes from and where the sound goes: a pinned task and the I2S peripheral on ESP32, a native thread on unix and Windows, and a CircuitPython-shaped audiobusio.I2SOut over all of it. With it in a firmware, a graph keeps an exact clock while a screen redraws and a USB stack runs, and audiodev plays through it without being asked. The portable half of the pump, and every DSP node, is audiodsp.

Visit site
Pure-Python Audio

audiocomponents

The instrument and effect libraries for audiodsp: audioinstruments (55 modelled classics, from the TR-808 to the DX7) and audioeffects (45 effect classes and racks), pure Python on MicroPython and CPython. Ships as pydevices-audioinstruments and pydevices-audioeffects, each a standalone distribution and a MIP package.

Visit site
C USB Usermod

usbif

A board a computer sees as a sound card, a MIDI instrument, a keyboard, a drive or a webcam — and, on the same board, a USB host that a keyboard, thumb drive, MIDI controller or camera plugs into. One of the PyDevices *if modules, with displayif, audioif and cameraif: a native C module with a thin, stable Python surface that runs unchanged on a workstation.

Visit site
C Camera Usermod

cameraif

Point the board at something and read the frame. The sensor is found by probing rather than named in code, so a different camera is a build-time option away, not a rewrite. Hardware JPEG, zero-copy frames and hardware scaling straight into a display's scanout buffer, with every rate in its README measured on the board it names.

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

Native C and pure-Python 2D graphics library with drawing primitives, bitmap 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 output, an HSV color wheel, RGB color cubes, Material Design swatches, and Win16 color names.

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 Linux, Windows, Android, 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, over USB or Wi-Fi: dual-pane file transfer, in-editor REPL, firmware builds and flashing, 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
Runtime Overlay

micropython-pydevices

The PyDevices patch queue for MicroPython, kept like a distribution keeps one: an ordered, provenance-tracked patch series over the pinned upstream release (v1.29.0), with presets, boards and variants that build PyDevices modules into firmware with upstream's own make.

Visit site
Browser IDE

workbench

A ViperIDE fork with a built-in WebAssembly MicroPython simulator: edit, run, and debug PyDevices code against a simulated board entirely in the browser, no hardware required.

Visit site
VST3 Plug-in

mpvst

Programmable VST3 instruments and effects: every audiocomponents instrument and effect as a named plug-in, each instance running its Python in a sidecar process. Installers for Windows and Linux; nothing has to be built.

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 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;