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.