1: Core Platform & Board Contract
Standard hardware driver engine and companion reference code.pydevices
Unified pure-Python hardware abstraction layer and core device contract for MicroPython, CircuitPython, CPython, direct WebAssembly, Pyodide, and Android.
Visit sitedisplayif
High-performance C hardware bus engines (SPI, I2C, Intel 8080, RGB/DPI, MIPI DSI) and native usermod display drivers for MicroPython and CircuitPython.
Visit siteaudioif
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 sitepydevices-examples
Comprehensive example code, direct MicroPython WebAssembly demos, board configurations, and multi-interpreter showcase benchmarks.
Visit site2: Python Framebuffers & GUI Toolkits
Zero external native dependencies — runs on any Python 3 host.pygraphics
Pure-Python 2D graphics library with drawing primitives, anti-aliased font rendering, paletted surface blitting, and area-dirtying pipelines.
Visit sitepdwidgets
Lightweight object-oriented UI widget framework including buttons, sliders, progress bars, labels, and event routing for PyDevices screens.
Visit sitepalettes
Color management library with RGB565 / RGB888 conversion, HSL / HSV color spaces, palette swatches, and smooth gradient generators.
Visit site3: LVGL Native Extensions & Binding Generator
Single-source LVGL C header binding generator and native interpreter modules.lvgl-bindings
Automated binding generator parsing LVGL C headers into native CPython extensions, MicroPython usermods, and CircuitPython modules.
Visit sitelvgl-micropython
Native MicroPython C module integrating LVGL v9 graphics engine with displayif bus drivers across ESP32, RP2040, and i.MX RT targets.
Visit sitelvgl-python
Pre-built CPython extension wheels and Pyodide WASM packages bringing LVGL v9 to desktop Linux, macOS, Windows, and web browsers.
Visit sitelvgl-circuitpython
CircuitPython native C module providing LVGL v9 bindings and displayif integration for Adafruit Feather and SAMD51 / RP2040 boards.
Visit site4: App Hosts & Mobile
Deploy PyDevices apps directly to desktop browsers or mobile APKs.pyscript-template
Progressive Web App starter template repository for deploying offline-capable client-side PyDevices applications on GitHub Pages.
Visit siteandroid-template
Pre-configured python-for-android build recipes and Buildozer project template for packaging PyDevices applications into native Android APKs.
Visit site5: Developer Tools & Infrastructure
MIP package indexing, multi-usermod builds, and serial/FTP IDE extensions.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 sitemip
Single source of truth (SoT) for precompiled MicroPython .mpy bytecode packages and pure-Python library distributions across the PyDevices ecosystem.
Visit sitecmods
Out-of-tree C build workspace for compiling MicroPython and CircuitPython firmware binaries with displayif drivers and LVGL bindings.
Visit sitemicropython-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 siteArchitecture & Layers
How PyDevices abstractions stack from the application down to the hardware — the amber-outlined Core Stack below is thepydevices package itself, the product this org ships; everything above it is optional tooling and everything below it is platform glue.
(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