diff --git a/.cursor/environment.json b/.cursor/environment.json
index 90e46d4..d080946 100644
--- a/.cursor/environment.json
+++ b/.cursor/environment.json
@@ -1,12 +1,12 @@
{
"_comment": "Repositories Cursor's cloud environment checks out beside this one. This file is static JSON consumed by Cursor's cloud environment setup before 'install' runs, so it cannot be generated at environment-init time -- keep it converged by hand when a public repository is added or retired.",
- "install": "bash scripts/cloud-workspace-install.sh && bash scripts/cloud-python-deps.sh && bash scripts/cloud-pydevices-examples-dev-env.sh",
+ "install": "bash scripts/cloud-workspace-install.sh && bash scripts/cloud-python-deps.sh && bash scripts/cloud-gallery-dev-env.sh",
"start": "true",
"repositoryDependencies": [
"github.com/PyDevices/.github",
"github.com/PyDevices/PyDevices.github.io",
"github.com/PyDevices/pydevices",
- "github.com/PyDevices/pydevices-examples",
+ "github.com/PyDevices/gallery",
"github.com/PyDevices/audiodsp",
"github.com/PyDevices/pygraphics",
"github.com/PyDevices/palettes",
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 6679863..4d9061c 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -14,7 +14,7 @@ body:
attributes:
label: Repo / area
description: Which repo (or part of a repo) is this about?
- placeholder: e.g. pydevices / displaydev, or pydevices-examples / examples
+ placeholder: e.g. pydevices / displaydev, or gallery / examples
validations:
required: true
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
index 021c71e..882485e 100644
--- a/.github/ISSUE_TEMPLATE/feature.yml
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -8,7 +8,7 @@ body:
Thanks for the suggestion! Check the repo's ROADMAP.md first: it
may already be planned. For open-ended questions or discussion,
consider starting a thread in
- [pydevices-examples Discussions](https://github.com/PyDevices/pydevices-examples/discussions)
+ [PyDevices Discussions](https://github.com/PyDevices/pydevices/discussions)
instead.
- type: input
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index eddb0a9..d5dc69a 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -75,7 +75,7 @@ jobs:
- name: Check out generator output targets
run: |
set -euo pipefail
- for repo in PyDevices.github.io pydevices pydevices-examples mip; do
+ for repo in PyDevices.github.io pydevices gallery mip; do
git clone --quiet --depth 1 "https://github.com/PyDevices/${repo}.git" \
"workspace-root/${repo}"
done
@@ -91,7 +91,7 @@ jobs:
run: |
set -euo pipefail
failed=0
- for repo in PyDevices.github.io pydevices pydevices-examples mip; do
+ for repo in PyDevices.github.io pydevices gallery mip; do
if ! git -C "workspace-root/${repo}" diff --exit-code; then
echo "::error::${repo} is out of date with data/repos_db.json -- edit the database and regenerate"
failed=1
diff --git a/.github/workflows/cold-eyes-review.yml b/.github/workflows/cold-eyes-review.yml
index cec8cc5..e478fde 100644
--- a/.github/workflows/cold-eyes-review.yml
+++ b/.github/workflows/cold-eyes-review.yml
@@ -22,7 +22,7 @@ jobs:
run: |
Q=$((($(date +%-m)-1)/3+1))
Y=$(date +%Y)
- REPOS=(pydevices palettes pdwidgets pygraphics mpftp audiodsp lvgl-bindings lvgl-python displayif workbench pydevices-examples pyscript-template android-template cmods mip micropython-pydevices)
+ REPOS=(pydevices palettes pdwidgets pygraphics mpftp audiodsp lvgl-bindings lvgl-python displayif workbench gallery pyscript-template android-template cmods mip micropython-pydevices)
N=${#REPOS[@]}
IDX=$(( ( (Y*4 + Q) * 3 ) % N ))
SAMPLE="${REPOS[$IDX]} ${REPOS[$(( (IDX+1)%N ))]} ${REPOS[$(( (IDX+2)%N ))]}"
diff --git a/assets/apps/benchmark_deck.py b/assets/apps/benchmark_deck.py
index e0526da..5588e6e 100644
--- a/assets/apps/benchmark_deck.py
+++ b/assets/apps/benchmark_deck.py
@@ -1,5 +1,5 @@
"""
-PyDevices Multi-Interpreter Benchmark (Hero Canvas App for pydevices-examples)
+PyDevices Multi-Interpreter Benchmark (Hero Canvas App for gallery)
=============================================================================
Interactive multi-interpreter execution matrix and benchmark meter:
- 5-target performance comparator (MicroPython, CircuitPython, CPython, WASM, Android)
diff --git a/assets/apps/signal_gen.py b/assets/apps/signal_gen.py
index 68a5a6e..1874a9a 100644
--- a/assets/apps/signal_gen.py
+++ b/assets/apps/signal_gen.py
@@ -49,7 +49,7 @@ def _note_name(freq):
# ---------------------------------------------------------------------------
# Signal synthesis -- a single live synthio.Note, played through the same
-# audiodev.sample_out.AudioOut contract as pydevices-examples' piano.py
+# audiodev.sample_out.AudioOut contract as gallery's piano.py
# (out = board_config.audio_out(); out.play(synth); out.attach(app) -- the
# role is a factory, and calling it is what opens the device). Toggling the note
# on/off goes through synthio's own envelope (short attack/release) rather
diff --git a/assets/css/site.css b/assets/css/site.css
index 7d69e27..1485600 100644
--- a/assets/css/site.css
+++ b/assets/css/site.css
@@ -2,7 +2,7 @@
* PyDevices — shared org site chrome
*
* Design tokens + layout primitives shared by every PyDevices GitHub Pages
- * site (org root, lvgl-bindings, pydevices-examples, and the second-wave module
+ * site (org root, lvgl-bindings, gallery, and the second-wave module
* pages). Keep this file focused on *chrome*: header/nav, hero, buttons,
* cards, footer, typography. Project-specific / demo-interpreter styles belong
* in a local stylesheet loaded after this one.
@@ -931,7 +931,7 @@ pre code {
}
/* NOT a colour override -- an unmerged twin kept for its selector weight.
- * pydevices-examples' gallery.css loads after this file and restyles
+ * gallery's gallery.css loads after this file and restyles
* .tag.featured with the same (0,2,0) specificity, so today it wins in the
* dark theme and loses to this heavier light-theme selector. Folding these
* declarations into the rule above would hand the light theme to gallery.css
diff --git a/assets/js/site-chrome.js b/assets/js/site-chrome.js
index 37ad574..6e3bed2 100644
--- a/assets/js/site-chrome.js
+++ b/assets/js/site-chrome.js
@@ -48,7 +48,7 @@
'/workbench/">Workbench' +
'Gallery ' +
+ '/gallery/gallery/" class="nav-gallery-link">Gallery' +
"" +
'' +
' ' +
@@ -120,10 +120,10 @@
icon: ' '
},
{
- id: "pydevices-examples",
- name: "examples",
- path: "/pydevices-examples/",
- url: ROOT + "/pydevices-examples/",
+ id: "gallery",
+ name: "gallery",
+ path: "/gallery/",
+ url: ROOT + "/gallery/",
tag: "Showcase",
desc: "Multi-interpreter demos, benchmarks & PyScript runner",
icon: ' '
@@ -358,7 +358,7 @@
// Footer Links
html += ' ';
diff --git a/data/repos_db.json b/data/repos_db.json
index 055e997..b6575ea 100644
--- a/data/repos_db.json
+++ b/data/repos_db.json
@@ -504,7 +504,7 @@
},
{
"label": "Gallery",
- "href": "https://pydevices.github.io/pydevices-examples/gallery/",
+ "href": "https://pydevices.github.io/gallery/gallery/",
"tier_color": true
},
{
@@ -704,13 +704,13 @@
}
]
},
- "pydevices-examples": {
+ "gallery": {
"tier": 1,
"page": "self",
"tier_name": "Core Platform & Board Contract",
"theme_color": "var(--tier-1-amber)",
- "eyebrow": "pydevices-examples",
- "headline": "pydevices-examples — Showcase, demos & WebAssembly gallery.",
+ "eyebrow": "gallery",
+ "headline": "gallery — Showcase, demos & WebAssembly gallery.",
"description": "Comprehensive example code, direct MicroPython WebAssembly demos, board configurations, and multi-interpreter showcase benchmarks.",
"hero_canvas": {
"app": "benchmark_deck",
@@ -722,12 +722,12 @@
"buttons": [
{
"label": "GitHub Repo",
- "href": "https://github.com/PyDevices/pydevices-examples",
+ "href": "https://github.com/PyDevices/gallery",
"primary": true
},
{
"label": "Gallery",
- "href": "https://pydevices.github.io/pydevices-examples/gallery/",
+ "href": "https://pydevices.github.io/gallery/gallery/",
"tier_color": true
},
{
@@ -742,31 +742,31 @@
}
]
},
- "pydevices-examples-gallery": {
+ "gallery-gallery": {
"tier": 1,
"tier_name": "Core Platform & Board Contract",
"page": "self-subpath",
- "site_repo": "pydevices-examples",
+ "site_repo": "gallery",
"site_subpath": "gallery",
"portal_grid": false,
- "title": "pydevices-examples — WebAssembly Gallery",
+ "title": "gallery — WebAssembly Gallery",
"theme_color": "var(--tier-1-amber)",
- "eyebrow": "PyDevices / pydevices-examples · WebAssembly Gallery",
+ "eyebrow": "PyDevices / gallery · WebAssembly Gallery",
"headline": "WebAssembly Gallery",
"description": "Direct MicroPython WebAssembly demos that run the same PyDevices examples as MCUs and CPython. Explore drawing, input, widgets, and LVGL without flashing a board first.",
"hero_note": "Click a card to launch the app. The first load may take a few seconds while the interpreter downloads; featured demos stay pinned at the top.",
"buttons": []
},
- "pydevices-examples-pyscript": {
+ "gallery-pyscript": {
"tier": 1,
"tier_name": "Core Platform & Board Contract",
"page": "self-subpath",
- "site_repo": "pydevices-examples",
+ "site_repo": "gallery",
"site_subpath": "pyscript",
"portal_grid": false,
- "title": "pydevices-examples — PyScript Gallery",
+ "title": "gallery — PyScript Gallery",
"theme_color": "var(--tier-1-amber)",
- "eyebrow": "PyDevices / pydevices-examples · PyScript Gallery",
+ "eyebrow": "PyDevices / gallery · PyScript Gallery",
"headline": "PyScript Gallery",
"description": "Pyodide / PyScript demos that run full CPython in the browser — the same PyDevices examples as MCUs and the direct WebAssembly gallery. Explore drawing, input, widgets, and LVGL without flashing a board first.",
"hero_note": "Click a card to launch the app. The first load may take a few seconds while the interpreter downloads; featured demos stay pinned at the top.",
@@ -801,7 +801,7 @@
},
{
"label": "Gallery",
- "href": "https://pydevices.github.io/pydevices-examples/gallery/",
+ "href": "https://pydevices.github.io/gallery/gallery/",
"tier_color": true
},
{
diff --git a/docs-site/index.md b/docs-site/index.md
index 00cabd1..e70d8ce 100644
--- a/docs-site/index.md
+++ b/docs-site/index.md
@@ -54,7 +54,7 @@ listed in [Projects](projects/index.md).
## Try it before you install it
-The [gallery](https://pydevices.github.io/pydevices-examples/gallery/) runs
+The [gallery](https://pydevices.github.io/gallery/gallery/) runs
the same example programs that run on boards, in your browser, and
[Workbench](https://pydevices.github.io/workbench/) is an editor with a
simulated board built in. The main page of each project here also carries a
diff --git a/docs-site/install.md b/docs-site/install.md
index aeab4e7..4d22ceb 100644
--- a/docs-site/install.md
+++ b/docs-site/install.md
@@ -39,7 +39,7 @@ Current releases are on TestPyPI, which is why the command names it first.
:::
:::{tab-item} In the browser
-Nothing to install: the [gallery](https://pydevices.github.io/pydevices-examples/gallery/)
+Nothing to install: the [gallery](https://pydevices.github.io/gallery/gallery/)
and [Workbench](https://pydevices.github.io/workbench/) run MicroPython as
WebAssembly. To use a library from your own page, load it with micropip in
Pyodide or PyScript; each project's page shows the line.
diff --git a/docs-site/newcomers.md b/docs-site/newcomers.md
index be30e82..143248b 100644
--- a/docs-site/newcomers.md
+++ b/docs-site/newcomers.md
@@ -5,7 +5,7 @@ order most people meet them in.
## 1. Watch it run
-Open the [gallery](https://pydevices.github.io/pydevices-examples/gallery/).
+Open the [gallery](https://pydevices.github.io/gallery/gallery/).
Every program there is a real PyDevices example running as MicroPython in your
browser, with the same code a board would run. Pick one that draws, one that
reacts to the mouse and one that uses widgets, and read the code beside it.
@@ -13,7 +13,7 @@ reacts to the mouse and one that uses widgets, and read the code beside it.
## 2. Run it on your desktop
[Install](install.md) `pydevices-desktop` and run an example from
-[pydevices-examples](https://github.com/PyDevices/pydevices-examples). A window
+[gallery](https://github.com/PyDevices/gallery). A window
opens and your program draws into it, which is the quickest way to try an idea.
## 3. Learn the three layers
diff --git a/docs-site/projects/gallery.md b/docs-site/projects/gallery.md
new file mode 100644
index 0000000..6552999
--- /dev/null
+++ b/docs-site/projects/gallery.md
@@ -0,0 +1,7 @@
+# gallery
+
+Example programs for every part of PyDevices, the board configurations they run on, and the browser galleries that run the same examples as MicroPython and as Pyodide.
+
+[gallery on GitHub](https://github.com/PyDevices/gallery).
+
+Try them in the [gallery](https://pydevices.github.io/gallery/gallery/).
diff --git a/docs-site/projects/index.md b/docs-site/projects/index.md
index 63d773d..189620d 100644
--- a/docs-site/projects/index.md
+++ b/docs-site/projects/index.md
@@ -12,7 +12,7 @@ Each project has its own manual. A project listed with its manual here has it on
- [LVGL bindings and ports](lvgl.md)
- [micropython-pydevices and the device modules](micropython-pydevices.md)
- [workbench](workbench.md)
-- [pydevices-examples](pydevices-examples.md)
+- [gallery](gallery.md)
```{toctree}
:hidden:
@@ -27,5 +27,5 @@ mpftp
lvgl
micropython-pydevices
workbench
-pydevices-examples
+gallery
```
diff --git a/docs-site/projects/pydevices-examples.md b/docs-site/projects/pydevices-examples.md
deleted file mode 100644
index 407214c..0000000
--- a/docs-site/projects/pydevices-examples.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# pydevices-examples
-
-Example programs for every part of PyDevices, the board configurations they run on, and the browser galleries that run the same examples as MicroPython and as Pyodide.
-
-[pydevices-examples on GitHub](https://github.com/PyDevices/pydevices-examples).
-
-Try them in the [gallery](https://pydevices.github.io/pydevices-examples/gallery/).
diff --git a/docs/github-presence.md b/docs/github-presence.md
index c74e233..14805d8 100644
--- a/docs/github-presence.md
+++ b/docs/github-presence.md
@@ -14,11 +14,11 @@ the answer from scratch.
| Report a bug or request a feature | Issues on the **specific repo** it affects (see [repo map](#repos--pages-sites)); use the Bug report / Feature request templates |
| Find contribution guidelines shared across repos | [PyDevices/.github CONTRIBUTING.md](https://github.com/PyDevices/.github/blob/main/CONTRIBUTING.md) |
| Read the org's public-facing "about us" | [PyDevices/.github profile README](https://github.com/PyDevices/.github/blob/main/profile/README.md) (rendered on [github.com/PyDevices](https://github.com/PyDevices)) |
-| Read pydevices-examples documentation | [pydevices-examples/docs](https://github.com/PyDevices/pydevices-examples/tree/main/docs) |
+| Read gallery documentation | [gallery/docs](https://github.com/PyDevices/gallery/tree/main/docs) |
| Read pygraphics documentation | [pygraphics.readthedocs.io](https://pygraphics.readthedocs.io) |
| Read palettes / pdwidgets docs | [palettes.readthedocs.io](https://palettes.readthedocs.io), [pdwidgets.readthedocs.io](https://pdwidgets.readthedocs.io) |
| Manage Read the Docs ↔ GitHub (org app) | [Read the Docs Community GitHub App](https://github.com/organizations/PyDevices/settings/installations) (all repos); migrate legacy projects at [RTD migrate-to-github-app](https://app.readthedocs.org/accounts/migrate-to-github-app/) |
-| Try the library without installing anything | [PyScript browser demos](https://pydevices.github.io/pydevices-examples/pyscript/) |
+| Try the library without installing anything | [PyScript browser demos](https://pydevices.github.io/gallery/pyscript/) |
| Hardware board/driver docs (configs, contract, drivers, matrix) | [pydevices docs/](https://github.com/PyDevices/pydevices/tree/main/docs) (markdown; the [Pages site](https://pydevices.github.io/pydevices/) is a landing page only) |
| Talk to a board from VS Code / Cursor (REPL, files, firmware) | [mpftp](https://github.com/PyDevices/mpftp) ([Pages](https://pydevices.github.io/mpftp/); agent state under `~/.mpftp/`) |
@@ -38,7 +38,7 @@ the answer from scratch.
[`.github`](https://github.com/PyDevices/.github/tree/main/.github/ISSUE_TEMPLATE)
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](https://github.com/PyDevices/pydevices-examples/issues) — per
+ [gallery](https://github.com/PyDevices/gallery/issues) — per
CONTRIBUTING.md, that's the routing point.
- **Recipes** ([pydevices Discussions](https://github.com/PyDevices/pydevices/discussions), *Recipes* category once created,
open-ended format, not answerable) is for one-off examples/how-tos that
@@ -48,7 +48,7 @@ the answer from scratch.
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](https://github.com/PyDevices/pydevices-examples/tree/main/docs), or on a Pages site,
+ [gallery documentation](https://github.com/PyDevices/gallery/tree/main/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.
@@ -96,7 +96,7 @@ icons. Header brand stays on the shared org logo.
| Repo | Role | Pages site |
|---|---|---|
-| [pydevices-examples](https://github.com/PyDevices/pydevices-examples) | Examples, tutorials, and PyScript showcase for the PyDevices product stack | [pydevices.github.io/pydevices-examples](https://pydevices.github.io/pydevices-examples/) (+ [PyScript demos](https://pydevices.github.io/pydevices-examples/pyscript/)) |
+| [gallery](https://github.com/PyDevices/gallery) | Examples, tutorials, and PyScript showcase for the PyDevices product stack | [pydevices.github.io/gallery](https://pydevices.github.io/gallery/) (+ [PyScript demos](https://pydevices.github.io/gallery/pyscript/)) |
| [palettes](https://github.com/PyDevices/palettes) | Color palette toolkit for PyDevices | [pydevices.github.io/palettes](https://pydevices.github.io/palettes/) |
| [pdwidgets](https://github.com/PyDevices/pdwidgets) | Cross-platform widget toolkit for PyDevices | [pydevices.github.io/pdwidgets](https://pydevices.github.io/pdwidgets/) |
| [lvgl-bindings](https://github.com/PyDevices/lvgl-bindings) | LVGL C→binding generator (source of truth for the native bindings consumers) | [pydevices.github.io/lvgl-bindings](https://pydevices.github.io/lvgl-bindings/) |
@@ -118,7 +118,7 @@ icons. Header brand stays on the shared org logo.
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
+handful of files in **gallery** 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
diff --git a/docs/history.md b/docs/history.md
index 2b74582..6d0036e 100644
--- a/docs/history.md
+++ b/docs/history.md
@@ -8,7 +8,7 @@ PyDevices began before the organization itself. The oldest project lineage start
On 2024-09-02 the code was rebranded “PyDevices”; GitHub records the organization’s creation the following day, 2024-09-03. On 2024-11-19 the original repository moved from `bdbarnett/mpdisplay` to `PyDevices/pydisplay`. Three supporting repositories followed: the imported LVGL MicroPython lineage, a `micropython-lib` fork, and `cmods`.
-The organization assumed its current shape during June–August 2026. The large `pydisplay` repository was deliberately decomposed into display, LVGL, graphics, widget, palette, hardware, tooling, and examples repositories. An organization portal and shared publishing machinery were established in July; on 2026-08-11 the old flagship was refocused and renamed `pydevices-examples`, while the extracted hardware repository became the new `pydevices` flagship.
+The organization assumed its current shape during June–August 2026. The large `pydisplay` repository was deliberately decomposed into display, LVGL, graphics, widget, palette, hardware, tooling, and examples repositories. An organization portal and shared publishing machinery were established in July; on 2026-08-11 the old flagship was refocused and renamed `gallery`, while the extracted hardware repository became the new `pydevices` flagship.
Late August and early September broadened the project substantially: Android and PyScript application paths, a browser/mobile Workbench, the CircuitPython-compatible audio stack, VST3 hosting, a versioned MicroPython overlay, native USB host/device support, and MIPI-CSI cameras. The audio component split shipped on 2026-09-03; `usbif` and `cameraif` were published on 2026-09-04.
@@ -24,7 +24,7 @@ Dates are UTC calendar dates. “Created” is GitHub’s repository-object date
| Repository | Created | Public / first verifiable public | Major milestones |
|---|---:|---:|---|
-| [pydevices-examples](https://github.com/PyDevices/pydevices-examples) | 2023-11-10 | 2023-11-10* | Original monorepo; rebranded PyDevices 2024-09-02; transferred as `PyDevices/pydisplay` 2024-11-19; packages extracted through 2026; renamed/refocused as examples and PyScript gallery 2026-08-11; added casting, audio-rig, spectrum-meter and Google Photos examples and an “Open in Workbench” button on gallery pages in September–October. |
+| [gallery](https://github.com/PyDevices/gallery) | 2023-11-10 | 2023-11-10* | Original monorepo; rebranded PyDevices 2024-09-02; transferred as `PyDevices/pydisplay` 2024-11-19; packages extracted through 2026; renamed/refocused as examples and PyScript gallery 2026-08-11; added casting, audio-rig, spectrum-meter and Google Photos examples and an “Open in Workbench” button on gallery pages in September–October. |
| [lvgl-micropython](https://github.com/PyDevices/lvgl-micropython) | 2024-11-17 | 2024-11-17* | Imported LVGL binding history reaching back to 2018; split into MicroPython-only glue in June 2026; adopted current name 2026-08-11; `display_driver` moved to `pydevices` 2026-10-07; Windows builds with LVGL fixed 2026-10-19. |
| [mip](https://github.com/PyDevices/mip) | 2024-11-22 | 2024-11-22* | Fork with inherited `micropython-lib` history from 2014; became PyDevices’ generated package mirror and MIP index; renamed from `micropython-lib` 2026-08-14; lists `midiports` and the `usb-*` packages from `pydevices` 0.7.6 (2026-10-19). |
| [cmods](https://github.com/PyDevices/cmods) | 2024-12-03 | 2024-12-03* | Evolved into the optional build/integration workspace for MicroPython, CircuitPython, native modules, LVGL, USB, and JPEG support; retired and archived 2026-09-23 (‡), once `micropython-pydevices` and each repository's own build glue had taken over, with a README that says where things went. |
diff --git a/docs/publishing-automation.md b/docs/publishing-automation.md
index dde1ecd..bcc6dc4 100644
--- a/docs/publishing-automation.md
+++ b/docs/publishing-automation.md
@@ -172,7 +172,7 @@ differently, because their constraints differ:
Adding or removing a publishable entry under `lib/` or `utils/` therefore
changes the next release automatically. Review the generated package set as
part of release preparation. Committed root TOML files (such as
-`pydevices-desktop.toml` and `pydevices-examples.toml`) are PyScript
+`pydevices-desktop.toml` and `gallery.toml`) are PyScript
filesystem mappings of the repository payloads, not package metadata; their
CI validation must pass before release.
@@ -717,7 +717,7 @@ runtime, and never reaches a device — MIP installs `.py` files only, verified
against the live index.
The org already does this elsewhere: `lvgl-bindings` generates `lvgl.pyi` and
-syncs it into `lvgl-python`, and `pydevices-examples/tools/typings/` holds a
+syncs it into `lvgl-python`, and `tools/typings/` in the archived pydevices-examples repo holds a
tree of `.pyi` for MicroPython builtins.
### The `py.typed` constraint
diff --git a/docs/repo-layout.md b/docs/repo-layout.md
index 9c91a71..9249f81 100644
--- a/docs/repo-layout.md
+++ b/docs/repo-layout.md
@@ -56,7 +56,7 @@ Long-form notes and guides belong under `docs/`.
vendored LVGL translations.
- Put a document in the repository that owns its subject: product architecture,
package behavior, and driver contracts belong with `pydevices`; application
- tutorials and gallery integration belong with `pydevices-examples`; package-
+ tutorials and gallery integration belong with `gallery`; package-
specific API documentation belongs with that package.
### `requirements.txt` vs `requirements-dev.txt`
@@ -82,14 +82,14 @@ Examples:
| Repo | File | Why |
|------|------|-----|
| [lvgl-bindings](https://github.com/PyDevices/lvgl-bindings) | `requirements.txt` | Generator runtime (`pycparser`) |
-| [pydevices-examples](https://github.com/PyDevices/pydevices-examples) | `requirements-dev.txt` | Playwright, pytest, Jupyter, ruff, … — not product runtime |
+| [gallery](https://github.com/PyDevices/gallery) | `requirements-dev.txt` | Playwright, pytest, Jupyter, ruff, … — not product runtime |
| [lvgl-python](https://github.com/PyDevices/lvgl-python) | `requirements-dev.txt` | Local editable build / wheel tooling; users install `pydevices-lvgl` |
| [android-template](https://github.com/PyDevices/android-template) | `requirements-dev.txt` | Host buildozer/Cython for APK builds — not packaged into the APK |
| [pyscript-template](https://github.com/PyDevices/pyscript-template) | none | Static app template; PyScript interpreter is vendored only for Pages deployment |
## Exceptions
-1. **[pydevices-examples](https://github.com/PyDevices/pydevices-examples)** — example applications and gallery utilities live under `lib/` (`lib/examples/`, `lib/utils/`). Shareable packages belong in their owning product repos, not here.
+1. **[gallery](https://github.com/PyDevices/gallery)** — example applications and gallery utilities live under `lib/` (`lib/examples/`, `lib/utils/`). Shareable packages belong in their owning product repos, not here.
2. **[pydevices](https://github.com/PyDevices/pydevices)** — canonical product repo: portable packages under `lib/`, board configs under `board_configs/`, hardware drivers under `drivers/`, and MIP manifests under `packages/`.
3. **Application templates** — `android-template` and `pyscript-template` are replaceable host shells, not product package trees.
diff --git a/docs/workflows.md b/docs/workflows.md
index 6948dc4..bfc0f15 100644
--- a/docs/workflows.md
+++ b/docs/workflows.md
@@ -104,7 +104,7 @@ but neither has a `.github/workflows/` directory — their sync from
| `palettes`, `pdwidgets` | `tests.yml` | Sparse-checkout of sibling repos onto `PYTHONPATH` (`pdwidgets` needs four) |
| `pygraphics` | `tests.yml` | Runs the suite twice — pure Python, then the native extension via `PYGRAPHICS_TEST_NATIVE=1` |
| `audiodsp` | `tests.yml` | Also the source of the `parity` gate `publish-release-packages.yml` reruns at release time |
-| `pydevices-examples` | `tests.yml`, `manifests.yml` | Gallery and install-manifest freshness |
+| `gallery` | `tests.yml`, `manifests.yml` | Gallery and install-manifest freshness |
| `pydevices`, `pygraphics` | `validate-pyscript-filesystem-toml.yml` | Standalone callers of the reusable validator. `pdwidgets` and `palettes` call the same reusable as a job inside `tests.yml` |
| `.github` (this repo) | `checks.yml` | actionlint over `.github/workflows`, a YAML-parse smoke test of every reusable, a site-generator idempotency check against checked-out siblings, and `ruff` over `scripts/` |
@@ -115,7 +115,7 @@ but neither has a `.github/workflows/` directory — their sync from
| Repository | What it serves |
|---|---|
| `PyDevices.github.io` | The portal **and every repository's landing page**, at `//`. Serves from `main`, no workflow |
-| `pydevices-examples` | `deploy.yml` — the PyScript gallery: manifest audits and symlink replacement |
+| `gallery` | `deploy.yml` — the PyScript gallery: manifest audits and symlink replacement |
| `mip` | `deploy-mip-index-to-pages.yml` — the package index |
Every other landing page is generated by
diff --git a/profile/README.md b/profile/README.md
index 13d0526..4d96a2a 100644
--- a/profile/README.md
+++ b/profile/README.md
@@ -25,7 +25,7 @@ Standard hardware driver engine and companion reference code.
- [`pydevices`](https://github.com/PyDevices/pydevices) — Unified pure-Python hardware abstraction layer and core device contract for MicroPython, CircuitPython, CPython, direct WebAssembly, Pyodide, and Android.
- [`audiodsp`](https://github.com/PyDevices/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.
- [`audiocomponents`](https://github.com/PyDevices/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 on TestPyPI and a MIP package.
-- [`pydevices-examples`](https://github.com/PyDevices/pydevices-examples) — Comprehensive example code, direct MicroPython WebAssembly demos, board configurations, and multi-interpreter showcase benchmarks.
+- [`gallery`](https://github.com/PyDevices/gallery) — Comprehensive example code, direct MicroPython WebAssembly demos, board configurations, and multi-interpreter showcase benchmarks.
### Tier 2: Python Framebuffers & GUI Toolkits
diff --git a/scripts/cloud-pydevices-examples-dev-env.sh b/scripts/cloud-gallery-dev-env.sh
similarity index 74%
rename from scripts/cloud-pydevices-examples-dev-env.sh
rename to scripts/cloud-gallery-dev-env.sh
index be0bee7..9f66757 100755
--- a/scripts/cloud-pydevices-examples-dev-env.sh
+++ b/scripts/cloud-gallery-dev-env.sh
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
-# Idempotent pydevices-examples desktop dev environment for the PyDevices cloud workspace.
+# Idempotent gallery desktop dev environment for the PyDevices cloud workspace.
#
# Complements cloud-workspace-install.sh and cloud-python-deps.sh:
-# - pip install pydevices-examples requirements.txt (TestPyPI runtime stack for CPython)
+# - pip install gallery requirements.txt (TestPyPI runtime stack for CPython)
# - mip install desktop board_config, appdev, palettes, pdwidgets into ~/.micropython/lib
-# - ensure shell env (PATH, PYTHONPATH, MICROPYPATH) via pydevices-examples-env.sh + bashrc hook
+# - ensure shell env (PATH, PYTHONPATH, MICROPYPATH) via gallery-env.sh + bashrc hook
#
-# Run from pydevices-examples/lib/ after sourcing pydevices-examples-env.sh (or open a new shell).
+# Run from gallery/lib/ after sourcing gallery-env.sh (or open a new shell).
# See pydevices docs/install-workflows.md (CircuitPython-compatible mip, mpy=False).
#
# Safe to re-run. Intentionally does not `set -e` on optional TestPyPI steps.
@@ -14,27 +14,27 @@ set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPOS="${PYDEVICES_REPOS_ROOT:-/agent/repos}"
-EXAMPLES="${PYDEVICES_EXAMPLES_ROOT:-$REPOS/pydevices-examples}"
+EXAMPLES="${PYDEVICES_EXAMPLES_ROOT:-$REPOS/gallery}"
MIP_INDEX="https://PyDevices.github.io/mip"
MPY_LIB="${HOME}/.micropython"
BASHRC="${HOME}/.bashrc"
-ENV_FILE="${SCRIPT_DIR}/pydevices-examples-env.sh"
-BASHRC_BEGIN="# >>> pydevices pydevices-examples dev env >>>"
-BASHRC_END="# <<< pydevices pydevices-examples dev env <<<"
+ENV_FILE="${SCRIPT_DIR}/gallery-env.sh"
+BASHRC_BEGIN="# >>> pydevices gallery dev env >>>"
+BASHRC_END="# <<< pydevices gallery dev env <<<"
-log() { printf 'cloud-pydevices-examples-dev-env: %s\n' "$*"; }
+log() { printf 'cloud-gallery-dev-env: %s\n' "$*"; }
die() {
log "ERROR: $*"
exit 1
}
-# shellcheck source=pydevices-examples-env.sh
+# shellcheck source=gallery-env.sh
source "${ENV_FILE}" || die "cannot source ${ENV_FILE}"
ensure_pydevices_examples_venv() {
if [[ ! -d "$EXAMPLES" ]]; then
- die "pydevices-examples not found at $EXAMPLES"
+ die "gallery not found at $EXAMPLES"
fi
local vpy="$EXAMPLES/.venv/bin/python"
local vpip="$EXAMPLES/.venv/bin/pip"
@@ -50,7 +50,7 @@ ensure_pydevices_examples_venv() {
"$vpip" install -q --upgrade pip || true
log "pip install -r $EXAMPLES/requirements.txt"
"$vpip" install -q -r "$EXAMPLES/requirements.txt" || \
- log "warn: pydevices-examples requirements.txt install failed"
+ log "warn: gallery requirements.txt install failed"
}
ensure_micropython_bin() {
@@ -94,11 +94,11 @@ install_bashrc_hook() {
log "bashrc hook already present"
return 0
fi
- log "append pydevices-examples env hook to $BASHRC"
+ log "append gallery env hook to $BASHRC"
cat >>"$BASHRC" < requirements-dev.txt + pygame-ce + native audio/LVGL bindings
+# - gallery (flagship) -> requirements-dev.txt + pygame-ce + native audio/LVGL bindings
# - palettes pdwidgets -> ruff
#
# Safe to run on every cloud VM boot (environment.json install).
@@ -78,10 +78,10 @@ if ! python3 -c "import ensurepip" 2>/dev/null; then
exit 1
fi
-# --- pydevices-examples: flagship dev tooling + desktop backend + LVGL binding ---------
-if bin="$(ensure_venv pydevices-examples)"; then
- "$bin/pip" install -q -r "$REPOS/pydevices-examples/requirements-dev.txt" || \
- log "warn: pydevices-examples requirements-dev install failed"
+# --- gallery: flagship dev tooling + desktop backend + LVGL binding ---------
+if bin="$(ensure_venv gallery)"; then
+ "$bin/pip" install -q -r "$REPOS/gallery/requirements-dev.txt" || \
+ log "warn: gallery requirements-dev install failed"
# pygame-ce is the desktop fallback backend / Windows default (PGDisplay);
# deliberately not in requirements-dev.txt (SDL2 is the documented primary).
"$bin/pip" install -q pygame-ce || log "warn: pygame-ce install failed"
@@ -101,7 +101,7 @@ if bin="$(ensure_venv pydevices-examples)"; then
"$bin/pip" install -q -i https://test.pypi.org/simple/ \
--extra-index-url https://pypi.org/simple/ pydevices-lvgl || \
log "warn: pydevices-lvgl (TestPyPI) install skipped; LVGL examples unavailable"
- # Put canonical product and source-only sibling packages on pydevices-examples's
+ # Put canonical product and source-only sibling packages on gallery's
# venv path so the matrix tests the current multi-repo sources.
sp="$("$bin/python" -c 'import site; print(site.getsitepackages()[0])' 2>/dev/null)"
if [[ -n "${sp:-}" ]]; then
@@ -114,7 +114,7 @@ if bin="$(ensure_venv pydevices-examples)"; then
log "wrote $sp/pydevices_siblings.pth"
fi
else
- log "ERROR: pydevices-examples venv unavailable"
+ log "ERROR: gallery venv unavailable"
exit 1
fi
diff --git a/scripts/cloud-workspace-install.sh b/scripts/cloud-workspace-install.sh
index 83488a5..3f9fa84 100755
--- a/scripts/cloud-workspace-install.sh
+++ b/scripts/cloud-workspace-install.sh
@@ -26,7 +26,7 @@ SIBLINGS=(
mpftp
palettes
pdwidgets
- pydevices-examples
+ gallery
android-template
pyscript-template
PyDevices.github.io
@@ -188,7 +188,7 @@ ensure_lv_cpython_lvgl_symlink() {
verify_ready() {
local name missing=0
- for name in micropython-pydevices audiodsp pygraphics lvgl-bindings pydevices pydevices-examples palettes pdwidgets; do
+ for name in micropython-pydevices audiodsp pygraphics lvgl-bindings pydevices gallery palettes pdwidgets; do
if [[ ! -d "$REPOS/$name/.git" && ! -L "$REPOS/$name" ]]; then
log "ERROR: required repo missing: $REPOS/$name"
missing=1
@@ -225,7 +225,7 @@ link_pydevices pydevices "$REPOS/pydevices"
link_pydevices mpftp "$REPOS/mpftp"
link_pydevices palettes "$REPOS/palettes"
link_pydevices pdwidgets "$REPOS/pdwidgets"
-link_pydevices pydevices-examples "$REPOS/pydevices-examples"
+link_pydevices gallery "$REPOS/gallery"
link_pydevices android-template "$REPOS/android-template"
# The C modules (displayif, audioif, cameraif, usbhost) live inside
diff --git a/scripts/pydevices-examples-env.sh b/scripts/gallery-env.sh
similarity index 70%
rename from scripts/pydevices-examples-env.sh
rename to scripts/gallery-env.sh
index 913e66d..cf9f9ad 100755
--- a/scripts/pydevices-examples-env.sh
+++ b/scripts/gallery-env.sh
@@ -1,8 +1,8 @@
-# pydevices-examples path environment — source before running from pydevices-examples/lib/.
-# Values match pydevices-examples README.md §3.2.1 and docs/utils.md (character-for-character).
+# gallery path environment — source before running from gallery/lib/.
+# Values match gallery README.md §3.2.1 and docs/utils.md (character-for-character).
#
-# cd pydevices-examples/lib
-# source ~/gh/pydevices/dotgithub/scripts/pydevices-examples-env.sh # or this repo's path
+# cd gallery/lib
+# source ~/gh/pydevices/dotgithub/scripts/gallery-env.sh # or this repo's path
_pydevices_examples_env_root() {
if [[ -n "${PYDEVICES_EXAMPLES_ROOT:-}" && -d "${PYDEVICES_EXAMPLES_ROOT}/lib" ]]; then
@@ -12,8 +12,8 @@ _pydevices_examples_env_root() {
local repos="${PYDEVICES_REPOS_ROOT:-/agent/repos}"
local candidate
for candidate in \
- "$repos/pydevices-examples" \
- "${HOME}/gh/pydevices/pydevices-examples"; do
+ "$repos/gallery" \
+ "${HOME}/gh/pydevices/gallery"; do
if [[ -d "$candidate/lib" ]]; then
printf '%s' "$candidate"
return 0
@@ -23,7 +23,7 @@ _pydevices_examples_env_root() {
}
if ! PYDEVICES_EXAMPLES_ROOT="$(_pydevices_examples_env_root)"; then
- echo "pydevices-examples-env: pydevices-examples checkout not found (set PYDEVICES_EXAMPLES_ROOT)" >&2
+ echo "gallery-env: gallery checkout not found (set PYDEVICES_EXAMPLES_ROOT)" >&2
return 1 2>/dev/null || exit 1
fi
diff --git a/scripts/generate_sites.py b/scripts/generate_sites.py
index 6f8a4a7..0565c26 100755
--- a/scripts/generate_sites.py
+++ b/scripts/generate_sites.py
@@ -48,7 +48,7 @@ def get_card_icon(repo_name):
'micropython-pydevices': ' ',
'workbench': ' ',
'mpvst': ' ',
- 'pydevices-examples': ' ',
+ 'gallery': ' ',
'pygraphics': ' ',
'pdwidgets': ' ',
'palettes': ' ',
@@ -60,9 +60,9 @@ def get_card_icon(repo_name):
'android-template': ' ',
'mip': ' ',
'mpftp': ' ',
- # Same glyph as pydevices-examples -- these are sub-pages of that repo.
- 'pydevices-examples-gallery': ' ',
- 'pydevices-examples-pyscript': ' ',
+ # Same glyph as gallery -- these are sub-pages of that repo.
+ 'gallery-gallery': ' ',
+ 'gallery-pyscript': ' ',
}
return icons.get(repo_name, ' ')
@@ -78,7 +78,7 @@ def get_tag_label(repo_name):
'micropython-pydevices': 'Runtime Overlay',
'workbench': 'Browser IDE',
'mpvst': 'VST3 Plug-in',
- 'pydevices-examples': 'Companion Showcase',
+ 'gallery': 'Companion Showcase',
'pygraphics': '0-Dependency',
'pdwidgets': 'Pure-Python UI',
'palettes': 'Color Engine',