From b49d9300c05c736c33517ef5353e5fc12f315597 Mon Sep 17 00:00:00 2001 From: "pydevices-release-automation[bot]" Date: Tue, 27 Oct 2026 10:58:08 +0000 Subject: [PATCH 1/5] Release 0.1.4 --- CHANGELOG.md | 36 ++++++++++++++++++++++++++++++++++++ VERSION | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48c9bdb..c8287ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,39 @@ +## v0.1.4 (2026-10-27) + +- Extension: count bytes moving inside a file as transfer activity +- Tests: fs_writefile now takes a progress callback +- Test: one with statement for ruff +- Desktop: drop the raw REPL prompt left over from connect before opening the REPL pane (#150) +- Desktop: bytes moving inside one file count as transfer activity (#149) +- Sidecar: a Windows job object ends its children when it ends (#146) +- Sidecar: child processes don't inherit stdin, so circup no longer hangs on Windows +- Match the CIRCUITPY drive to the connected board's USB serial (#144) +- Tests: the serial transport's port is wrapped for bulk reads +- Docs: the Docs link opens docs/ on GitHub, and the index reads there +- Download over USB serial: read the reply in bulk, not a byte per call +- REPL pane: stop reprinting the banner after every transfer +- File Transfer: give the transfer and refresh buttons accessible names +- Add a code signing policy +- ble: set is_pty on the BLE transport, which mpremote 1.29 reads while it waits for the board +- Docs: Bluetooth figures re-measured on MicroPython 1.30 preview and mpremote 1.29 +- Docs: the build_mp.py link follows micropython-pydevices' page moves +- Docs: plans leave the repo; the example names its holder; board tool, not workbench +- Docs: restructure to the launch template, with a Read the Docs site +- Desktop: Linux ships as the .deb; the AppImage moves to the roadmap +- Desktop CI: check the .deb by unpacking it +- Desktop: drop _tkinter from the Linux Python, whose Tk libraries are gone +- Desktop CI: verbose Linux bundling to see linuxdeploy's error +- Desktop: Linux .deb and AppImage, installers attached to releases +- Desktop: version from VERSION, a CI build of the Windows installer, and docs +- Emulator: replace a frozen window instead of reloading it; the shell handles closing so a stuck page can't block it +- Emulator: set is_pty for mpremote 1.29, reload a frozen window once, hold bytes while it boots, its own picker group +- Emulator window: display, flash folder, routing in the shell, reload when frozen +- Emulator: time.sleep hands the page back, so Run, output and Stop work during a loop +- Emulator as a board: emu:// in the sidecar, the wasm board core, a Node stand-in +- Desktop spike: shutdown can't wait on a stalled write; shell.log records each step +- Desktop spike: no web server; the page talks to mpftp.desktop_host through the app +- Desktop spike: Tauri shell that owns the mpftp server, bundled Windows Python + ## v0.1.3 (2026-10-22) - get: ask again for a chunk that arrives with extra bytes on it (#129) diff --git a/VERSION b/VERSION index b1e80bb..845639e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.3 +0.1.4 From 17b39d426011f76808cd4f8fcade8ddfa99b4e0e Mon Sep 17 00:00:00 2001 From: "pydevices-release-automation[bot]" Date: Tue, 27 Oct 2026 10:58:22 +0000 Subject: [PATCH 2/5] Release 0.1.4: every declaration carries the version --- .claude-plugin/marketplace.json | 2 +- desktop/package-lock.json | 4 ++-- desktop/package.json | 2 +- extension/package-lock.json | 4 ++-- extension/package.json | 2 +- integrations/claude-code-plugin/.claude-plugin/plugin.json | 2 +- ui/package-lock.json | 4 ++-- ui/package.json | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index dca5e42..ca18062 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "mpftp", "source": "./integrations/claude-code-plugin", "description": "A skill that teaches the mpftp CLI for MicroPython/CircuitPython boards: file transfer, REPL, driving a running app, and firmware.", - "version": "0.1.3" + "version": "0.1.4" } ] } diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 856ef46..ab2a00f 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -1,12 +1,12 @@ { "name": "mpftp-desktop", - "version": "0.1.3", + "version": "0.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mpftp-desktop", - "version": "0.1.3", + "version": "0.1.4", "license": "MIT", "devDependencies": { "@tauri-apps/cli": "^2.12.3" diff --git a/desktop/package.json b/desktop/package.json index 242e54c..7832643 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "mpftp-desktop", - "version": "0.1.3", + "version": "0.1.4", "private": true, "description": "mpftp as a desktop app: a Tauri window around the browser interface, with its own Python", "license": "MIT", diff --git a/extension/package-lock.json b/extension/package-lock.json index c284849..ace1c06 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "mpftp", - "version": "0.1.3", + "version": "0.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mpftp", - "version": "0.1.3", + "version": "0.1.4", "license": "MIT", "dependencies": { "@vscode/codicons": "^0.0.45" diff --git a/extension/package.json b/extension/package.json index 31623d8..40be57f 100644 --- a/extension/package.json +++ b/extension/package.json @@ -2,7 +2,7 @@ "name": "mpftp", "displayName": "mpftp — MicroPython / CircuitPython Board Tools", "description": "Connect to MicroPython and CircuitPython boards over USB serial or Wi-Fi (WebREPL): dual-pane file transfer, ANSI REPL, mip/circup packages, and guided MicroPython firmware download/build/flash. Works on Linux, Windows, and WSL (COM ports via Windows Python).", - "version": "0.1.3", + "version": "0.1.4", "publisher": "pydevices", "license": "MIT", "engines": { diff --git a/integrations/claude-code-plugin/.claude-plugin/plugin.json b/integrations/claude-code-plugin/.claude-plugin/plugin.json index 8c9968f..4c6cccf 100644 --- a/integrations/claude-code-plugin/.claude-plugin/plugin.json +++ b/integrations/claude-code-plugin/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "mpftp", "description": "A skill that teaches the mpftp CLI for MicroPython/CircuitPython boards: file transfer, REPL, driving a running app, and firmware.", - "version": "0.1.3", + "version": "0.1.4", "author": { "name": "Brad Barnett" }, diff --git a/ui/package-lock.json b/ui/package-lock.json index b2bcecc..f273b0c 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "mpftp-ui", - "version": "0.1.3", + "version": "0.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mpftp-ui", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@codemirror/lang-python": "^6.2.1", "@xterm/addon-fit": "^0.11.0", diff --git a/ui/package.json b/ui/package.json index 258fe48..6a7db56 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "mpftp-ui", - "version": "0.1.3", + "version": "0.1.4", "private": true, "description": "mpftp local PWA: file transfer + REPL for a MicroPython/CircuitPython board.", "scripts": { From e72a2ea7ef59c2f7fa0216921dc2d7b0dbef7776 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 27 Oct 2026 05:59:42 -0500 Subject: [PATCH 3/5] Changelog for 0.1.4, written for users --- CHANGELOG.md | 57 ++++++++++++++++++++++------------------------------ 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8287ee..3187a9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,38 +1,29 @@ ## v0.1.4 (2026-10-27) -- Extension: count bytes moving inside a file as transfer activity -- Tests: fs_writefile now takes a progress callback -- Test: one with statement for ruff -- Desktop: drop the raw REPL prompt left over from connect before opening the REPL pane (#150) -- Desktop: bytes moving inside one file count as transfer activity (#149) -- Sidecar: a Windows job object ends its children when it ends (#146) -- Sidecar: child processes don't inherit stdin, so circup no longer hangs on Windows -- Match the CIRCUITPY drive to the connected board's USB serial (#144) -- Tests: the serial transport's port is wrapped for bulk reads -- Docs: the Docs link opens docs/ on GitHub, and the index reads there -- Download over USB serial: read the reply in bulk, not a byte per call -- REPL pane: stop reprinting the banner after every transfer -- File Transfer: give the transfer and refresh buttons accessible names -- Add a code signing policy -- ble: set is_pty on the BLE transport, which mpremote 1.29 reads while it waits for the board -- Docs: Bluetooth figures re-measured on MicroPython 1.30 preview and mpremote 1.29 -- Docs: the build_mp.py link follows micropython-pydevices' page moves -- Docs: plans leave the repo; the example names its holder; board tool, not workbench -- Docs: restructure to the launch template, with a Read the Docs site -- Desktop: Linux ships as the .deb; the AppImage moves to the roadmap -- Desktop CI: check the .deb by unpacking it -- Desktop: drop _tkinter from the Linux Python, whose Tk libraries are gone -- Desktop CI: verbose Linux bundling to see linuxdeploy's error -- Desktop: Linux .deb and AppImage, installers attached to releases -- Desktop: version from VERSION, a CI build of the Windows installer, and docs -- Emulator: replace a frozen window instead of reloading it; the shell handles closing so a stuck page can't block it -- Emulator: set is_pty for mpremote 1.29, reload a frozen window once, hold bytes while it boots, its own picker group -- Emulator window: display, flash folder, routing in the shell, reload when frozen -- Emulator: time.sleep hands the page back, so Run, output and Stop work during a loop -- Emulator as a board: emu:// in the sidecar, the wasm board core, a Node stand-in -- Desktop spike: shutdown can't wait on a stalled write; shell.log records each step -- Desktop spike: no web server; the page talks to mpftp.desktop_host through the app -- Desktop spike: Tauri shell that owns the mpftp server, bundled Windows Python +MCU Control Desktop, the desktop app, ships for the first time: a Windows +installer and a Linux `.deb` are attached to this release. Both bundle their +own Python, so nothing else needs installing. Neither is code-signed yet, so +Windows warns on first run. + +- Desktop: file transfer, the REPL and the browser board emulator in one + window, with the installers attached to each release +- Desktop: uninstalling removes the bundled Python and its cache; the "Delete + the application data" box also removes the app's WebView profile and logs (#132) +- Downloads over USB serial are much faster: the reply is read in bulk instead + of a byte per call. A 20 KB file now takes about 6 s instead of 20 s (#133) +- The REPL pane no longer reprints the banner after every transfer (#134), or + shows a stray `>` when it connects (#150) +- A large file that is still moving is no longer reported as "may be hung", in + the Desktop app and in VS Code (#149) +- The transfer and refresh buttons have accessible names (#135) +- circup and the CircuitPython file commands use the CIRCUITPY drive of the + board you're connected to, when two are attached (#138) +- circup no longer hangs on Windows (#145) +- From WSL, stopping a command (Ctrl-C or a timeout) also stops the Windows + helper and its children, so the COM port is free again at once (#146) +- Bluetooth sessions work with mpremote 1.29 +- A code signing policy, and the docs restructured, with figures re-measured + on MicroPython 1.30 preview and mpremote 1.29 ## v0.1.3 (2026-10-22) From 090ed6043becf81088fb22da536978be19756e53 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 27 Oct 2026 05:59:56 -0500 Subject: [PATCH 4/5] Changelog: the desktop app keeps the mpftp name for now --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3187a9f..5b10238 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## v0.1.4 (2026-10-27) -MCU Control Desktop, the desktop app, ships for the first time: a Windows +The mpftp desktop app ships for the first time: a Windows installer and a Linux `.deb` are attached to this release. Both bundle their own Python, so nothing else needs installing. Neither is code-signed yet, so Windows warns on first run. From 21a58ae7222965b180138e93f29bef6e60778158 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 27 Oct 2026 06:04:55 -0500 Subject: [PATCH 5/5] Desktop CI: clear old installers the cargo cache brings back before building --- .github/workflows/desktop.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/desktop.yml b/.github/workflows/desktop.yml index b776250..ed14d98 100644 --- a/.github/workflows/desktop.yml +++ b/.github/workflows/desktop.yml @@ -108,7 +108,10 @@ jobs: working-directory: desktop env: MPFTP_EMU_RUNTIME: ${{ github.workspace }}/.workbench/assets/pydevices - run: npx tauri build --target "$TARGET" + # The cargo cache restores target/, installers from earlier versions included. + run: | + rm -rf "src-tauri/target/$TARGET/release/bundle" + npx tauri build --target "$TARGET" - name: Check what was built id: built @@ -204,7 +207,10 @@ jobs: working-directory: desktop env: MPFTP_EMU_RUNTIME: ${{ github.workspace }}/.workbench/assets/pydevices - run: npx tauri build + # The cargo cache restores target/, packages from earlier versions included. + run: | + rm -rf src-tauri/target/release/bundle + npx tauri build - name: Check what was built id: built