PyDevices on GitHub
August 14, 2026 · View on GitHub
A map of how the PyDevices GitHub org is set up: where discussions, issues, docs, and Pages sites live. Written to answer "how do I...?" / "where do I find...?" questions later without re-deriving the answer from scratch.
Quick answers
| I want to... | Go here |
|---|---|
| Ask a question / propose an idea / show something I built | pydevices-examples Discussions |
| Find or share a one-off example that's too narrow for the official examples | pydevices-examples Discussions → Recipes |
| Report a bug or request a feature | Issues on the specific repo it affects (see repo map); use the Bug report / Feature request templates |
| Find contribution guidelines shared across repos | PyDevices/.github CONTRIBUTING.md |
| Read the org's public-facing "about us" | PyDevices/.github profile README (rendered on github.com/PyDevices) |
| Read pydevices-examples documentation | pydevices-examples/docs |
| Read pygraphics documentation | pygraphics.readthedocs.io |
| Read palettes / pdwidgets docs | palettes.readthedocs.io, pdwidgets.readthedocs.io |
| Manage Read the Docs ↔ GitHub (org app) | Read the Docs Community GitHub App (all repos); migrate legacy projects at RTD migrate-to-github-app |
| Try the library without installing anything | PyScript browser demos |
| Hardware board/driver docs (configs, contract, drivers, matrix) | pydevices Pages (docs/) |
| Talk to a board from VS Code / Cursor (REPL, files, firmware) | mpftp (Pages; agent state under ~/.mpftp/) |
Getting help: Discussions vs. Issues
- Discussions are enabled only on pydevices-examples and lvgl-bindings (the two repos most likely to get open-ended questions). Everything else routes through pydevices-examples Discussions — see the org's pinned "get help" pointer.
- Issues are enabled on every owned repo (bug reports / feature requests).
Default issue templates (
bug.yml,feature.yml) live in the org's.githubrepo and apply automatically to any repo that doesn't define its own. - If you're not sure which repo an issue belongs to, open it on pydevices-examples — per CONTRIBUTING.md, that's the routing point.
- Recipes (pydevices-examples Discussions → Recipes,
open-ended format, not answerable) is for one-off examples/how-tos that
answer a specific question well but are too narrow to promote into
src/examples/. If one gets enough traction, promote it into a real example later — this category is meant to be a low-friction incubator, not a permanent home for everything filed into it. - Wikis are disabled org-wide — reference content lives in each repo's
README.md/AGENTS.md, in pydevices-examples documentation, or on a Pages site, not in a wiki page. - Projects are disabled org-wide (org boards and per-repo Projects). Public work tracking is Issues + Discussions; there is no org kanban.
- GitHub Packages is not used. Installables go to TestPyPI / PyPI (CPython)
and micropython-lib via
mip(MicroPython) — not GHCR or other GitHub package registries.
Org profile
- About / description / website: set on the org (
https://pydevices.github.io/).
Read the Docs
MkDocs sites for pydevices-examples, pygraphics, palettes, and pdwidgets
publish to *.readthedocs.io. GitHub integration uses the org-installed
Read the Docs Community
app (all repositories — installation
149173814).
With the GitHub App, RTD receives push/PR events directly — no per-repo webhook
is required. The docs repos (pydevices-examples, pygraphics, palettes,
pdwidgets) use this app; legacy api/v2/webhook/... hooks are gone. New
projects: import from the RTD dashboard (repo list comes from the app). If an
older project still needs migrating:
Migrate to GitHub App.
Build config in each docs repo is .readthedocs.yaml + mkdocs.yml (no secrets).
Repos & Pages sites
Every product and module repo below ships a GitHub Pages site sharing the same
chrome (dark-default theme, light toggle in the header, PyDevices brand linking
to the org root) from
PyDevices.github.io's
assets/css/site.css and assets/js/site-chrome.js. Pages mount empty
#pydevices-site-header / #pydevices-site-footer elements; the script injects
identical markup (nav: Gallery, Examples, DisplayIF, Drivers, GitHub) and
theme-toggle.js binds #theme-toggle. The shared org site is the exception:
PyDevices/.github
provides org metadata and docs, but it does not publish a product Pages site of
its own. Per-repo Pages heroes use marks under assets/img/products/*.svg (or
the repo's own web/img/product.svg); the org landing cards use compact inline
icons. Header brand stays on the shared org logo.
| Repo | Role | Pages site |
|---|---|---|
| pydevices-examples | Examples, tutorials, and PyScript showcase for the PyDevices product stack | pydevices.github.io/pydevices-examples (+ PyScript demos) |
| palettes | Color palette toolkit for PyDevices | pydevices.github.io/palettes |
| pdwidgets | Cross-platform widget toolkit for PyDevices | pydevices.github.io/pdwidgets |
| lvgl-bindings | LVGL C→binding generator (source of truth for the native cmods) | pydevices.github.io/lvgl-bindings |
| cmods | Optional workspace for multi-usermod MicroPython/CircuitPython builds | (no Pages site — org landing card links to the repo) |
| displayif | Native display bus/framebuffer modules | pydevices.github.io/displayif |
| pygraphics | Native + pure-Python FrameBuffer/Area (import pygraphics); docs on RTD | pydevices.github.io/pygraphics |
| lvgl-micropython | MicroPython user C module glue for LVGL | pydevices.github.io/lvgl-micropython |
| lvgl-circuitpython | CircuitPython integration for LVGL | pydevices.github.io/lvgl-circuitpython |
| lvgl-python | Native CPython LVGL extension (import lvgl) | pydevices.github.io/lvgl-python |
| pydevices-android-template | Native Android APK application template for PyDevices | pydevices.github.io/pydevices-android-template |
| pydevices-pyscript-template | Minimal installable PyScript/PWA application template | pydevices.github.io/pydevices-pyscript-template |
| PyDevices.github.io | Org landing + shared chrome | pydevices.github.io |
| .github | This repo — org profile README, issue templates, CONTRIBUTING.md, docs/github-presence.md, docs/repo-layout.md, docs/notes.md | (no Pages site — org metadata only) |
| micropython-lib | Fork carrying PyDevices' micropython-lib packages for mip install | (no dedicated marketing site — it's a package index fork, not a product) |
| pydevices | Canonical reusable product: cross-runtime libraries, board configs, and hardware drivers published for pip and MIP | pydevices.github.io/pydevices |
| mpftp | VS Code / Cursor board tools (REPL, file transfer, mip/circup, MicroPython firmware) | pydevices.github.io/mpftp |
Licensing
All owned repos are MIT, using GitHub's standard single-author template
(so it's correctly detected as MIT rather than NOASSERTION/Other). A
handful of files in pydevices-examples that still carry code from other authors
(src/utils/tft_text.py, tft_write.py, tft_bitmap.py, and the
polygon() function in PyDevices/pygraphics's lib/pygraphics/_shapes.py, tracing back through
Russ Hughes' st7789_mpy driver to Ivan Belokobylskiy's st7789py_mpy) keep
their own self-contained MIT header with that attribution — those in-file
notices govern those specific files/functions; the root LICENSE governs
everything else. Keep any such pointer out of the root LICENSE file
itself: GitHub's license detector does a similarity match against the exact
template, and extra text (even a short explanatory paragraph) can drop it
below the confidence threshold and flip the repo back to NOASSERTION.
Topics
Each repo has GitHub topics set for discoverability (e.g. lvgl,
micropython, circuitpython, user-c-modules) — check a repo's sidebar on
github.com rather than duplicating the list here, since topics change more
often than this doc will be updated.