From 7e588bf5e8a702095b9fe244b84180ae188d4245 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 27 Oct 2026 00:33:15 -0500 Subject: [PATCH 1/3] Docs: template README, docs/ in the five sections, tests and pin steps to CONTRIBUTING.md --- .github/dependabot.yml | 2 +- CONTRIBUTING.md | 50 ++++++++ README.md | 120 +++++------------- docs/README.md | 11 -- docs/get-started/index.md | 49 +++++++ .../bring-in-a-bigger-app.md} | 2 +- .../make-it-installable.md} | 21 +-- .../{workers.md => guides/run-in-a-worker.md} | 2 +- docs/{newcomers.md => how-it-works/index.md} | 50 +------- docs/images/paint.png | Bin 0 -> 77330 bytes docs/index.md | 24 ++++ docs/reference/files.md | 15 +++ sw.js | 2 +- 13 files changed, 180 insertions(+), 168 deletions(-) create mode 100644 CONTRIBUTING.md delete mode 100644 docs/README.md create mode 100644 docs/get-started/index.md rename docs/{packages.md => guides/bring-in-a-bigger-app.md} (98%) rename docs/{pwa-guide.md => guides/make-it-installable.md} (89%) rename docs/{workers.md => guides/run-in-a-worker.md} (99%) rename docs/{newcomers.md => how-it-works/index.md} (61%) create mode 100644 docs/images/paint.png create mode 100644 docs/index.md create mode 100644 docs/reference/files.md diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0a9ad9c..39b7837 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,5 @@ # Keep pinned GitHub Actions current. Nothing else here is managed by -# Dependabot: Python dependencies are pinned per docs/requirements.txt or +# Dependabot: Python dependencies are # resolved at build time, not from a lockfile in this repo. version: 2 updates: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..b0bf4cc --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,50 @@ +# Contributing + +Bug reports and fixes are welcome. Open an +[issue](https://github.com/PyDevices/pyscript-template/issues) first for +anything larger than a fix. + +## Run the tests + +```bash +./scripts/vendor_pyscript.sh +python3 -m unittest discover -s tests -v +``` + +The suite checks that the shell, service worker, manifest and `pyscript.json` +agree: the JSON parses, every local file `index.html` and `sw.js` mention +exists, the PyDevices source URLs are pinned to the release the test names, the +page uses the Pyodide interpreter, and `pwa.js` leaves the browser's own install +prompt alone. Two tests also run `tests/worklet_sim.mjs` under Node to check the +audio worklet's queue. It does not replace a real browser test of pointer +input, installation or offline caching. + +Read `tests/test_template.py` before moving a shell file or adding a generated +asset to the cache list. + +## Update a pin + +- **PyScript.** Change `PYSCRIPT_VERSION` in `scripts/vendor_pyscript.sh`. + Check and confirm + `https://pyscript.net/releases//offline_.zip` returns 200 + before committing. Re-run `./scripts/vendor_pyscript.sh` and the tests. + The wheel tag in [Bring in a bigger + app](docs/guides/bring-in-a-bigger-app.md) depends on the Pyodide that + release ships. +- **PyDevices sources.** Every URL in `pyscript.json` names one PyDevices + release. Change them together and update the release string in + `tests/test_template.py`, then load the app in a browser. +- **Cache.** Change `VERSION` in `sw.js` whenever you change a cached file, so + browsers that already have the app pick the change up. + +## Docs + +The pages are plain Markdown under `docs/`, starting at +[docs/index.md](docs/index.md). There is no docs build. Check that any link you +add resolves. + +## Releasing + +The template has no packages and no version of its own: a change is released +by merging it to `main`, and users get it the next time they press **Use this +template** or pull. diff --git a/README.md b/README.md index 06a376c..b8df207 100644 --- a/README.md +++ b/README.md @@ -1,112 +1,50 @@ -# PyDevices PyScript template +![The paint demo running in a browser: a row of colour blocks above a canvas with four coloured wavy lines](docs/images/paint.png) -A minimal, installable PyScript application for the portable -[PyDevices](https://github.com/PyDevices/pydevices) display stack. +# PyScript template -Use this repository as a GitHub template, edit `main.py`, and run it on your -own machine with Python's built-in web server ([below](#run-it-locally)). The -service worker caches the application shell and the pinned PyScript -interpreter, so after one visit the app launches offline too. The template -pins PyDevices source files to release `v0.7.0`, so a new app does not -silently change when the product's default branch advances. +PyScript template is a starter for an installable browser app that draws with +the PyDevices display stack: Python (Pyodide) on a canvas, working offline once +it has loaded. -## Starter Example: Interactive Touch / Paint +On GitHub, press **Use this template**, or clone it, then serve it from +localhost: -This is exactly what ships in `main.py` — an interactive paint application -demonstrating the PyDevices Board Contract (`board_config` and -`appdev.App`) running in the browser: - -```python -import board_config -import appdev +```bash +git clone https://github.com/PyDevices/pyscript-template my-app +cd my-app +./scripts/vendor_pyscript.sh +python3 -m http.server 8000 +``` -display_drv = board_config.display_drv -app = appdev.App(board_config) +Open . Here is a paint app in 20 lines; it is a cut-down +`main.py`, which also sets the status line and a 500x500 display size: +```python +import board_config, appdev +display, app = board_config.display_drv, appdev.App(board_config) colors = [0xFFFF, 0xF800, 0x07E0, 0x001F, 0x07FF, 0xF81F, 0xFFE0, 0x0000] -block_size = display_drv.width // len(colors) -selected = 0 - -def draw_palette(): - for i, color in enumerate(colors): - x = i * block_size - display_drv.fill_rect(x, 0, block_size, 30, color) - display_drv.show() - -draw_palette() +block, selected = display.width // len(colors), 0 +for i, color in enumerate(colors): + display.fill_rect(i * block, 0, block, 30, color) +display.show() def on_touch(event): global selected x, y = event.pos if y < 30: - selected = min(len(colors) - 1, x // block_size) + selected = min(len(colors) - 1, x // block) else: - display_drv.fill_rect(x - 3, y - 3, 6, 6, colors[selected]) - display_drv.show() + display.fill_rect(x - 3, y - 3, 6, 6, colors[selected]) + display.show() app.on(app.events.MOUSEBUTTONDOWN, on_touch) app.on(app.events.MOUSEMOTION, on_touch) app.run() ``` -## How It Works - -1. **HTML5 Canvas Backend**: `board_config.display_drv` binds to the `` element through the supported PyScript/Pyodide `PSDisplay` backend. This template is intentionally Pyodide-only; direct MicroPython WebAssembly applications use the Gallery host instead. -2. **Browser Event Loop**: `app.run()` integrates cooperatively with the browser's native JavaScript event loop to dispatch pointer/touch events. -3. **Installable and offline**: the service worker caches the PyScript interpreter and application shell, so the app installs and runs offline on desktop and mobile browsers. A small note near the top right tells visitors how their browser installs it, and an installed app opens in a window sized to the display `board_config` asks for. [The PWA guide](docs/pwa-guide.md) has the details. - -## Documentation - -- [Newcomer's guide](docs/newcomers.md) — how the template becomes a browser app, and which generated boundaries to preserve. -- [Make your PyScript app a PWA](docs/pwa-guide.md) — where it installs, the - manifest, the service worker, the app window, and edits that don't show. - The template already ships everything that guide describes. - -What's planned next is in [ROADMAP.md](ROADMAP.md). - -## Customize - -- Edit `main.py` for application behavior. -- Edit `pyscript.json` to add PyDevices source files or Pyodide packages. For - an app that makes sound or uses LVGL, such as piano or the drum machine from - pydevices-examples, see [Bringing in a bigger app](docs/packages.md). -- Change the app name, colors, and icons in `index.html`, `manifest.json`, and `style.css`. -- Change `PYSCRIPT_VERSION` in `scripts/vendor_pyscript.sh` when you choose to - update the browser interpreter. Check the - [PyScript releases page](https://github.com/pyscript/pyscript/releases) or - for newer versions before bumping the pin, - and confirm `https://pyscript.net/releases//offline_.zip` - returns 200 before committing the change. - -## Run it locally - -From the repository root: - -```bash -./scripts/vendor_pyscript.sh -python3 -m http.server 8000 -``` - -Then open . The first command downloads the pinned -PyScript release into `vendor/` (it is `.gitignore`d, so run it once per -checkout and again after you change the pin). - -Use that `localhost` address rather than opening `index.html` from disk or -browsing to the machine's LAN IP. Service workers, which make the app -installable and offline, only run on `http://localhost` or over `https://`. - -The service worker serves every file from its cache once it has one, so an -edit to `main.py` can look as if it did nothing. While you work, reload with -**Ctrl+Shift+R** (**Cmd+Shift+R** on a Mac), or open DevTools → Application → -Service workers and tick **Bypass for network**. [Edits that don't -show](docs/pwa-guide.md#edits-that-dont-show) has the rest. - -## Verify - -```bash -python3 -m unittest discover -s tests -v -``` +Click a colour block along the top, then move the pointer over the canvas to +paint. The picture at the top of this page is that app after four strokes. -The template uses only the `py` interpreter (Pyodide) for the broadest pip-wheel path. The same PyDevices source packages remain portable to MicroPython, CircuitPython, and CPython desktop; use the [direct MicroPython WebAssembly Gallery](https://pydevices.github.io/pydevices-examples/gallery/) for the first-party direct host and complete cross-interpreter examples. +[Docs](https://github.com/PyDevices/pyscript-template/blob/main/docs/index.md) · [Examples](https://pydevices.github.io/pydevices-examples/gallery/) · [Roadmap](ROADMAP.md) -MIT licensed. See `LICENSE`. +Made by [PyDevices](https://pydevices.com). diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index f4d37ba..0000000 --- a/docs/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Documentation - -- [Newcomer's guide](newcomers.md) — codebase map, browser execution path, and safe customization. -- [Bringing in a bigger app](packages.md) — wheels for sound, pygraphics and - LVGL; piano and the drum machine as worked examples. -- [Make your PyScript app a PWA](pwa-guide.md) — where it installs, the - manifest and service worker, the app window, running it locally, and edits - that don't show. - -Start with the [root README](../README.md) for the template itself. -- [workers.md](workers.md): run your Python in Web Workers when the main thread has to stay free (Web MIDI, live audio) diff --git a/docs/get-started/index.md b/docs/get-started/index.md new file mode 100644 index 0000000..4e0da32 --- /dev/null +++ b/docs/get-started/index.md @@ -0,0 +1,49 @@ +# Make your first app + +## Use the template + +On GitHub, press **Use this template** on the +[pyscript-template](https://github.com/PyDevices/pyscript-template) +page to make your own repository, or clone it: + +```bash +git clone https://github.com/PyDevices/pyscript-template my-app +cd my-app +``` + +## Run it locally + +From the repository root: + +```bash +./scripts/vendor_pyscript.sh +python3 -m http.server 8000 +``` + +Then open . The first command downloads the pinned +PyScript release into `vendor/` (it is `.gitignore`d, so run it once per +checkout and again after you change the pin). You should see a row of eight +colour blocks above a black canvas. Click a block, then click or drag on the +canvas to paint. + +Use that `localhost` address rather than opening `index.html` from disk or +browsing to the machine's LAN IP. Service workers, which make the app +installable and offline, only run on `http://localhost` or over `https://`. + +The service worker serves every file from its cache once it has one, so an +edit to `main.py` can look as if it did nothing. While you work, reload with +**Ctrl+Shift+R** (**Cmd+Shift+R** on a Mac), or open DevTools, Application, +Service workers and tick **Bypass for network**. [Edits that don't +show](../guides/make-it-installable.md#edits-that-dont-show) has the rest. + +## Make it yours + +1. Edit `main.py` to replace the paint demo with your application. +2. Rename the app in `index.html` and `manifest.json`, replace the two icons + and adjust `style.css`. +3. Add only the PyDevices source files or Pyodide packages the app needs to + `pyscript.json`. For an app that makes sound or uses LVGL, see + [Bring in a bigger app](../guides/bring-in-a-bigger-app.md). +4. Install it from Chrome or Edge on localhost, check that its window fits the + display, and check that it launches with the server stopped. The steps are in + [Make your app installable and offline](../guides/make-it-installable.md). diff --git a/docs/packages.md b/docs/guides/bring-in-a-bigger-app.md similarity index 98% rename from docs/packages.md rename to docs/guides/bring-in-a-bigger-app.md index 232da8c..c349453 100644 --- a/docs/packages.md +++ b/docs/guides/bring-in-a-bigger-app.md @@ -9,7 +9,7 @@ worked examples. ## Use the pydevices wheel instead of the file list -`audiodev` alone is fourteen files, so stop listing sources one by one. +`audiodev` alone is a dozen or more files, so stop listing sources one by one. PyScript's `packages` takes wheel URLs, and the `pydevices` wheel carries the whole core (`displaydev`, `audiodev`, `appdev`, `events`, `keys`, `multimer`). Two files still come from the source tree: the browser board diff --git a/docs/pwa-guide.md b/docs/guides/make-it-installable.md similarity index 89% rename from docs/pwa-guide.md rename to docs/guides/make-it-installable.md index d7c6275..512d099 100644 --- a/docs/pwa-guide.md +++ b/docs/guides/make-it-installable.md @@ -1,4 +1,4 @@ -# Progressive Web App (PWA) Guide for PyScript +# Make your app installable and offline This template is already an installable, offline-capable app. Your PyScript application can: @@ -43,7 +43,7 @@ All of this lives at the repository root: ### The manifest -[`manifest.json`](../manifest.json) tells the browser how the app appears +[`manifest.json`](../../manifest.json) tells the browser how the app appears once installed. `display: "standalone"` gives it a window with no address bar, `theme_color` colours the title bar, `background_color` is the splash screen, and the two icons cover home screens and launchers. Change the names, colours @@ -54,7 +54,7 @@ The manifest can't say how big the window should be; there is no such member. ### The service worker -[`sw.js`](../sw.js) caches the shell (`SHELL`) when it installs, then serves +[`sw.js`](../../sw.js) caches the shell (`SHELL`) when it installs, then serves every GET request from its cache first and caches anything new it fetches. On the first visit the page starts loading before the worker controls it, so `pwa.js` also hands the worker the URLs the page already loaded and the worker @@ -92,20 +92,9 @@ Browsers decide whether a page may resize its window: In a tab, `pwa.js` never touches the window. -## Run it locally +## Serve it from localhost -From the repository root: - -```bash -./scripts/vendor_pyscript.sh -python3 -m http.server 8000 -``` - -Open . A service worker only runs on a secure origin: -`http://localhost` counts, `https://` counts, and a file opened from disk or a -LAN address like `http://192.168.1.20:8000` doesn't. On localhost Chrome and -Edge show their install icon, so you can install the app and try its window -from your own machine. +[Run it locally](../get-started/index.md#run-it-locally) has the commands. A service worker only runs on a secure origin: `http://localhost` counts, `https://` counts, and a file opened from disk or a LAN address like `http://192.168.1.20:8000` doesn't. On localhost Chrome and Edge show their install icon, so you can install the app and try its window from your own machine. ### Edits that don't show diff --git a/docs/workers.md b/docs/guides/run-in-a-worker.md similarity index 99% rename from docs/workers.md rename to docs/guides/run-in-a-worker.md index 36d4e62..f3aa381 100644 --- a/docs/workers.md +++ b/docs/guides/run-in-a-worker.md @@ -1,4 +1,4 @@ -# Python in Web Workers +# Run your Python in Web Workers By default the template runs your Python on the page's main thread, which is simple and fine for most apps. When your app redraws a lot *and* has to diff --git a/docs/newcomers.md b/docs/how-it-works/index.md similarity index 61% rename from docs/newcomers.md rename to docs/how-it-works/index.md index d4f2431..c61d3d4 100644 --- a/docs/newcomers.md +++ b/docs/how-it-works/index.md @@ -1,4 +1,4 @@ -# Newcomer's guide to the PyDevices PyScript template +# How the template works This repository is a GitHub template for an installable browser application, not a shared PyDevices library. Start by using the template to create your own @@ -38,23 +38,7 @@ sw.js caches the shell and later GET responses for offline reuse The application must be served over HTTP. Opening `index.html` directly from the filesystem does not provide the origin that PyScript needs, and the service worker only runs on `http://localhost` or `https://`. The root -README's [Run it locally](../README.md#run-it-locally) has the commands. - -## Repository map - -| Path | Purpose | -|---|---| -| `index.html` | Application shell: canvas, status text, PyScript loader, and the Python entrypoint declaration. | -| `main.py` | Starter Python application. It constructs `appdev.App(board_config)`, paints the demo, and handles pointer events. | -| `pyscript.json` | Exact remote-file map for the PyDevices modules available to PyScript. | -| `manifest.json` | Browser PWA identity: names, icons, scope, and display mode. | -| `pwa.js` | Registers the service worker, sizes an installed app's window to the display, and shows the note that says how to install. | -| `sw.js` | Caches the app shell and runtime, then caches successful GET responses for offline reuse. | -| `style.css` | Shell and canvas presentation. | -| `scripts/vendor_pyscript.sh` | Downloads the pinned offline PyScript release into generated `vendor/pyscript/`. | -| `.github/workflows/tests.yml` | Vendors PyScript and runs the template's unit tests. | -| `tests/test_template.py` | Checks JSON, source pins, local shell assets, and the Pyodide-only contract. | -| `docs/pwa-guide.md` | Where the app installs, the service worker's cache, the app window, and edits that don't show. | +[Run it locally](../get-started/index.md#run-it-locally) has the commands. The files, one by one, are in [Files in the template](../reference/files.md). ## Follow the starter application @@ -88,44 +72,18 @@ that is the target runtime. (Ctrl+Shift+R) or tick DevTools' **Bypass for network** when a browser appears to serve an old file, and change `VERSION` in `sw.js` when you want browsers that already have the app to pick up a change. See - [Edits that don't show](pwa-guide.md#edits-that-dont-show). + [Edits that don't show](../guides/make-it-installable.md#edits-that-dont-show). - Keep the app at the repository root. The service worker's scope and its cached paths assume it. - Browser installation and offline behavior need `http://localhost` or an `https://` origin and at least one successful online load. They cannot be proven by opening a file from disk. -## Start a safe application change - -For normal work in a repository created from this template: - -1. Edit `main.py` to replace the paint demo with your application behavior. -2. Rename the app in `index.html` and `manifest.json`; replace the icons and - adjust `style.css` as needed. -3. Add only the PyDevices source files or Pyodide packages the app needs to - `pyscript.json`. -4. Run the local HTTP preview described in the root README; do not use a - `file:` URL. -5. Install it from Chrome or Edge on localhost and check that its window fits - the display and that it launches with the server stopped. - -The template tests can be run with: - -```bash -python3 -m unittest discover -s tests -v -``` - -The test suite vendors PyScript if necessary, then verifies that the shell, -service worker, manifest, and configuration agree. It does not replace a real -browser test of pointer input, installation, or offline caching. - ## Where to learn next - Read `main.py` and `pyscript.json` together for the Python application boundary and pinned dependency set. -- Read [the PWA guide](pwa-guide.md) before changing service-worker behavior, +- Read [Make your app installable and offline](../guides/make-it-installable.md) before changing service-worker behavior, caching, the app window, or installation instructions. -- Read `tests/test_template.py` before moving a shell file or adding a generated - asset to the cache list. - For display/event APIs, follow the linked PyDevices source release rather than copying its implementation into this template. diff --git a/docs/images/paint.png b/docs/images/paint.png new file mode 100644 index 0000000000000000000000000000000000000000..7aac8e2144f6caef53a68b3590fa1decfcbbe905 GIT binary patch literal 77330 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 UQUs2Eq@sGJuJ@!|_4SAU1&F4v`v3p{ literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..87d5d2a --- /dev/null +++ b/docs/index.md @@ -0,0 +1,24 @@ +# PyScript template docs + +Start with [Get started](get-started/index.md) to make your own copy and see it +run, then pick a guide for what you want to change. + +**Get started** + +- [Make your first app](get-started/index.md): use the template, run it on localhost, edit `main.py`. + +**Guides** + +- [Make your app installable and offline](guides/make-it-installable.md) +- [Bring in a bigger app](guides/bring-in-a-bigger-app.md) +- [Run your Python in Web Workers](guides/run-in-a-worker.md) + +**Reference** + +- [Files in the template](reference/files.md) + +**How it works** + +- [How the template works](how-it-works/index.md) + +Building on the template's own code is covered in [CONTRIBUTING.md](../CONTRIBUTING.md). diff --git a/docs/reference/files.md b/docs/reference/files.md new file mode 100644 index 0000000..4ac6d27 --- /dev/null +++ b/docs/reference/files.md @@ -0,0 +1,15 @@ +# Files in the template + +| Path | Purpose | +|---|---| +| `index.html` | Application shell: canvas, status text, PyScript loader, and the Python entrypoint declaration. | +| `main.py` | Starter Python application. It constructs `appdev.App(board_config)`, paints the demo, and handles pointer events. | +| `pyscript.json` | Exact remote-file map for the PyDevices modules available to PyScript. | +| `manifest.json` | Browser PWA identity: names, icons, scope, and display mode. | +| `pwa.js` | Registers the service worker, sizes an installed app's window to the display, and shows the note that says how to install. | +| `sw.js` | Caches the app shell and runtime, then caches successful GET responses for offline reuse. The cache is named after `VERSION` in this file. | +| `style.css` | Shell and canvas presentation. | +| `icon-192.png`, `icon-512.png` | App icons. The 512 is also the maskable one. | +| `workers/` | Optional kit for running Python in Web Workers: `host.js`, `python_worker.js`, `audio_worklet.js`. See [Run your Python in Web Workers](../guides/run-in-a-worker.md). | +| `scripts/vendor_pyscript.sh` | Downloads the pinned offline PyScript release into generated `vendor/pyscript/`. Set `PYSCRIPT_VERSION` to override the pin for one run. | +| `vendor/pyscript/` | Generated and ignored by Git. Never hand-edit it. | diff --git a/sw.js b/sw.js index 50f30ed..e5f436b 100644 --- a/sw.js +++ b/sw.js @@ -2,7 +2,7 @@ // fetched, so a browser that has already visited keeps the old copies. Change // VERSION whenever you change a file: the next visit installs a worker with a // new cache and the old one is deleted. While you are editing, a hard reload -// skips the worker instead (see docs/pwa-guide.md, "Edits that don't show"). +// skips the worker instead (see docs/guides/make-it-installable.md, "Edits that don't show"). const VERSION = '2'; const CACHE_NAME = 'pyscript-template-' + VERSION; const SHELL = [ From d75c0be9e4095ef95b09c8f0943de2c732c3522e Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 27 Oct 2026 00:35:53 -0500 Subject: [PATCH 2/3] Docs: OmniPython byline; the README example sets the status line --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b8df207..c284f5c 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,18 @@ python3 -m http.server 8000 ``` Open . Here is a paint app in 20 lines; it is a cut-down -`main.py`, which also sets the status line and a 500x500 display size: +`main.py`, which also sets a 500x500 display size: ```python import board_config, appdev +from pyscript import document display, app = board_config.display_drv, appdev.App(board_config) colors = [0xFFFF, 0xF800, 0x07E0, 0x001F, 0x07FF, 0xF81F, 0xFFE0, 0x0000] block, selected = display.width // len(colors), 0 for i, color in enumerate(colors): display.fill_rect(i * block, 0, block, 30, color) display.show() - +document.querySelector("#status").textContent = "Pick a colour, then paint." def on_touch(event): global selected x, y = event.pos @@ -36,7 +37,6 @@ def on_touch(event): else: display.fill_rect(x - 3, y - 3, 6, 6, colors[selected]) display.show() - app.on(app.events.MOUSEBUTTONDOWN, on_touch) app.on(app.events.MOUSEMOTION, on_touch) app.run() @@ -47,4 +47,4 @@ paint. The picture at the top of this page is that app after four strokes. [Docs](https://github.com/PyDevices/pyscript-template/blob/main/docs/index.md) · [Examples](https://pydevices.github.io/pydevices-examples/gallery/) · [Roadmap](ROADMAP.md) -Made by [PyDevices](https://pydevices.com). +OmniPython is made by [PyDevices](https://pydevices.com). From f6a9514510ca30eab52d3582bf0f1a1c1596d059 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 27 Oct 2026 00:50:32 -0500 Subject: [PATCH 3/3] Docs: a tool's byline is "Made by PyDevices." --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c284f5c..f887eac 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,4 @@ paint. The picture at the top of this page is that app after four strokes. [Docs](https://github.com/PyDevices/pyscript-template/blob/main/docs/index.md) · [Examples](https://pydevices.github.io/pydevices-examples/gallery/) · [Roadmap](ROADMAP.md) -OmniPython is made by [PyDevices](https://pydevices.com). +Made by [PyDevices](https://pydevices.com).