Tools: I Got Tired of Flashing My Pico Manually, So I Built a GUI (2026)

Tools: I Got Tired of Flashing My Pico Manually, So I Built a GUI (2026)

What it does

Setup Mode

Payload management

How it's built

Try it If you've ever set up a pico-ducky — a Raspberry Pi Pico turned into a USB Rubber Ducky — you know the process. Hold BOOTSEL, plug in, copy a nuke file, wait for it to remount, copy CircuitPython, wait again, copy all the project files and libraries, then arm a payload. Every. Single. Time. It's not hard. It's just annoying. I was doing this enough that I wrote a bash script to automate it. That helped. But then I started wanting a payload manager, a built-in editor, a live device indicator — and at that point a bash script wasn't cutting it anymore. So I rewrote the whole thing as a desktop app. That's pico-flash-gui. It's an Electron app for Linux that automates the full pico-ducky flash workflow. You click Start Flash, hold BOOTSEL on your Pico and plug it in, and the app takes over: The whole thing runs unattended. You don't touch anything between steps 2 and 5. On first launch it also downloads every dependency automatically — CircuitPython firmware, pico-ducky source files, Adafruit libraries. Everything is cached so subsequent flashes are instant. Supports Pico, Pico W, Pico 2, and Pico 2 W. Flash Mode is for when you want to wipe and reflash. But sometimes you just want to swap the armed payload, or grab a file off the device without nuking it. That's what Setup Mode is for. Bridge GP0 to GND before plugging in (this suppresses payload execution so the Pico mounts as a normal drive), and the app detects the CIRCUITPY volume and gives you four options: There's a full payload panel built into the app. You can import .dd or .txt files, write payloads from scratch in a built-in editor, edit existing ones, and delete them. The armed payload is tracked across sessions. For Pico W boards there's also a Wi-Fi settings panel — you can update the SSID and password on an already-flashed device without reflashing it. It's Electron with plain HTML/CSS/JS — no frontend framework. The backend (main process) handles all the hardware interaction: file copies, shell commands for mounting/unmounting, polling for device status every 2 seconds. The Electron security setup is done properly — contextIsolation: true, nodeIntegration: false, and a contextBridge preload that only exposes specific named functions to the renderer. No raw IPC access from the frontend. One thing I'm reasonably happy with is how clean the flash sequence ended up. The flasher waits for mounts and unmounts using a polling loop rather than arbitrary timeouts, so it actually adapts to how long the hardware takes rather than just hoping a fixed delay is long enough. Requires Linux, Node.js v18+, and unzip. Tested on Ubuntu 22.04 and 24.04. An AppImage build is coming soon so you won't need Node at all. This tool is for use on devices you own. GitHub: Umbra-Domini/pico-flash-gui Built because I was tired of doing it by hand. Happy to hear feedback or answer questions in the comments. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

$ -weight: 500;">git clone https://github.com/Umbra-Domini/pico-flash-gui.-weight: 500;">git cd pico-flash-gui -weight: 500;">npm -weight: 500;">install -weight: 500;">npm -weight: 500;">start -weight: 500;">git clone https://github.com/Umbra-Domini/pico-flash-gui.-weight: 500;">git cd pico-flash-gui -weight: 500;">npm -weight: 500;">install -weight: 500;">npm -weight: 500;">start -weight: 500;">git clone https://github.com/Umbra-Domini/pico-flash-gui.-weight: 500;">git cd pico-flash-gui -weight: 500;">npm -weight: 500;">install -weight: 500;">npm -weight: 500;">start - Detects the Pico in BOOTSEL mode - Wipes the flash with flash_nuke.uf2 - Flashes the latest stable CircuitPython for your board - Copies all pico-ducky project files and Adafruit libraries - Asks you to pick a payload to arm — or skip - Swap Payload — replace the active .dd file - Download File — pull any file off the Pico to your computer - Eject — safely unmount before unplugging - Full Reflash — go back through Flash Mode