- Replace liblzma C bindings with native Rust lzma-rust2 library
- Use XzReaderMt for parallel decompression across all platforms
- Remove dependency on system xz command
- Use get_recommended_threads() to utilize half of CPU cores
- Clean up unused find_binary and get_binary_search_paths functions
- Update module documentation to reflect native Rust approach
This change provides consistent multi-threaded decompression performance
across macOS, Linux, and Windows without requiring external tools.
Replace PowerShell with Win32 APIs (CreateFileW, DeviceIoControl) for reliable
device enumeration on all Windows editions.
Key improvements:
- Add IOCTL_DISK_GET_DRIVE_GEOMETRY_EX for disk size and geometry
- Add IOCTL_STORAGE_QUERY_PROPERTY for bus type and model detection
- Add drive letter mapping via GetLogicalDrives() and volume extents
- Fix system disk detection (check for C: drive instead of assuming disk 0)
- Add smart stop: halt enumeration after 4 consecutive non-existent drives
- Refactor: extract helpers, reduce code by 26% (475→349 lines)
Error handling:
- Suppress expected errors (1,2,5,21) to eliminate log spam
- Only log unexpected device failures
Fixes device enumeration failures on Windows editions without PowerShell.
- Replace PowerShell-based partition discovery with Windows API
(FindFirstVolumeW/FindNextVolumeW, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS)
- Lock and dismount volumes before raw disk access using
FSCTL_LOCK_VOLUME and FSCTL_DISMOUNT_VOLUME
- Keep volume handles open during operation to prevent Windows remount
- Use FILE_FLAG_WRITE_THROUGH for writes, FILE_FLAG_NO_BUFFERING for
verification to bypass OS cache
- Fix intermittent UI freeze by releasing volume locks in background
threads with FSCTL_UNLOCK_VOLUME before CloseHandle
- Add sector-aligned reads for verification when using NO_BUFFERING
Features:
- Add SHA256 checksum verification after download (before decompression)
- Support cancellation during decompression phase
- Reset storage selection when cancelling flash operation
- Improve log format with ANSI colors for hastebin upload
API & Data:
- Switch to armbian-images.json endpoint (from all-images.json)
- Use board_name from API instead of local board_names.json lookup
- Add file_url_sha field for SHA256 verification
- Remove deprecated board_names.json file
- Add new vendors: Allwinner, ARM, SpacemiT, TQ-Group
- Fix YouYeeToo prefix capitalization
Localization:
- Add verifyingSha translation key to all 15 locales
- Remove unused home.images key from all locales
Documentation:
- Update README to mention SHA256 verification
- Integrate tauri-plugin-updater and tauri-plugin-process
- Rewrite UpdateModal with download progress and changelog display
- Add update manifest generation to CI workflow
- Update i18n translations for all 15 languages
- Configure Ed25519 signature verification for secure updates
- Add src-tauri/target to ESLint ignore list
- Fix React hooks lint warnings with eslint-disable comments
- Replace xz2 with liblzma using static feature to fix macOS
code signature mismatch when using ad-hoc signing
Add Microsoft.Windows.Common-Controls v6.0 dependency to app.manifest
to enable modern dialog APIs required by tauri-plugin-dialog.
Also add Windows 7/8/8.1/10/11 compatibility declarations.
- Add i18next and react-i18next for internationalization
- Add sys-locale Rust crate for cross-platform locale detection
- Add Tauri command get_system_locale for backend locale detection
- Create translation files for 14 languages:
EN, IT, DE, FR, ES, PT, NL, PL, RU, ZH, JA, KO, UK, TR
- Update all UI components to use translations
- Update README with new features and 307+ boards count
- Use lsblk TRAN field for reliable transport type detection
- Check sysfs path for /usb, /mmc_host/, /ata patterns
- Map MMC transport to SD for proper badge display
- Use UDisks2 D-Bus API for privilege escalation via polkit
- App runs as normal user, asks for password only when flashing
- Remove board image cache - load images directly from CDN
- Add periodic fdatasync during write for accurate progress bar
- Invalidate page cache before verification with posix_fadvise
- Remove pkexec wrapper and custom Linux packaging config
- Add bus_type field to BlockDevice struct for reliable device classification
- Windows: Extract BusType from PowerShell Get-Disk (USB, SD, SATA, NVMe)
- Linux: Detect from path (mmcblk, nvme) and sysfs for USB/SATA
- macOS: Parse Protocol field from diskutil (Secure Digital, USB, etc.)
- Frontend: Use bus_type as primary source, fallback to model/path heuristics
- Add device type icons: MemoryStick for SD, Usb for USB, Shield for system
- Add colored badges for device types (SD Card, USB, System)
- Auto-refresh device list every 2s with smart change detection
- Only log device changes (added/removed) to reduce log spam
- Add ErrorDisplay component with QR code for log sharing
- Integrate error display in all modals (BoardModal, ImageModal, DeviceModal, ManufacturerModal)
- Add upload_logs command to paste logs to paste.armbian.com
- Add comprehensive logging across all Rust modules:
- Startup info (version, OS, arch, config URLs)
- Board/image queries with cache status
- Device scanning on all platforms
- Download, flash, and authorization operations
- Custom image handling and decompression
- Fix log level alignment (remove extra space from INFO/WARN)
- Add grid layout for board cards with images on top, names below
- Add image count badge with download icon in top-right corner
- Replace star icon with 'Recommended' badge for promoted boards
- Fix search bar to stay fixed when scrolling (moved outside scroll area)
- Add border to modal header for visual separation
- Clean up orphan CSS and remove unused board-icon class
- Reduce icon sizes in DeviceModal for consistency