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 builtpydevices-examples Discussions
Find or share a one-off example that's too narrow for the official examplespydevices-examples Discussions → Recipes
Report a bug or request a featureIssues on the specific repo it affects (see repo map); use the Bug report / Feature request templates
Find contribution guidelines shared across reposPyDevices/.github CONTRIBUTING.md
Read the org's public-facing "about us"PyDevices/.github profile README (rendered on github.com/PyDevices)
Read pydevices-examples documentationpydevices-examples/docs
Read pygraphics documentationpygraphics.readthedocs.io
Read palettes / pdwidgets docspalettes.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 anythingPyScript 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 .github repo 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.

RepoRolePages site
pydevices-examplesExamples, tutorials, and PyScript showcase for the PyDevices product stackpydevices.github.io/pydevices-examples (+ PyScript demos)
palettesColor palette toolkit for PyDevicespydevices.github.io/palettes
pdwidgetsCross-platform widget toolkit for PyDevicespydevices.github.io/pdwidgets
lvgl-bindingsLVGL C→binding generator (source of truth for the native cmods)pydevices.github.io/lvgl-bindings
cmodsOptional workspace for multi-usermod MicroPython/CircuitPython builds(no Pages site — org landing card links to the repo)
displayifNative display bus/framebuffer modulespydevices.github.io/displayif
pygraphicsNative + pure-Python FrameBuffer/Area (import pygraphics); docs on RTDpydevices.github.io/pygraphics
lvgl-micropythonMicroPython user C module glue for LVGLpydevices.github.io/lvgl-micropython
lvgl-circuitpythonCircuitPython integration for LVGLpydevices.github.io/lvgl-circuitpython
lvgl-pythonNative CPython LVGL extension (import lvgl)pydevices.github.io/lvgl-python
pydevices-android-templateNative Android APK application template for PyDevicespydevices.github.io/pydevices-android-template
pydevices-pyscript-templateMinimal installable PyScript/PWA application templatepydevices.github.io/pydevices-pyscript-template
PyDevices.github.ioOrg landing + shared chromepydevices.github.io
.githubThis 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-libFork carrying PyDevices' micropython-lib packages for mip install(no dedicated marketing site — it's a package index fork, not a product)
pydevicesCanonical reusable product: cross-runtime libraries, board configs, and hardware drivers published for pip and MIPpydevices.github.io/pydevices
mpftpVS 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.