Releases: raspberrypi/rpi-imager
Releases · raspberrypi/rpi-imager
Release list
v2.0.11
What's changed
- OS Customisation:
- Add the rpi-preseed first-boot customisation format, and list it as a
valid init_format in the schema notes. - rpi-preseed: always add the account to the 'sudo' group.
- cloud-init: write
sudo: nullwhen the user declines passwordless sudo.
A singularuser:block is merged over the distro default_user, which
raspberry-pi-os populates with passwordless sudo, so omitting the key
granted it regardless of the user's choice;nullsuppresses the rules
while keeping 'sudo' group membership, so the account is prompted for one. - Centralise credential derivation in CustomisationGenerator and hash
credentials in C++ before persisting them. - Verify the device kept the customisation files after writing.
- UI: keep customisation steps centre-middle; drop the unused ImageOptions
enum; bind SSH key row data; allow query parameters on custom manifest
URLs.
- Add the rpi-preseed first-boot customisation format, and list it as a
- Fastboot (Compute Module):
- Add an Erase command for 'Format'.
- Verify device identity before treating a target as a Pi.
- Align stage() tests and docs with the download verb.
- Write reliability:
- Support multi-frame .img.zst images (use ZSTD_findDecompressedSize).
- Linux/Windows: take an exclusive lock on drive open. On Windows, hold
volume locks rather than deleting drive letters, only remove removable
mountpoints, retry the exclusive open before falling back to shared, and
flush the filesystem to media before writing the partition table. - macOS: run DiskArbitration on the main run loop with blocking calls, and
move the nested run loop onto worker threads.
- Embedded (Raspberry Pi network installer):
- Build a dedicated Qt configured -no-opengl -qpa linuxfb -no-dbus
-no-feature-icu. The pi-gen-micro netboot image carries no Mesa or X11
(far too large for a network-loaded image), no session bus, and none of
the languages that need ICU. The package had drifted onto the desktop Qt
and so linked libEGL/libGL/libX11 and libQt6DBus -- absent from the image
-- and could not load on the target. - Build the application without QtDBus for embedded; its DBus users (portal
file dialog, NetworkManager WiFi backend, Pi Connect URI handler) are
unusable on a busless image and are compiled out via QT_DBUS_LIB guards. - Assemble the .deb with debhelper so debian/control is the single source of
dependencies and metadata and md5sums are generated; trim Depends to the
minimal host-provided set (no libegl1/libgl1/libx11-6/libsystemd0, which
apt would otherwise pull -- Mesa and X11 included -- into the image). - Bake an $ORIGIN-relative rpath at build time (was a leaked build-host
path), dereference the bundled fontconfig config, and drop the stale
vendored ICU handling.
- Build a dedicated Qt configured -no-opengl -qpa linuxfb -no-dbus
- Build / packaging:
- Rootless multi-arch (amd64/arm64/armhf) release pipeline: every arch,
the host included, builds inside its bookworm mmdebstrap chroot; there is
no host-native build path (a package built against the host's libraries
is not the package it claims to be). - Desktop and CLI AppImages are now self-contained: bundle the transitive
library closure of the staged AppDir (via readelf, so it also works for
foreign-architecture AppDirs), which was previously taken from the host
and left arm64/armhf incompletely bundled. Declare the genuinely
host-coupled libraries in debian/control. - Build Qt with -no-feature-icu across desktop/CLI/embedded; drop the
JPEG 2000 image plugin; collect the source .buildinfo. - liburing: probe for the 64-bit user_data API (added in 2.2) before
enabling io_uring, so an older build environment falls back to
synchronous writes instead of failing to link. - Vendor curl/libarchive/libusb/nghttp2/xz as git submodules.
- Reproducibility and hygiene: normalise mtimes; generate version files in
an explicit build override; prune qmlls and performance profiles from the
packaged tree; stop deleting the screenshot; ship the fastboot udev rule
inside the .debs; assorted amd64/arm64 packaging fixes.
- Rootless multi-arch (amd64/arm64/armhf) release pipeline: every arch,
PRs
- Backport customization, font logging, and macOS DA fixes from dev/tdewey/2.1 by @tdewey-rpi in #1652
- Add rpi-preseed support by @tdewey-rpi in #1659
- Fix Windows device size truncation and backup boot sector mismatch by @elibosley in #1679
- fix(windows): classify UASP storage as USB by @elibosley in #1682
- perf(extract): coalesce archive blocks into large writes by @elibosley in #1681
- 2.0.11-rc2: Bugfixes by @tdewey-rpi in #1674
- 2.0.11-rc3 fixes by @tdewey-rpi in #1688
- Linux Build docs improvements by @tdewey-rpi in #1691
- Fixup Linux build on newer hosts by @tdewey-rpi in #1692
New Contributors
- @elibosley made their first contribution in #1679
Full Changelog: v2.0.10...v2.0.11
v2.0.11-rc1
What's Changed
- Backport customization, font logging, and macOS DA fixes from dev/tdewey/2.1 by @tdewey-rpi in #1652
- Add rpi-preseed support by @tdewey-rpi in #1659
Full Changelog: v2.0.10...v2.0.11-rc1
v2.0.10
(v2.0.10 includes all changes from v2.0.9, but in released form)
What's new
Pi Connect for Organisations
- Enrol devices via a new wizard flow for Pi Connect for Organisations
- Register devices over HTTPS with on-device signing (
ConnectDeviceRegistrar) - Track organisation registration and provisioning tokens
- Register device identity with Connect automatically after a fastboot flash
- Fix Connect sign-in on more Linux desktop systems (#1564)
Secure Boot and CM5 re-provisioning
- In-place CM5 secure boot re-provisioning via a rewritten
SecureBootProvisioner - New
BootloaderImageTLV editor forpieeprom.bin, with bootfile repacking - Config-signature generation, RSA public-key extraction, and
bootcode2712signing - AB-image support in
BootloaderImage, with signing and extraction tests - Debug toggles for force-secure-boot and sign-fastboot-gadget
- Fetch firmware from
rpi-eeprom; improved reboot handling - Set chosen storage as the first boot source via EEPROM (fastboot)
Accessibility
- Reduced motion support
- New
FocusableTextandFocusableHeadingcomponents - Prevent VoiceOver crash on password fields (#1607)
Device I/O
- Read per-device I/O limits to inform write tuning
Improvements
OS customisation
- Cloud-init: drop
enable_sshin favour ofsystemctlruncmd - Cloud-init: use
user(notusers) for user configuration - Improve SSID handling with octet support and YAML escaping
- Vendor capital cities data locally; no longer fetch from the REST Countries API
- Improve wizard
nextSteplogic for "write another" mode
UI
- Major QML refactor:
ImageWritersingleton, cachegen, lazy-loaded App Options and Debug Options dialogs - Make App Options dialog scrollable; move Telemetry to the bottom
- Fix keyboard navigation on the write confirmation dialog
- Disable "clear customisation" during active writes
- Gate OTP programming visibility
- Align Secure Boot step container styling
Write operations
- Remove the 512-byte alignment requirement
- Do not emit success after a failed extraction (#1603)
- Set extract length when a manifest size is given
- Omit percentage progress when the extract size cannot be determined
- Parse zstd header for extract size with local
.img.zstarchives
Fastboot and rpiboot
- Capture INFO/TEXT lines for OEM commands
- Chunk
file_serverbulk transfers - Resolve cache before fastboot flash
- Pause drive scan during auto-bootstrap
- Track naked rpiboot devices separately in the drive list
- Normalise custom gadget paths so local files can be used
Windows
- Propagate write error handling through
FileOperations - Advertise long path, DPI awareness, and UTF-8 codepage
- Geometric backoff for volume lock; wait for clean completion
- Uninstaller preserves user preferences; removes cache and customisation data
- Use secure memory erase for WiFi credentials
macOS
- Minimum macOS version is now 13
- Coalesce unaligned writes/reads to
/dev/rdisk*(fixes.img.zstEINVAL) - Scale release label in create-dmg
- Use secure memory erase for WiFi credentials
Linux
- Prefer
kreadconfig6with fallback tokreadconfig5; select viaKDE_SESSION_VERSION - AppImage: exclude
libsystemd,libdbus-1, andlibcapfor desktop builds - Build fixes
Embedded
- Move scaling choices into C++
- Deploy vendored tree without AppImage
- Drop
NetworkAccessManagerFactoryand OpenSSL create-embedded.sh: support custom ICU runtime libraries
Dependencies
- Upgrade curl, libarchive, libusb, nghttp2, and xz
- Single source of truth for curl user-agent
- Add nghttp2, libusb, and yescrypt to the licence manifest
Translations
- Updated French, Irish, and Turkish translation dictionaries
Bug fixes
- Fix CM5 re-provisioning support
- Always validate stale cached firmware assets
- Fix rpiboot storage handoff; PAL-ify RSA key fingerprint handling
- Re-bind RSA key visibility for debug options
- Prevent
ImageWriterdouble-construction - Reliably flag Windows system drives (#1558)
- Force disk status refresh on write errors (Windows)
- Prevent mach-port over-release crash on macOS (#1632)
- Better overflow handling for GPT/MBR partitions and FAT long filenames
disk_formatter: handle extremely largesectors_per_fatcachemanager: fix TOCTOU on directory existence check- Fix serial-if disabled handling in customisation
- Fix fastboot command truncation
- Fix French localisation typo and stray text
Documentation
- Update os-list schema
- Prune bmap spec document
- Update bmap-tools repository URL
PRs
- Update French translations by @martignoni in #1586
- i18n Update Irish translation by @aindriu80 in #1591
- fix: prefer kreadconfig6 with fallback to kreadconfig5 by @Ferdinaelectro1 in #1599
- fix(translation): correct typo in French localization by @Nixfo in #1600
- Update Turkish translations by @Sype0 in #1604
- Update bmap-tools repo URL by @lurch in #1616
- Don't show progress in percent if determining the extracted size failed. by @thatguywiththekids in #1617
- fix(mac): coalesce unaligned writes/reads to /dev/rdisk* (.img.zst EINVAL) by @tdewey-rpi in #1621
- 2.0.9: Fix roll-up by @tdewey-rpi in #1634
New Contributors
- @Nixfo made their first contribution in #1600
- @thatguywiththekids made their first contribution in #1617
Full Changelog: v2.0.8...v2.0.10
v2.0.9
What's changed
- Pi Connect for Organisations:
- New wizard flow for registering devices into a Pi Connect organisation
- On-device key signing via
ConnectDeviceRegistrar(HTTPS) - Track org enrolment tokens through
ImageWriter - Register device identity with Connect after a Fastboot flash
- CM5 / Secure Boot re-provisioning:
- Rewrite
SecureBootProvisionerfor in-place re-provisioning - New CM5 re-provisioning pipeline in
FirmwareManager - Add
BootloaderImageTLV editor forpieeprom.bin - Bootfiles repacking (
replaceEntry+writeToFile) - Add
config-sig, RSA pubkey extraction,bootcode2712signing - Debug toggles for force-secure-boot and signed Fastboot gadget
- Rewrite
- Fastboot:
- Capture
INFO/TEXTlines from OEM commands - Fix command truncation
- Normalise custom gadget paths so local files can be used
- Chunk
file_serverbulk transfers - Resolve cache before flash; pause drive scan during auto-bootstrap
- Track naked rpiboot devices separately in the drive list
- Capture
- Cloud-init customisation:
- Drop
enable_ssh; use asystemctlruncmd instead - Use
user:(singular) for user configuration - Fix up
serial-ifdisabled handling
- Drop
- UI:
- Reduced-motion option for users sensitive to animation
- Make
AppOptionsDialogscrollable; move Telemetry to the bottom - Align Secure Boot step container styling
- Write reliability:
- Drop the 512-byte alignment requirement
- Better overflow handling for GPT, MBR, and FAT partition wrappers
- Handle extremely large
sectors_per_fatin the disk formatter - Better handling of long filenames in FAT partitions
- Use a
shared_ptrfor the write ringbuffer to fix lifetime issues - Parse zstd headers to recover the extract size for local archives
- Fix a TOCTOU on the cache directory existence check
- Windows:
- Advertise long-path, DPI awareness, and UTF-8 codepage support in the manifest
- Propagate write errors through
FileOperations - Geometric backoff for volume lock; wait for clean completion
- Use secure memory erase for Wi-Fi credentials
- Uninstaller now preserves user preferences while clearing cache and customisation
- macOS:
- Use secure memory erase for Wi-Fi credentials
- Linux:
- Prefer
kreadconfig6with a fallback tokreadconfig5; select viaKDE_SESSION_VERSION - Use explicit paths in
launchDetachedand the suspend inhibitor's search paths - Use an explicit path for the embedded reboot command
- Exclude
libsystemd,libdbus-1, andlibcapfrom Linux Desktop AppImages
- Prefer
- Device telemetry:
- Introduce reading of device IO limits
- Licensing:
- Add nghttp2, libusb, and yescrypt to the bundled licence list
- i18n: Updated French, Turkish, and Irish translation dictionaries; stray-text fixes in French
PRs
- Update French translations by @martignoni in #1586
- i18n Update Irish translation by @aindriu80 in #1591
- fix: prefer kreadconfig6 with fallback to kreadconfig5 by @Ferdinaelectro1 in #1599
- fix(translation): correct typo in French localization by @Nixfo in #1600
- Update Turkish translations by @Sype0 in #1604
New Contributors
Full Changelog: v2.0.8...v2.0.9
v2.0.8: Bugfixes, Fastboot improvements
What's changed
- Fastboot:
- Enumerate storage devices
- Add mount, unmount, and custom gadget support
- Rename stage to download
- Retry on transient USB errors
- OS Customisation:
- Don't set any groups, leave it to the OS
- Use explicit runcmds for passwordless sudo
- Require active locale selection; no pre-filled defaults
- UI:
- Refresh clipboard status as text fields show
- SSH:
- Add state machine for handling PuTTY's multiline SSH keys
- Linux:
- Explicitly exclude libsystemd
- Write Operations:
- Increase watchdog stall timeout to 180s to match the async write timeout
- Exclude final data sync from write watchdog to avoid false stalls on slow
cards
- i18n: Updated French, Slovak translation dictionaries
- Documentation:
- Add a screenshot of the interface
PRs
- Screenshot by @nafanz in #1559
- Improve french translation by @martignoni in #1560
- Added a state machine for handling PuTTY's multiline SSH keys by @bjepson in #1574
- 2.0.8: Bugfixes, fastboot improvements by @tdewey-rpi in #1582
- Update Slovak translation. by @jose1711 in #1571
- 2.0.8: GH templates, changelog by @tdewey-rpi in #1583
- fix(stall): Relax thresholds, don't count final sync as stallable. by @tdewey-rpi in #1584
New Contributors
Full Changelog: v2.0.7...v2.0.8
v2.0.7
Release edit:
- Earlier macOS DMG was built for Apple Silicon only. Replaced Fri 27 March 2026 @ 15:15 GMT
What's Changed
- chore(release): v2.0.6 by @tdewey-rpi in #1477
- feat(installer): Add windows installer dark mode support in rpi-imager.iss.in by @rc-chuah in #1480
- fix(main): Add warning for log paths that are too long by @Ferdinaelectro1 in #1481
- Add pt-br translation by @eduardoaddad in #1490
- Update Turkish translations by @Sype0 in #1488
- Added documentation clarifying the interaction between old versions of Imager and new versions of RPi OS by @lurch in #1497
- Fix malformed rpi-imager_pt-BR.ts by @lurch in #1499
- Move the development instructions to a separate CONTRIBUTING.md file by @lurch in #1508
- QML: fix property name mismatch in ImFileDialog by @wallentx in #1505
- 2.0.7: Remove legacy mountutils/drivelist, bugfixes by @tdewey-rpi in #1513
- fix(debian): Add missing GUI library dependencies by @tdewey-rpi in #1517
- 2.0.7: Improved combobox search, HK & Macau added, don't store experimental options by @tdewey-rpi in #1525
- 2.0.7: Remove BLKDISCARD, gzip progress bars by @tdewey-rpi in #1528
- Add "Clear saved customisation" button to App Options by @4RH1T3CT0R7 in #1501
- fix(cloud-init): Make instance-id durable across reboots by @tdewey-rpi in #1529
- fix(capital-cities): Update capital city entries and handling for Hong Kong by @tdewey-rpi in #1531
- fix(ImFileDialog): allow typing/pasting full file paths in open mode by @4RH1T3CT0R7 in #1530
- fix(ImComboBox): use PlatformHelper for scroll direction in closed ComboBox by @4RH1T3CT0R7 in #1534
- Fix compile erorr in platformquirks_linux.cpp by @lurch in #1537
- fix(beep): bundle fallback chime for Linux distros without freedesktop sounds by @4RH1T3CT0R7 in #1535
- fix(polkit): use /etc/polkit-1/actions for policy on immutable distros by @4RH1T3CT0R7 in #1536
- fix(wifi): prevent stale WiFi settings from being applied after Skip by @4RH1T3CT0R7 in #1540
- 2.0.7 rollup 2: Fastboot, rpiboot, compute modules, text scaling, proxy support by @tdewey-rpi in #1548
- fix(i18n): add missing French translations for saved customisation settings by @Ferdinaelectro1 in #1555
- chore(.gitignore) : add .idea to .gitignore by @Ferdinaelectro1 in #1552
- i18n: complete zh-CN translation by @ykla in #1554
New Contributors
- @rc-chuah made their first contribution in #1480
- @Ferdinaelectro1 made their first contribution in #1481
- @eduardoaddad made their first contribution in #1490
- @Sype0 made their first contribution in #1488
- @wallentx made their first contribution in #1505
- @4RH1T3CT0R7 made their first contribution in #1501
Full Changelog: v2.0.6...v2.0.7
v2.0.7-rc2: UI polish, experimental features
What's Changed
- chore(release): v2.0.6 by @tdewey-rpi in #1477
- feat(installer): Add windows installer dark mode support in rpi-imager.iss.in by @rc-chuah in #1480
- fix(main): Add warning for log paths that are too long by @Ferdinaelectro1 in #1481
- Add pt-br translation by @eduardoaddad in #1490
- Update Turkish translations by @Sype0 in #1488
- Added documentation clarifying the interaction between old versions of Imager and new versions of RPi OS by @lurch in #1497
- Fix malformed rpi-imager_pt-BR.ts by @lurch in #1499
- Move the development instructions to a separate CONTRIBUTING.md file by @lurch in #1508
- QML: fix property name mismatch in ImFileDialog by @wallentx in #1505
- 2.0.7: Remove legacy mountutils/drivelist, bugfixes by @tdewey-rpi in #1513
- fix(debian): Add missing GUI library dependencies by @tdewey-rpi in #1517
- 2.0.7: Improved combobox search, HK & Macau added, don't store experimental options by @tdewey-rpi in #1525
- 2.0.7: Remove BLKDISCARD, gzip progress bars by @tdewey-rpi in #1528
- Add "Clear saved customisation" button to App Options by @4RH1T3CT0R7 in #1501
- fix(cloud-init): Make instance-id durable across reboots by @tdewey-rpi in #1529
- fix(capital-cities): Update capital city entries and handling for Hong Kong by @tdewey-rpi in #1531
- fix(ImFileDialog): allow typing/pasting full file paths in open mode by @4RH1T3CT0R7 in #1530
- fix(ImComboBox): use PlatformHelper for scroll direction in closed ComboBox by @4RH1T3CT0R7 in #1534
- Fix compile erorr in platformquirks_linux.cpp by @lurch in #1537
- fix(beep): bundle fallback chime for Linux distros without freedesktop sounds by @4RH1T3CT0R7 in #1535
- fix(polkit): use /etc/polkit-1/actions for policy on immutable distros by @4RH1T3CT0R7 in #1536
- fix(wifi): prevent stale WiFi settings from being applied after Skip by @4RH1T3CT0R7 in #1540
- 2.0.7 rollup 2: Fastboot, rpiboot, compute modules, text scaling, proxy support by @tdewey-rpi in #1548
New Contributors
- @rc-chuah made their first contribution in #1480
- @Ferdinaelectro1 made their first contribution in #1481
- @eduardoaddad made their first contribution in #1490
- @Sype0 made their first contribution in #1488
- @wallentx made their first contribution in #1505
- @4RH1T3CT0R7 made their first contribution in #1501
Full Changelog: v2.0.6...v2.0.7-rc2
v2.0.6: Fixup button width calculations, DE translation
What's Changed
- Update de translations by @rejas in #1468
- refactor(ImButton): Update implicit width calculation for better cont… by @tdewey-rpi in #1473
Full Changelog: v2.0.5...v2.0.6
v2.0.5
What's Changed
- all platforms: CLI option added to help on GUI builds
- macOS:
- Add dark mode and Liquid Glass icon support with pre-compiled assets
- Add icon compilation script for regenerating icon assets
- UI:
- Enhance update popup with version tracking functionality
- Improve BaseDialog minimum height for better usability
- Use indeterminate progressbar for local gzip files without size info
- Fixup updatePopupRequested trigger
- Local JSON Helper:
- Add device capabilities support
- Add OS capabilities support
PRs
- Add capabilities to create_local_json by @tdewey-rpi in #1458
- v2.0.5: Update dialog fixed, macOS icon variants fixed by @tdewey-rpi in #1465
Full Changelog: v2.0.4...v2.0.5
v2.0.4
What's new
- Write Robustness:
- Introduce WriteProgressWatchdog to monitor write progress and detect stalls
- Implement recovery strategies for async I/O including queue depth reduction
and sync fallback mechanisms - Standardize timeout handling for pending writes across all platforms
- Add 5-minute emergency timeout as fallback for stalled operations
- Performance:
- Enhance recovery event handling and monitoring diagnostics
- Capture SHA256 hash values in performance profiles for verification diagnostics
- Image Handling:
- Add support for parsing .gz files to extract uncompressed size information
- Improve handling for files larger than 4GB
- Disk Formatting:
- Fix FAT32 formatting for large drives (>8GB)
- Improve root directory handling based on sectors per cluster
- Bug Fixes:
- Fix external tools (runuser, xdg-open) failing in AppImage due to
LD_LIBRARY_PATH conflicts causing PAM module loading errors - Improve thread safety for download cancellation
- Enhance error handling for timeout conditions
- Use Pathlib to generate file:// URIs in local JSON helper script
- Use XDG-compliant canberra-gtk-play and PipeWire for audio notifications
on Linux, fixing beep on Raspberry Pi OS which no longer ships PulseAudio control by default
- Fix external tools (runuser, xdg-open) failing in AppImage due to
- Accessibility:
- Bypass confirmation dialog timer when screen reader is active
- Build:
- Refactor Qt build scripts for improved POSIX compliance and consistency
- Add macOS-specific optimizations for universal builds
PRs
- Use Pathlib to generate file:// URIs, instead of creating them manually by @lurch in #1423
- fix(DiskFormatter): Large drive handling (>8GB) by @tdewey-rpi in #1451
- feat(ImageWriter): Add support for parsing .gz files for size informa… by @tdewey-rpi in #1452
- fix(asyncio): Fix behaviour with misbehaving storage devices by @tdewey-rpi in #1453
- chore(release): v2.0.4 by @tdewey-rpi in #1454
- Update rpi-imager_ca.ts by @xeanhort in #1424
- v2.0.4: Capture Sha256 verification hashes in performance profiles by @tdewey-rpi in #1456
- update korean translate by @RuffaloLavoisier in #1430
New Contributors
Full Changelog: v2.0.3...v2.0.4