Popsicle
A GTK application and CLI tool by System76 for flashing multiple USB drives simultaneously.
Popsicle is a USB flash tool written in Rust by System76, the Linux hardware
company behind Pop!_OS. It solves a real pain point for sysadmins and power
users: flashing the same ISO image to many USB drives at once, in parallel, with
a clean progress display. It ships both a GTK graphical interface and a headless
CLI, making it equally useful at a desk or over SSH.
Features
- Parallel flashing — write to multiple USB drives simultaneously, limited only by your bus bandwidth
- GTK GUI — step-by-step wizard interface for selecting an image, choosing target drives, and monitoring progress
- CLI mode — fully scriptable headless mode for automation and remote use
- Hash verification — optionally verifies the source image before writing to catch corrupt ISOs early
- Drive filtering — lists only removable block devices, preventing accidental writes to internal disks
- Progress reporting — per-device progress bars in the GUI; byte-level progress output in the CLI
- Written in Rust — memory-safe, fast, and ships as a single statically-linked binary for the CLI component
Installation
From source
Building Popsicle requires the GTK 3 development headers for the GUI component.
# Debian / Ubuntu
sudo apt install libgtk-3-dev
# Fedora
sudo dnf install gtk3-devel
# Then build and install both targets
git clone https://github.com/pop-os/popsicle
cd popsicle
cargo build --release
sudo install -Dm755 target/release/popsicle /usr/local/bin/popsicle
sudo install -Dm755 target/release/popsicle-gtk /usr/local/bin/popsicle-gtkFlatpak
flatpak install flathub com.system76.PopsiclePop!_OS / Ubuntu (System76 PPA)
Popsicle comes pre-installed on Pop!_OS. On Ubuntu you can add the System76 PPA:
sudo add-apt-repository ppa:system76/pop
sudo apt update
sudo apt install popsicle popsicle-gtkArch Linux
# Available in the AUR
paru -S popsicleUsage
GUI
Launch the graphical wizard:
popsicle-gtk
# Or via Flatpak:
flatpak run com.system76.Popsicle
The interface walks through three steps:
- Select image — choose a local ISO or image file
- Select drives — tick all USB devices you want to flash
- Flash — watch per-device progress bars; drives are written in parallel
CLI
# Flash a single drive
sudo popsicle ubuntu-24.04.iso /dev/sdb
# Flash multiple drives at once
sudo popsicle ubuntu-24.04.iso /dev/sdb /dev/sdc /dev/sdd
# List detected removable drives
popsicle --list
# Verify the image checksum before flashing
popsicle --check ubuntu-24.04.iso /dev/sdb
The CLI is particularly useful in imaging labs or CI pipelines where a machine needs to prepare batches of bootable media without human interaction.
Popsicle vs. other USB flashers
| Feature | Popsicle | Balena Etcher | dd |
|---|---|---|---|
| Written in Rust | ✅ | ❌ (Electron) | ❌ (C) |
| Parallel multi-drive | ✅ | ❌ | ❌ |
| Native GTK GUI | ✅ | ❌ | ❌ |
| Headless CLI | ✅ | ❌ | ✅ |
| Drive filtering | ✅ | ✅ | ❌ |
| Resource usage | Low | High (Electron) | Minimal |
Balena Etcher is the most popular graphical alternative but it is an Electron
app with significant memory overhead. dd is universal but serial — it can only
target one device at a time and provides no progress output by default. Popsicle
fills the gap: native, lightweight, and parallel.