A small desktop app for browsing distro images, testing them in a VM, and flashing them to a USB stick.
- Shows a list of Linux distros from a remote JSON catalog
- Displays each distro's image, summary, and full description
- Downloads the selected ISO
- Boots up a Virtual Machine running the ISO
- Flashes the ISO to a chosen block device
The app is being developed mainly for Linux, hence why only those binaries are built. Mileage with non-Linux builds may vary.
- Rust and Dioxus-cli (if compiling from source)
- qemu-system (automatically included on flatpak)
- A target USB device
- A graphical desktop environment
I recommend using the prebuilt binary or the flatpak, but you can also run it with dx:
dx runNote: compiling and running with cargo will break some of the UI
The Flatpak manifest is io.github.techcore3.distroshop.yml. Its Cargo dependencies are pinned in cargo-sources.json; regenerate that file whenever Cargo.lock changes using flatpak-cargo-generator.py Cargo.lock -o cargo-sources.json.
With Flatpak Builder and the GNOME 50 runtime and Rust extension installed, build with:
flatpak-builder --force-clean build-dir io.github.techcore3.distroshop.ymlBefore flashing, double-check the target device path.
The app writes directly to the selected block device. Make sure you are targeting the USB stick, not your system drive.
src/
├── main.rs # app entry point and launch logic
├── list_handler.rs # distro catalog loading, caching, and UI
├── distro_testing/ # VM-based testing of distro images
│ ├── mod.rs
│ └── vm_handler.rs # VM setup and test runs
└── flashing/ # download + flashing logic
├── mod.rs
├── flash_handler.rs
├── flasher_unix.rs
├── flasher_win.rs
└── udisks2_wrapper.rs # UDisks2 integration for Linux disk access
assets/
├── distros.json # distro catalog used by the app
├── logo.png # app favicon (works on everything except wayland)
├── screenshot*.png # AppStream screenshots
└── main.css # styling
GPL-3.0-only; see LICENSE.
