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-gtk

Flatpak

flatpak install flathub com.system76.Popsicle

Pop!_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-gtk

Arch Linux

# Available in the AUR
paru -S popsicle

Usage

GUI

Launch the graphical wizard:

popsicle-gtk
# Or via Flatpak:
flatpak run com.system76.Popsicle

The interface walks through three steps:

  1. Select image — choose a local ISO or image file
  2. Select drives — tick all USB devices you want to flash
  3. 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

FeaturePopsicleBalena Etcherdd
Written in Rust✅❌ (Electron)❌ (C)
Parallel multi-drive✅❌❌
Native GTK GUI✅❌❌
Headless CLI✅❌✅
Drive filtering✅✅❌
Resource usageLowHigh (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.