diff --git a/.github/workflows/mcp-dist.yml b/.github/workflows/mcp-dist.yml
index f7479c80..54770490 100644
--- a/.github/workflows/mcp-dist.yml
+++ b/.github/workflows/mcp-dist.yml
@@ -17,7 +17,7 @@ jobs:
build-viperide:
runs-on: ubuntu-latest
env:
- VIPER_IDE_BASE_URL: https://pydevices.github.io/workbench
+ VIPER_IDE_BASE_URL: https://workbench.pydevices.com
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 37250279..8186f06c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -41,7 +41,7 @@ jobs:
fi
- name: Build the app
env:
- VIPER_IDE_BASE_URL: https://pydevices.github.io/workbench
+ VIPER_IDE_BASE_URL: https://workbench.pydevices.com
run: |
npm ci
python3 build.py --skip-tests
diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml
index 83de2c7b..9345b3f5 100644
--- a/.github/workflows/static.yml
+++ b/.github/workflows/static.yml
@@ -29,7 +29,7 @@ jobs:
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
env:
- VIPER_IDE_BASE_URL: https://pydevices.github.io/workbench
+ VIPER_IDE_BASE_URL: https://workbench.pydevices.com
steps:
- name: Checkout
uses: actions/checkout@v7
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ca53f5df..e540ee42 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -33,7 +33,7 @@ Workbench loads its WebAssembly runtimes, virtual filesystem archives and `manif
- In JavaScript, as the `VIPER_IDE_BASE_URL` constant (replaced by Rollup)
- In HTML, as the `${VIPER_IDE_BASE_URL}` placeholder (replaced while copying the files into `build/`)
-`build.py` defaults it to `http://localhost:10001` and passes it on to Rollup. The `static.yml` and `release.yml` CI workflows both set `VIPER_IDE_BASE_URL=https://pydevices.github.io/workbench` explicitly for production builds (`static.yml` for the GitHub Pages deploy on every push to `main`, `release.yml` for the bundle attached to a tagged release).
+`build.py` defaults it to `http://localhost:10001` and passes it on to Rollup. The `static.yml` and `release.yml` CI workflows both set `VIPER_IDE_BASE_URL=https://workbench.pydevices.com` explicitly for production builds (`static.yml` for the GitHub Pages deploy on every push to `main`, `release.yml` for the bundle attached to a tagged release).
**To override it manually, set `VIPER_IDE_BASE_URL`:**
@@ -158,7 +158,7 @@ Workbench has two independent release tracks (see `.github/workflows/`):
- **App releases**: pushing a plain `vX.Y.Z` tag (matching `v[0-9]*`) triggers
`release.yml`, which builds the app with
- `VIPER_IDE_BASE_URL=https://pydevices.github.io/workbench` via
+ `VIPER_IDE_BASE_URL=https://workbench.pydevices.com` via
`python3 build.py --skip-tests`, zips `build/`, and attaches it to a GitHub
Release for that tag. It first refuses to run against a pre-fork tree (a
`package.json` name that isn't Workbench's), since the `v0.5.x`-`v0.6.x`
@@ -170,7 +170,7 @@ Workbench has two independent release tracks (see `.github/workflows/`):
- **GitHub Pages**: every push to `main` runs `static.yml`, which builds with
`python3 build.py --prepare && npm run lint && npm run test`, then
`python3 build.py --skip-tests`, and deploys `build/` to
- . This is separate from, and more
+ . This is separate from, and more
frequent than, either tagged release track above.
Tags `v0.5.x` and `v0.6.x` predate the fork and are upstream ViperIDE's release history.
diff --git a/README.md b/README.md
index 2712ed79..8e78c005 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Workbench is a MicroPython IDE that runs in your browser, with a built-in simula
## Open it
-There's nothing to install: open . A browser can also install it as an app (the install icon in Chrome or Edge's address bar). To run your own copy, see [CONTRIBUTING.md](CONTRIBUTING.md).
+There's nothing to install: open . A browser can also install it as an app (the install icon in Chrome or Edge's address bar). To run your own copy, see [CONTRIBUTING.md](CONTRIBUTING.md).
## Try it
@@ -36,6 +36,6 @@ Area(80, 40, 160, 160)
A cyan circle appears on the navy display, and the last line reads back a pixel on its edge: `0x7ff` is `pal.CYAN`.
-[Docs](https://github.com/PyDevices/workbench/blob/main/docs/index.md) · [Examples](https://pydevices.github.io/gallery/gallery/) · [Roadmap](ROADMAP.md)
+[Docs](https://github.com/PyDevices/workbench/blob/main/docs/index.md) · [Examples](https://gallery.omnipython.org/) · [Roadmap](ROADMAP.md)
Made by [PyDevices](https://pydevices.com).
diff --git a/docs/get-started/first-program.md b/docs/get-started/first-program.md
index 407f1581..b8b2cb22 100644
--- a/docs/get-started/first-program.md
+++ b/docs/get-started/first-program.md
@@ -2,7 +2,7 @@
You can do this without a board. Workbench starts a MicroPython virtual device in your browser, with a display, the PyDevices libraries and example programs already on its file system.
-1. Open and press the simulator button in the toolbar. The terminal prints a `>>>` prompt when the device is up.
+1. Open and press the simulator button in the toolbar. The terminal prints a `>>>` prompt when the device is up.
2. Click `04_pygraphics_shapes.py` in the file tree and press Run (or F5). The shapes appear on the display next to the editor, and the terminal prints `Rendered pygraphics vector FrameBuffer successfully to display!`.
3. Type at the `>>>` prompt:
@@ -15,4 +15,4 @@ Edit the file and press Run again. To put the same program on a real board, conn
The simulator also has a resolution and shape picker, including round watch faces, and you can resize the display by dragging it.
-More programs are in the [gallery](https://pydevices.github.io/gallery/gallery/); [open one in Workbench](../guides/open-a-gallery-example.md) by name.
+More programs are in the [gallery](https://gallery.omnipython.org/); [open one in Workbench](../guides/open-a-gallery-example.md) by name.
diff --git a/docs/get-started/install.md b/docs/get-started/install.md
index a0222812..f367fdd2 100644
--- a/docs/get-started/install.md
+++ b/docs/get-started/install.md
@@ -1,6 +1,6 @@
# Open Workbench
-There's nothing to install. Open in a browser and the editor, file manager, terminal and simulator are all there.
+There's nothing to install. Open in a browser and the editor, file manager, terminal and simulator are all there.
## Install it as an app
diff --git a/docs/guides/allow-workbench-through-a-firewall.md b/docs/guides/allow-workbench-through-a-firewall.md
index a55b64f0..f390110d 100644
--- a/docs/guides/allow-workbench-through-a-firewall.md
+++ b/docs/guides/allow-workbench-through-a-firewall.md
@@ -2,7 +2,7 @@
If you manage a network, unblock these domains so Workbench works:
-- `pydevices.github.io`: Workbench itself, served from GitHub Pages.
+- `workbench.pydevices.com`: Workbench itself, served from GitHub Pages.
- `hub.viper-ide.org`: the relay that [connecting over the internet](connect-over-the-internet.md) uses, inherited from upstream ViperIDE.
- `micropython.org`: the MicroPython package index the package manager reads.
- `raw.githubusercontent.com`: packages installed from GitHub.
diff --git a/docs/guides/connect-over-bluetooth.md b/docs/guides/connect-over-bluetooth.md
index d3f78617..981bfca1 100644
--- a/docs/guides/connect-over-bluetooth.md
+++ b/docs/guides/connect-over-bluetooth.md
@@ -2,7 +2,7 @@
A board with native Bluetooth LE, such as a Raspberry Pi Pico W or an ESP32, can run a REPL that Workbench reaches over the air. You need a Chromium-based browser (Chrome, Edge, Opera, Brave). It usually works on Windows, Linux, macOS and Android, and isn't available on iOS.
-1. Connect [Workbench](https://pydevices.github.io/workbench/) to the board over USB ([how](connect-over-usb.md)).
+1. Connect [Workbench](https://workbench.pydevices.com/) to the board over USB ([how](connect-over-usb.md)).
2. In the left panel, open `Package Manager` and install `viper-tools`.
3. Put this in the board's `main.py`:
diff --git a/docs/guides/connect-over-the-internet.md b/docs/guides/connect-over-the-internet.md
index 2dcefaf5..df0bba0b 100644
--- a/docs/guides/connect-over-the-internet.md
+++ b/docs/guides/connect-over-the-internet.md
@@ -2,7 +2,7 @@
A secure WebSocket relay lets you reach a board from anywhere. This is experimental and may have bugs.
-1. Connect [Workbench](https://pydevices.github.io/workbench/) to the board over USB ([how](connect-over-usb.md)).
+1. Connect [Workbench](https://workbench.pydevices.com/) to the board over USB ([how](connect-over-usb.md)).
2. In the left panel, open `Package Manager` and install `viper-tools`.
3. Put this in the board's `main.py`:
@@ -23,7 +23,7 @@ A secure WebSocket relay lets you reach a board from anywhere. This is experimen
IDE available on https://viper-ide.org?wss=YOUR-DEVICE-UID
```
-5. Open `https://pydevices.github.io/workbench/?wss=YOUR-DEVICE-UID` with the ID from that line. The link the board prints opens ViperIDE, because `viper-tools` comes from there.
+5. Open `https://workbench.pydevices.com/?wss=YOUR-DEVICE-UID` with the ID from that line. The link the board prints opens ViperIDE, because `viper-tools` comes from there.
## Use your own relay
diff --git a/docs/guides/connect-over-usb.md b/docs/guides/connect-over-usb.md
index a222f019..bae0e8ee 100644
--- a/docs/guides/connect-over-usb.md
+++ b/docs/guides/connect-over-usb.md
@@ -3,7 +3,7 @@
Plug the board in and connect to it from Workbench over Web Serial (or WebUSB). You need a Chromium-based browser (Chrome, Edge, Opera, Brave): this isn't available on iOS or Safari. See [Browser and platform support](../reference/browser-support.md).
1. Connect your device with a USB cable and check that your operating system recognizes it. Some USB devices need a driver installed. Some boards aren't detected by Android over USB OTG.
-2. Open [Workbench](https://pydevices.github.io/workbench/) and press the USB button.
+2. Open [Workbench](https://workbench.pydevices.com/) and press the USB button.
3. Pick your board from the list.
If Android doesn't see your board, turn on `Use WebUSB instead of WebSerial` in Settings and try again.
diff --git a/docs/guides/connect-over-your-network.md b/docs/guides/connect-over-your-network.md
index b835da71..94524cac 100644
--- a/docs/guides/connect-over-your-network.md
+++ b/docs/guides/connect-over-your-network.md
@@ -4,7 +4,7 @@ The board runs a web server and Workbench connects to it over WebREPL. Your comp
The WebSocket this uses isn't encrypted, and a secure site like Workbench can't open one. To get around that, the board serves a small page over plain HTTP, and that page loads the IDE from `viper-ide.org`, which is ViperIDE's site, not Workbench's. To reach a board over the internet instead, use [a relay](connect-over-the-internet.md).
-1. Connect [Workbench](https://pydevices.github.io/workbench/) to the board over USB ([how](connect-over-usb.md)).
+1. Connect [Workbench](https://workbench.pydevices.com/) to the board over USB ([how](connect-over-usb.md)).
2. In the left panel, open `Package Manager` and install `viper-tools`.
3. Put this in the board's `main.py`:
diff --git a/docs/guides/open-a-gallery-example.md b/docs/guides/open-a-gallery-example.md
index d7178208..1c564717 100644
--- a/docs/guides/open-a-gallery-example.md
+++ b/docs/guides/open-a-gallery-example.md
@@ -1,9 +1,9 @@
# Open a gallery example
-Any card of the [PyDevices gallery](https://pydevices.github.io/gallery/gallery/) opens in Workbench by name:
+Any card of the [PyDevices gallery](https://gallery.omnipython.org/) opens in Workbench by name:
```
-https://pydevices.github.io/workbench/?vm=1&example=paint
+https://workbench.pydevices.com/?vm=1&example=paint
```
That starts the simulator, writes the example's files to it and opens the entry file in the editor, ready for Run.
diff --git a/docs/guides/share-a-package-with-an-install-link.md b/docs/guides/share-a-package-with-an-install-link.md
index 3e8e6e64..d747b625 100644
--- a/docs/guides/share-a-package-with-an-install-link.md
+++ b/docs/guides/share-a-package-with-an-install-link.md
@@ -4,13 +4,13 @@ A link to Workbench can install your library or project onto whatever board the
For instance, this installs [`aiodns`](https://github.com/vshymanskyy/aiodns):
-[](https://pydevices.github.io/workbench/?install=github:vshymanskyy/aiodns)
+[](https://workbench.pydevices.com/?install=github:vshymanskyy/aiodns)
The image is served from ViperIDE's repository.
## Make the link
-Use `https://pydevices.github.io/workbench/?install=YOUR_LINK`. `YOUR_LINK` is one of:
+Use `https://workbench.pydevices.com/?install=YOUR_LINK`. `YOUR_LINK` is one of:
- `github:org/repo`
- `github:org/repo/path/to/package.json`
@@ -35,6 +35,6 @@ Links in the readme are shown but can't be clicked, because a readme isn't allow
## Add the button to your README
```md
-[](https://pydevices.github.io/workbench/?install=YOUR_LINK)
+[](https://workbench.pydevices.com/?install=YOUR_LINK)
```
diff --git a/docs/index.md b/docs/index.md
index f74ce1a9..9e2c5fc6 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,6 +1,6 @@
# Workbench
-Workbench is a MicroPython IDE for the browser, with a built-in device simulator. Live at .
+Workbench is a MicroPython IDE for the browser, with a built-in device simulator. Live at .
## Get started
@@ -35,4 +35,4 @@ Workbench is a MicroPython IDE for the browser, with a built-in device simulator
- [Changelog](changelog.md)
-Also: [Examples gallery](https://pydevices.github.io/gallery/gallery/), [Roadmap](../ROADMAP.md), [Contributing](../CONTRIBUTING.md).
+Also: [Examples gallery](https://gallery.omnipython.org/), [Roadmap](../ROADMAP.md), [Contributing](../CONTRIBUTING.md).
diff --git a/docs/reference/features.md b/docs/reference/features.md
index 94cdfc9a..1c02cd70 100644
--- a/docs/reference/features.md
+++ b/docs/reference/features.md
@@ -7,8 +7,8 @@
- [`WebREPL over internet 🌎`](../guides/connect-over-the-internet.md)
- [`WebREPL in local network`](../guides/connect-over-your-network.md)
- [`Bluetooth LE`](../guides/connect-over-bluetooth.md)
- - [`P2P/WebRTC Bridge`](https://pydevices.github.io/workbench/bridge.html)
- - [`Virtual Device`](https://pydevices.github.io/workbench/?vm=1), also on its own simulator toolbar button
+ - [`P2P/WebRTC Bridge`](https://workbench.pydevices.com/bridge.html)
+ - [`Virtual Device`](https://workbench.pydevices.com/?vm=1), also on its own simulator toolbar button
- **File Editor**
- Syntax highlighting for `.py`, `.json`, `.inf`, `.toml`, `.pem`
- Auto expand/minify of `.json` files
diff --git a/docs/reference/url-parameters.md b/docs/reference/url-parameters.md
index eff17005..9d2dccaa 100644
--- a/docs/reference/url-parameters.md
+++ b/docs/reference/url-parameters.md
@@ -8,4 +8,4 @@ Workbench reads these from the address it's opened with.
| `example=` | opens one gallery card: writes its files to the connected device and opens its entry file | [Open a gallery example](../guides/open-a-gallery-example.md) |
| `install=` | installs a package on the board once one is connected | [Share a package](../guides/share-a-package-with-an-install-link.md) |
| `wss=` | connects to a board through the secure WebSocket relay | [Connect over the internet](../guides/connect-over-the-internet.md) |
-| `rtc=` | connects over a peer-to-peer WebRTC link, set up by the [bridge page](https://pydevices.github.io/workbench/bridge.html) | |
+| `rtc=` | connects over a peer-to-peer WebRTC link, set up by the [bridge page](https://workbench.pydevices.com/bridge.html) | |
diff --git a/src/pydevices/gallery.js b/src/pydevices/gallery.js
index 7742663d..a687be8b 100644
--- a/src/pydevices/gallery.js
+++ b/src/pydevices/gallery.js
@@ -27,7 +27,7 @@
import { fetchJSON, fetchText, splitPath } from '../utils.js'
-export const GALLERY_URL = 'https://pydevices.github.io/gallery/gallery/'
+export const GALLERY_URL = 'https://gallery.omnipython.org/'
/* How many lines the gallery scans for its `# key: a, b` headers */
const HEADER_LINES = 10
diff --git a/test/browser/gallery-open.spec.js b/test/browser/gallery-open.spec.js
index eb174fae..b9f1bed6 100644
--- a/test/browser/gallery-open.spec.js
+++ b/test/browser/gallery-open.spec.js
@@ -12,7 +12,7 @@ import path from 'node:path'
import { fileURLToPath } from 'node:url'
import { terminalText, focusTerminal, distinctCanvasColors } from './helpers.js'
-const GALLERY = 'https://pydevices.github.io/gallery/gallery/'
+const GALLERY = 'https://gallery.omnipython.org/'
const FIXTURES = path.join(path.dirname(fileURLToPath(import.meta.url)), 'fixtures', 'gallery')
/* The app's service worker fetches on the page's behalf, and a request it