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.
| I want to... | Go here |
|---|---|
| Ask a question / propose an idea / show something I built | pydisplay Discussions |
| Find or share a one-off example that's too narrow for the official examples | pydisplay 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 pydisplay's full documentation | pydisplay.readthedocs.io |
| 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) | micropython-hardware Pages (docs/) |
| Talk to a board from VS Code / Cursor (REPL, files, firmware) | mpftp (Pages; agent state under ~/.mpftp/) |
- Discussions are enabled only on pydisplay and lv_bindings (the two repos most likely to get open-ended questions). Everything else routes through pydisplay 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 pydisplay — per CONTRIBUTING.md, that's the routing point.
- Recipes (pydisplay 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 pydisplay's docs, 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.
- About / description / website: set on the org (
https://pydevices.github.io/).
MkDocs sites for pydisplay, 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 (pydisplay, 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).
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. 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 |
|---|---|---|
| pydisplay | Core pure-Python display/input/graphics library | pydevices.github.io/pydisplay (+ PyScript demos) |
| palettes | Color palette toolkit for pydisplay | pydevices.github.io/palettes |
| pdwidgets | Cross-platform widget toolkit for pydisplay | pydevices.github.io/pdwidgets |
| lv_bindings | LVGL C→binding generator (source of truth for the native cmods) | pydevices.github.io/lv_bindings |
| cmods | Workspace that builds/smoke-tests the native-module matrix together | pydevices.github.io/cmods |
| displayif | Native display bus/framebuffer modules | pydevices.github.io/displayif |
| pygraphics | Native (pygraphics-cmod) + pure-Python (pygraphics) FrameBuffer/Area; docs on RTD |
pydevices.github.io/pygraphics |
| usdl2 | Native (usdl2) + pure-Python (usdl2-py) SDL2 subset for pydisplay's desktop backend |
pydevices.github.io/usdl2 |
| lv_micropython_cmod | MicroPython user C module glue for LVGL | pydevices.github.io/lv_micropython_cmod |
| lv_circuitpython_mod | CircuitPython integration for LVGL | pydevices.github.io/lv_circuitpython_mod |
| lv_cpython_mod | Native CPython LVGL extension (import lvgl) |
pydevices.github.io/lv_cpython_mod |
| pydisplay_android | Android APK path for pydisplay | pydevices.github.io/pydisplay_android |
| 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) |
| micropython-hardware | Board configs + hardware drivers (display/touch/bus/…) extracted from pydisplay | pydevices.github.io/micropython-hardware |
| mpftp | VS Code / Cursor board tools (REPL, file transfer, mip/circup, MicroPython firmware) | pydevices.github.io/mpftp |
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 pydisplay that still carry code from other authors
(src/add_ons/tft_text.py, tft_write.py, tft_bitmap.py, and the
polygon() function in 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.
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.